12 Stimmen

Algorithmus zur Zuordnung von "lauten" Namen

Ich habe eine Anwendung, die Fußballergebnisse von verschiedenen Quellen im Web abruft. Mannschaftsnamen sind auf verschiedenen Websites nicht konsistent - z. B. könnte Manchester United auf einer Seite 'Man Utd', auf einer zweiten Seite 'Man United' und auf einer dritten Seite 'Manchester United FC' genannt werden. Ich muss alle möglichen Ableitungen auf einen einzelnen Namen ('Manchester United') abbilden und den Prozess für jede der 20 Teams in der Liga wiederholen (Arsenal, Liverpool, Man City usw.). Natürlich möchte ich keine falschen Übereinstimmungen [z. B. 'Man City', die auf 'Manchester United' abgebildet wird].

Derzeit spezifiziere ich Regex für alle möglichen Kombinationen - z. B. 'Manchester United' wäre 'man(chester)?(u|(utd)|(united))(fc)?'; das ist in Ordnung für ein paar Websites, wird aber zunehmend unhandlich. Ich suche nach einer Lösung, die es vermeiden würde, diese Regexes angeben zu müssen. Es muss z. B. einen Weg geben, 'Man Utd' so zu 'bewerten', dass es gegen 'Manchester United' eine hohe Punktzahl erhält, aber eine niedrige / null Punktzahl gegen 'Liverpool' [zum Beispiel]; Ich würde den Beispieltext gegen alle möglichen Lösungen testen und diejenige mit der höchsten Punktzahl auswählen.

Mein Gefühl sagt mir, dass die Lösung möglicherweise ähnlich ist wie das klassische Beispiel eines neuronalen Netzes, das darauf trainiert wird, Handschriften zu erkennen [d. H. Es gibt einen festen Satz möglicher Ergebnisse und ein Maß an Rauschen in den Eingabemustern].

Hat jemand Ideen?

Vielen Dank.

0 Stimmen

Das Problem bei maschinellem Lernen ist, dass Sie einen ausreichend großen Datensatz benötigen, um damit zu trainieren, einen anderen Datensatz zum Testen benötigen und ihn dann in der Welt loslassen müssen. Ihr Post-Titel hat mich an den Soundex-Algorithmus denken lassen, vielleicht kann er dazu beitragen, die Größe der Eingaben für Ihr neuronales Netzwerk zu reduzieren.

0 Stimmen

@sarnold: nicht immer der Fall: en.wikipedia.org/wiki/Semi-supervised_learning

1voto

Gilbert Le Blanc Punkte 47973

Es scheint, dass Sie die gleichen Quellen screenen.

Angenommen, Ihre Quellen sind konsistent im Benennen der Teams, wäre eine Zeichenfolgenkonvertierung die effektivste Lösung.

Man Utd -> Manchester United

Manchester United FC -> Manchester United

1voto

Dan Dyer Punkte 52915

Ich habe dieses genaue Problem in Python gelöst, aber ohne eine ausgeklügelte KI. Ich habe nur eine Textdatei, die die verschiedenen Variationen auf die kanonische Form des Namens abbildet. Es gibt nicht viele Variationen und sobald Sie alle aufgelistet haben, werden sie selten geändert.

Meine Datei sieht ungefähr so aus:

man city=Manchester City
man united=Manchester United
man utd=Manchester United
manchester c=Manchester City
manchester utd=Manchester United

Ich lade diese Aliase in ein Wörterbuchobjekt und wenn ich einen Namen zuordnen muss, konvertiere ich ihn in Kleinbuchstaben (um Probleme mit unterschiedlichen Großschreibung zu vermeiden) und suche ihn dann im Wörterbuch nach.

Wenn Sie wissen, wie viele Teams es geben soll, können Sie auch eine Überprüfung hinzufügen, um Sie zu warnen, wenn Sie mehr verschiedene Namen finden, als Sie erwarten.

0voto

michid Punkte 9389

Sie könnten einen Ähnlichkeitsmaßstab auf den beteiligten Zeichenfolgen verwenden und einen manuell angepassten Schwellenwert festlegen. Alternativ könnte der Schwellenwert auch durch einen maschinellen Lernansatz trainiert werden. Welcher bestimmte Ähnlichkeitsmaßstab am besten funktioniert, hängt von der Art der Zeichenfolgen ab, die Sie abgleichen möchten. Möglicherweise müssen Sie die Zeichenfolgen vor der Anwendung eines Maßstabes vorverarbeiten (d.h. Rauschzeichen wie Leerzeichen usw. entfernen, Normalisierung der Großschreibung, Lösung von gebräuchlichen bekannten Abkürzungen, ...)

Für einen ziemlich umfassenden Überblick über verschiedene Zeichenfolgenähnlichkeitsmaße und eine Java-Bibliothek besuchen Sie http://www.dcs.shef.ac.uk/~sam/stringmetrics.html

0voto

Alex Feinman Punkte 5197

Sie möchten möglicherweise auch eine Strukturanalyse des Textes durchführen. Ein Wortarten-Analysator könnte darauf hinweisen, welche Wörter als Eigennamen verwendet werden, was Ihnen zusätzliche Hinweise darauf gibt, dass "mn au" von jemandem mit dyslektischen Fingern in Eile als "Man U" eingegeben wurde - etwas, das kein Regex herausfinden wird.

Es ist wahrscheinlich auch am besten, die Software "zu trainieren" - spezifische Rechtschreibweisen hinzuzufügen, wenn Sie diese finden.

Die Analyse natürlicher Sprache ist schwierig! Viel Glück!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X