Ungenaue Übereinstimmung im Abfrage-Service
Verwenden Sie eine „ungefähre“ Übereinstimmung in Ihren Adobe Experience Platform-Daten, um die wahrscheinlichsten ungefähren Übereinstimmungen zurückzugeben, ohne nach Zeichenfolgen mit identischen Zeichen suchen zu müssen. Dies ermöglicht eine wesentlich flexiblere Suche nach Ihren Daten und macht Ihre Daten durch Zeit- und Arbeitseinsparungen leichter zugänglich.
Anstatt zu versuchen, die Suchzeichenfolgen neu zu formatieren, um sie zuzuordnen, analysiert die Fuzzy-Übereinstimmung das Verhältnis der Ähnlichkeit zwischen zwei Sequenzen und gibt den Prozentsatz der Ähnlichkeit zurück. FuzzyWuzzy wird für diesen Prozess empfohlen, da seine Funktionen besser geeignet sind, Zeichenfolgen in komplexeren Situationen abzugleichen als in regex oder difflib.
Das in diesem Anwendungsbeispiel dargestellte Beispiel konzentriert sich auf das Abgleichen ähnlicher Attribute aus einer Hotelzimmersuche über zwei verschiedene Reisebüro-Datensätze hinweg. Das Dokument zeigt, wie Zeichenfolgen anhand ihres Ähnlichkeitsgrads aus großen separaten Datenquellen abgeglichen werden. In diesem Beispiel vergleicht Fuzzy Match die Suchergebnisse nach den Funktionen eines Zimmers der Reisebüros Luma und Acme.
Erste Schritte getting-started
Im Rahmen dieses Prozesses müssen Sie ein Modell für maschinelles Lernen trainieren. Dieses Dokument setzt Kenntnisse über eine oder mehrere maschinelle Lernumgebungen voraus.
In diesem Beispiel werden Python und die Jupyter Notebook Entwicklungsumgebung verwendet. Obwohl viele Optionen verfügbar sind, wird Jupyter Notebook empfohlen, da es sich um eine Open-Source-Webanwendung mit geringen Rechenanforderungen handelt. Es kann von der offiziellen JupyterWebsite heruntergeladen.
Bevor Sie beginnen, müssen Sie die erforderlichen Bibliotheken importieren. FuzzyWuzzy ist eine Open-Source-Python-Bibliothek, die auf der difflib-Bibliothek aufbaut und zum Abgleichen von Zeichenfolgen verwendet wird. Es verwendet Levenshtein Distance, um die Unterschiede zwischen Sequenzen und Mustern zu berechnen. FuzzyWuzzy hat die folgenden Anforderungen:
- Python 2.4 (oder höher)
- Python-Levenshtein
Verwenden Sie in der Befehlszeile den folgenden Befehl, um FuzzyWuzzy zu installieren:
pip install fuzzywuzzy
Oder verwenden Sie den folgenden Befehl, um Python-Levenshtein ebenfalls zu installieren:
pip install fuzzywuzzy[speedup]
Weitere technische Informationen zu Fuzzywuzzy finden Sie in ihrer offiziellen Dokumentation.
Verbindung zum Abfrage-Service herstellen
Sie müssen Ihr maschinelles Lernmodell mit dem Abfrage-Service verbinden, indem Sie Ihre Verbindungsberechtigungen angeben. Es können sowohl ablaufende als auch nicht ablaufende Anmeldeinformationen angegeben werden. Weitere Informationen zum der erforderlichen Anmeldeinformationen findenim „Handbuch zu Anmeldeinformationen“. Wenn Sie Jupyter Notebook verwenden, lesen Sie bitte die vollständige Anleitung unter Verbindung zum Abfrage-Service.
Stellen Sie außerdem sicher, dass Sie das numpy Paket in Ihre Python importieren, um lineare Algebra zu aktivieren.
import numpy as np
Die folgenden Befehle sind erforderlich, um eine Verbindung zum Abfrage-Service von Jupyter Notebook aus herzustellen:
import psycopg2
conn = psycopg2.connect('''
sslmode=require
host=<YOUR_ORGANIZATION_ID>
port=80
dbname=prod:all
user=<YOUR_ADOBE_ID_TO_CONNECT_TO_QUERY_SERVICE>
password=<YOUR_QUERY_SERVICE_PASSWORD>
''')
cur = conn.cursor()
Ihre Jupyter Notebook ist jetzt mit dem Abfrage-Service verbunden. Wenn die Verbindung erfolgreich hergestellt wurde, wird keine Meldung angezeigt. Wenn die Verbindung fehlschlägt, wird ein Fehler angezeigt.
Daten aus dem Luma-Datensatz zeichnen luma-dataset
Die zu analysierenden Daten werden aus dem ersten Datensatz mit den folgenden Befehlen extrahiert. Der Kürze halber wurden die Beispiele auf die ersten 10 Ergebnisse der Spalte beschränkt.
cur.execute('''SELECT * FROM luma;
''')
luma = np.array([r[0] for r in cur])
luma[:10]
Wählen Sie Ausgabe aus, um das zurückgegebene Array anzuzeigen.
code language-console |
---|
|
Daten aus dem Acme-Datensatz zeichnen acme-dataset
Die zu analysierenden Daten werden nun mit den folgenden Befehlen aus dem zweiten Datensatz abgerufen. Zur Vereinfachung wurden die Beispiele auf die ersten 10 Ergebnisse der Spalte beschränkt.
cur.execute('''SELECT * FROM acme;
''')
acme = np.array([r[0] for r in cur])
acme[:10]
Wählen Sie Ausgabe aus, um das zurückgegebene Array anzuzeigen.
code language-console |
---|
|
Erstellen einer Fuzzy-Scoring-Funktion fuzzy-scoring
Als Nächstes müssen Sie fuzz
aus der FuzzyWuzzy-Bibliothek importieren und einen Teilverhältnisvergleich der Zeichenfolgen ausführen. Mit der Funktion für das Teilverhältnis können Sie die Zuordnung von Teilzeichenfolgen durchführen. Hierbei wird die kürzeste Zeichenfolge verwendet und mit allen Unterzeichenfolgen abgeglichen, die dieselbe Länge aufweisen. Die Funktion gibt ein prozentuales Ähnlichkeitsverhältnis von bis zu 100 % zurück. Beispielsweise würde die Funktion für das Teilverhältnis die folgenden Zeichenfolgen „Deluxe Zimmer“, „1 King Bett“ und „Deluxe Zimmer mit Kingsize-Bett“ vergleichen und einen Ähnlichkeitswert von 69 % zurückgeben.
Im Anwendungsfall „Hotelzimmer-Match“ geschieht dies mithilfe der folgenden Befehle:
from fuzzywuzzy import fuzz
def compute_match_score(x,y):
return fuzz.partial_ratio(x,y)
Importieren Sie als Nächstes cdist
aus der SciPy-Bibliothek, um den Abstand zwischen den einzelnen Paaren in den beiden Sammlungen von Eingaben zu berechnen. Dieser Parameter berechnet die Bewertungen für alle Zimmerpaare, die von den einzelnen Reisebüros bereitgestellt werden.
from scipy.spatial.distance import cdist
pairwise_distance = cdist(luma.reshape((-1,1)),acme.reshape((-1,1)),compute_match_score)
Erstellen Sie Zuordnungen zwischen den beiden Spalten mithilfe des Fuzzy-Join-Punkts
Nachdem die Spalten auf der Grundlage der Entfernung bewertet wurden, können Sie die Paare indizieren und nur Übereinstimmungen beibehalten, die höher als ein bestimmter Prozentsatz waren. In diesem Beispiel werden nur Paare beibehalten, die mit einem Score von 70 % oder höher übereinstimmen.
matched_pairs = []
for i,c1 in enumerate(luma):
idx = np.where(pairwise_distance[i,:] > 70)[0]
for j in idx:
matched_pairs.append((luma[i].replace("'","''"),acme[j].replace("'","''")))
Die Ergebnisse können mit dem folgenden Befehl angezeigt werden. Der Kürze halber sind die Ergebnisse auf zehn Zeilen beschränkt.
matched_pairs[:10]
Wählen Sie Ausgabe, um die Ergebnisse anzuzeigen.
code language-console |
---|
|
Die Ergebnisse werden dann mithilfe von SQL mit dem folgenden Befehl abgeglichen:
matching_sql = ' OR '.join(["(e.luma = '{}' AND b.acme = '{}')".format(c1,c2) for c1,c2 in matched_pairs])
Anwenden der Zuordnungen für den Fuzzy-Join im Abfrage-Service mappings-for-query-service
Als Nächstes werden die übereinstimmenden Paare mit hoher Punktzahl mithilfe von SQL verbunden, um einen neuen Datensatz zu erstellen.
:
cur.execute('''
SELECT * FROM luma e
CROSS JOIN acme b
WHERE
{}
'''.format(matching_sql))
[r for r in cur]
Wählen Ausgabe, um die Ergebnisse dieses Joins anzuzeigen.
code language-console |
---|
|
Fuzzy-Match-Ergebnisse in Experience Platform speichern save-to-platform
Schließlich können die Ergebnisse der Fuzzy Match-Abfrage mithilfe von SQL als Datensatz in Adobe Experience Platform gespeichert werden.
cur.execute('''
Create table luma_acme_join
AS
(SELECT * FROM luma e
CROSS JOIN acme b
WHERE
{})
'''.format(matching_sql))