Wie kann ich Wörter aus einem Satz extrahieren und bestimmen, welcher Teil der Sprache jeweils ist? [geschlossen]

19

Ich möchte etwas schreiben, das einen Satz enthält und jedes Wort identifiziert und definiert, welcher Teil der Sprache jedes Wort ist.

Beispielsweise

Hallo Welt, ich bin ein Satz

würde dies zurückgeben

verb noun, pronoun verb adjective noun

Idealerweise möchte ich es irgendwann noch einen Schritt weiter gehen und einen Satz nehmen und ihn programmatisch verstehen lassen, was er zu interpretieren versucht, und vielleicht etwas dagegen tun.

Meine Frage ist also, hat jemand von so etwas gehört?

Vinny
quelle
2
"Hallo" ist ein Verb? Ich meine, ich weiß nicht, was es sonst sein würde, aber es scheint kein Verb zu sein.
Dan Ray
@DanRay: Vielleicht ist das eine Frage für english.stackexchange.com?
StriplingWarrior
1
@ DanRay haha, siehst du? Deshalb versuche ich herauszufinden, ob etwas das kann, weil ich anscheinend schrecklich in Grammatik bin.
Vinny
@Vinny - Natürlich ist es möglich. Das Problem ist ... dies ist die nächste Billion-Dollar-Idee, und zu diesem Zeitpunkt ist sie noch nicht zu einem Produkt geworden.
Ramhound
1
@Vinny Ja, jemand hat davon gehört.
Tulains Córdova

Antworten:

18

Dies nennt man Natural Language Processing und es ist ein riesiges, komplexes Feld. So etwas wie Sie beschreiben, ist eine monumentale Leistung, und selbst die besten Lösungen wie Watson sind bei weitem nicht perfekt.

Solche Dinge machen es schwierig: "Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo"

Ein grammatikalisch korrekter Satz im amerikanischen Englisch, der als Beispiel dafür dient, wie Homonyme und Homophone verwendet werden können, um komplizierte sprachliche Konstrukte zu erstellen. Es wird seit 1972 in der Literatur diskutiert ... Es wurde auch in Steven Pinkers 1994 erschienenem Buch The Language Instinct als Beispiel für einen Satz erwähnt, der "scheinbar unsinnig", aber grammatisch ...

Die Bedeutung des Satzes wird klarer, wenn verstanden wird, dass er die Stadt Buffalo, New York und das etwas ungewöhnliche Verb "to buffalo" (was "mobben oder einschüchtern" bedeutet) verwendet und wenn die Zeichensetzung und die Grammatik erweitert werden, so dass der Satz liest wie folgt: "Büffelbüffel dieser Büffelbüffelbüffel, Büffelbüffel." Die Bedeutung wird noch deutlicher, wenn Synonyme verwendet werden: "Büffelbison, der andere Büffelbison, der selbst Büffelbison schikaniert."

Ryathal
quelle
1
Das ist was ich suche! Hat jemand von jemandem gehört, der dies in kleinerem Maßstab anpasst? Open Source? Beispiele für die Verwendung in kleineren Maßstäben?
Vinny
@Vinny AFAIK Open Source bietet nicht viel, da die Lösung dieser Probleme für Unternehmen wie die Erkennung von MS Word-Grammatik äußerst rentabel ist. Es gibt jedoch einige Chatter-Bot-Programme, die meiner Meinung nach verfügbar sind.
Ryathal
1
@Vinny Die Schwierigkeit hat nichts mit Skalierung zu tun. Die Verarbeitung natürlicher Sprache weist eine inhärente Komplexität auf, die sich nicht verringert, wenn Sie den "Maßstab" verringern.
Tulains Córdova
6

Obwohl das Teilen eines Satzes und das Ermitteln der grammatikalischen Korrektheit zusammen mit dem Lösen Ihres ersten Problems einfacher ist als das Lösen Ihres zweiten Problems, sind viele Komplexitäten wie Verb- oder Gerundien wie Schwimmen, Programmieren usw. und andere solche Komplikationen immer noch eine Herausforderung - siehe Morons ' Antworten.

Aber Ihr zweites Problem - die Menschen in großen Anstrengungen gesetzt haben eine perfekte Lösung zu finden, aber ein wirklich perfekt „Interpretation“ Algorithmus nicht realisierbar ist praktisch für jede natürliche Sprache wie Englisch - es gibt Variationen, wird Ihren Algorithmus vermasseln. Dieses Feld - eine Mischung aus KI, Informatik und Linguistik - wird als NLP bezeichnet . Bedenken Sie Folgendes: Auch Google Translate ist nicht perfekt, wenn Sie Sätze "interpretieren".

Dennoch ist dies ein sehr interessantes Feld, mit dem man sich beschäftigen muss.

Yati Sagade
quelle
@StriplingWarrior Ich wollte nur einen ausreichenden Kontrast zwischen den beiden vom OP aufgeworfenen Problemen herstellen. Zur Kenntnis genommen. Bearbeiten Sie auf dem Weg
Yati Sagade
4

Ich denke, Sie sollten anfangen, diesen Wikipedia-Artikel zu lesen:

http://en.wikipedia.org/wiki/Part-of-speech_tagging

(Es ist ein Forschungsgebiet, erwarte keine einfache Lösung dafür.)

Doc Brown
quelle
2
Es sollte hinzugefügt werden, dass NLP auf heutigen Computern zwar riesig, hart und wahrscheinlich nicht mehr zu handhaben ist, POS-Tagging jedoch der einfachste Teil davon ist und mit einer ausreichenden Korpusgröße oder viel Engagement und manuellem Schreiben von Regeln nahezu perfekt gelöst werden kann. sicherlich über 99% Richtigkeit. Das könnte für Ihre Bedürfnisse ausreichen.
Kilian Foth
danke, genau das habe ich auch gesucht.
Amc_rtty
Nach der Beschreibung von OP sollte dies die akzeptierte Antwort sein, da Sie @KilianFoth
Amc_rtty
-1

Ein billiger Weg, dies zu tun, wäre, eine Datenbank des Wörterbuchs einzurichten (ich bin fast sicher, dass jemand dies getan hat).

Benötigen Sie zwei Felder in der Tabelle: wordundusage

Verwandle die Phrase in ein Array von Strings (jedes Wort ist ein String) und unabhängig voneinander:

select 'usage' from Dictionary WHERE 'word' = $word; 

Es ist eine schwere Lösung, aber eine, die ich in der Vergangenheit verwendet habe.

mheinke
quelle
5
Dies setzt voraus, dass jedes Wort nur einen möglichen POS hat, und ich versichere Ihnen, dass dies überhaupt nicht der Fall ist.
Microtherion
Einverstanden - es gibt keine Möglichkeit, wie dies (zumindest auf Englisch) mit allen Wörtern funktionieren könnte, die je nach Kontext als Substantive, Verben usw. fungieren können.
Derek