10

Welche Methoden werden zum Extrahieren von Positionen aus Freitext empfohlen?Methoden zum Extrahieren von Orten aus Text?

Was ich denken kann, ist regex Regeln wie „Worte ... in Position“ zu verwenden. Aber gibt es bessere Ansätze als das?

denke, ich kann auch jedes extrahiert Token aus dem Text zu, dass der Hash-Tabelle eine Lookup-Hash-Tabelle Tabelle mit Namen für Länder und Städte und dann vergleichen zu haben.

Kennt jemand bessere Ansätze?

Edit: Ich versuche, Standorte aus Tweets Text zu extrahieren. Das Problem der hohen Anzahl an Tweets könnte sich auch auf meine Wahl für eine Methode auswirken.

Antwort

10

Alle regelbasierte Ansätze scheitern wird (wenn Ihr Text ist wirklich „frei“). Dazu gehören Regex, kontextfreie Grammatiken, jede Art von Lookup ... Glaub mir, ich war schon einmal da :-)

Dieses Problem wird namens Entity Recognition genannt. Ort ist eine der 3 am meisten untersuchten Klassen (mit Person und Organisation). Stanford NLP hat eine Open-Source-Java-Implementierung, die extrem leistungsfähig ist: http://nlp.stanford.edu/software/CRF-NER.shtml

Sie können problemlos Implementierungen in anderen Programmiersprachen finden.

+0

Ich versuche, Standorte aus Tweets Text zu extrahieren. Angesichts der hohen Anzahl von Tweets pro Sekunde würde das vermutlich langsamer werden. Recht? –

+0

Nein.Das Training ist langsam und speicherintensiv, aber zur Laufzeit ist dies äußerst effizient. – Blacksad

1

Legen Sie alle Ihre gültigen Standorte in eine sortierte Liste. Wenn Sie einen Vergleich zwischen Groß- und Kleinschreibung vornehmen möchten, vergewissern Sie sich, dass die Groß-/Kleinschreibung Ihrer Liste bereits normalisiert ist.

Dann alles, was Sie tun müssen, ist eine Schleife über einzelne „Wörter“ in Ihrem Eingabetext und zu Beginn jedes neuen Wort, starten Sie eine neue binäre Suche in Ihrer Standortliste. Sobald Sie ein No-Match gefunden haben, können Sie das ganze Wort überspringen und mit dem nächsten fortfahren.

Mögliches Problem: Mehrwortstellen wie "New York", "3rd Street", "Volksrepublik China". Vielleicht ist es aber nötig, die Position zuerst neues Wort zu speichern, wenn Sie feststellen, dass Ihre Suche zu einem (möglichen!) Mehrwort-Ergebnis führt. Wenn dann der vollständige Vergleich fehlschlägt - möglicherweise mehrere Wörter später -, müssen Sie nur noch auf dieses "nächste" Wort zurückgreifen, in Bezug auf das vorherige, wo Sie angefangen haben.

Betreffs, was ein „Wort“ ist: während Sie Ihre Standortliste vorbereiten, um eine Liste aller Charaktere machen, die in Orten erscheinen. Nur Phrasen, die Zeichen aus dieser Liste enthalten, können als gültiges "Wort" betrachtet werden.

+0

Ein weiteres mögliches Problem, dass der erste Teil eines Mehrwort Lage sein könnte, ein Ort an sich sein kann. "Berlin" gegen "Berlin Heights, OH" zum Beispiel. – usr2564301

0

Wie schnell kommen die Tweets? Wie ist es der volle twitter Feuerlöschschlauch oder einige Filterabfragen? Ein etwas ausgefeilterer Ansatz, der dem ähnelt, was Sie beschrieben haben, ist die Verwendung eines NLP-Tools, das in ein Ortsverzeichnis integriert ist. Nur sehr wenige NLP-Tools werden mit den Twitter-Raten mithalten, und nur sehr wenige kommen aufgrund des ganzen Leet-Speak mit Twitter gut zurecht. Der NLP kann je nach Bedarf auf Präzision oder Rückruf eingestellt werden, um die Ausführung von Sperren im Gazetteer zu begrenzen. ich empfehlen, sich bei Rosoka (auch Rosoka Cloud durch Amazon AWS) und GeoGravy