Ich schreibe einen Scraper für TV-Shows und andere Medien (Spiele, Filme, etc.), und nicht alle Quellen sind für eine bestimmte Show auf die gleiche Weise formatiert. Zum Beispiel könnte eine Quelle Untertitel mit einem Strich, andere Semikola darstellen. Ich verwende derzeit die Levenshtein-Distanz, um die Daten mit den Daten zu vergleichen, die aus dem Dateinamen der TV-Show extrahiert wurden, aber ich habe mich gefragt, ob der Algorithmus für kurze Strings ausgelegt ist, die weniger als einen Satz lang sind. Gibt es einen Algorithmus, der diesem Bedarf besser entspricht?Was ist der am besten geeignete String-Distanz-Algorithmus zum Vergleichen von TV-Show-Titeln?
5
A
Antwort
3
Vor der Vergleichs-/Entfernungsmessung sollten Sie die Titel normalisieren (standardisieren).
Normalisierungs sollten gehören Dinge wie:
- Einfache Formatierung (zB UTF16-Codierung, keine führenden/nachfolgende Leerzeichen und Tabulatoren)
- Alphabet Regeln (zB Ersetzen Ä mit A)
- Akronym Expansion (zB NY -> New-York)
- Regeln für Ortsnamen (z. B. Stadtnamen dürfen keine Leerzeichen, sondern Bindestriche enthalten)
- Großschreibung (z. B. Jeder Buchstabe nach einem Bindestrich sollte groß geschrieben werden)
- Entfernung von Symbolen (z. !,?)
- Anzahl Umwandlungen ("Drei-hundert" bis "300")
- römischen Zahlen Conversions (zB "Louis XVI" auf "Louis 16")
- Non-amerikanisches Englisch zu amerikanischem Englisch (zB „Farbe“ auf „Farbe“)
- Abkürzungen Regeln (zB „Inc.“ anstelle von „Incorporated“, „vs.“ statt „versus“)
Sie Levenshtein Abstand zwischen Paaren von Worten verwenden können (Verwenden Sie es nicht für den ganzen Satz), sondern implementieren Sie ein gleitendes Fenster, da bestimmte Wörter (zB "The") in einer der Darstellungen fehlen können.