Ich habe 2 Listen von potenziell überlappenden Filmtiteln, aber möglicherweise in einer anderen Form geschrieben.
Sie sind in 2 verschiedenen Datenrahmen von Pandas. Also habe ich versucht, die map()
Funktion mit der fuzzywuzzy
Bibliothek zu verwenden, wie so:Wie man Filme mit difflib und Pandas fuzzy match?
df1.title.map(lambda x: process.extractOne(x, choices=df2.title, score_cutoff=95))
, die einige gute Qualität Ergebnisse. Aber die Zeit Komplexität ist so, dass ich es nur auf einer sehr kleinen Teilmenge von beiden Datenrahmen ausführen kann. Wenn ich versuche, die Größe der Datenrahmen zu erhöhen, wird sie schnell unbrauchbar.
Dann habe ich versucht, fuzzywuzzy
durch difflib
zu ersetzen. Und es ist viel schneller. Aber ich kann nicht die gewünschten Ergebnisse erzielen.
Zuerst versuchte ich:
df1.title.map(lambda x: difflib.get_close_matches(x, df2.title, n=1)
Und das war schnell, aber die Qualität der Ergebnisse war schlecht. Es fehlen sogar einige einfache Änderungen in Groß-/Kleinschreibung. Das Spielen mit der cutoff
hat nicht geholfen.
Also dachte ich, ich benutze das falsche Werkzeug. In den Dokumenten und Beispielen sah ich get_close_matches
auf einzelne Wörter verwendet. In Titeln gibt es verschiedene Wörter.
Ist SequenceMatcher
eine bessere Wahl?
Und wenn ja, wie passe ich es in die map()
so tut es das gleiche wie die oben genannten Funktionen: nur das beste Ergebnis zurückgeben, und nur wenn das Ergebnis über einem bestimmten Verhältnis ist?
Viel benötigtes Paket. Aber es erfordert "Visual C++ Build Tools", die 4 GB auf der Festplatte ist. – user2978216
Interessant - Ich denke du bist auf Windows? Hast du schon Pandas/Numpy installiert? Können Sie Einzelheiten darüber angeben, wo/wann Sie die Fehlermeldung erhalten? – RobinL
Ich bin auf Windows, Pandas/Numpy sind installiert. Installationsversuch wirft [Fehlermeldung] (https://imgur.com/a/DXD5g) – user2978216