Gibt es eine Open-Source-Java-Bibliothek/-Algorithmus, um zu ermitteln, ob ein bestimmter Text eine Frage ist oder nicht?
Ich arbeite an einem Frage-Antwort-System, das analysieren muss, ob der vom Benutzer eingegebene Text eine Frage ist.
Ich denke, das Problem kann wahrscheinlich durch die Verwendung von OpenSource-NLP-Bibliotheken gelöst werden, aber es ist offensichtlich komplizierter als einfache Teil der Tagging-Funktion. Wenn jemand stattdessen den Algorithmus dafür mit einer vorhandenen Open Source-NLP-Bibliothek angeben kann, wäre das auch gut.
Lassen Sie mich auch wissen, wenn Sie eine Bibliothek/Toolkit kennen, die Data Mining verwendet, um dieses Problem zu lösen. Obwohl es schwierig sein wird, genügend Daten für Trainingszwecke zu erhalten, kann ich Stack-Austauschdaten für das Training verwenden.Wie kann man herausfinden, ob ein Satz eine Frage ist (Fragewort)?
Antwort
In einer syntaktischen Parsen einer Frage, die richtige Struktur wird in Form sein:
(SBARQ (WH+ (W+) ...)
(SQ ...*
(V+) ...*)
(?))
Also, mit jedem der verfügbaren syntaktischen Parser, ein Baum mit einem SBARQ-Knoten mit einem eingebetteten SQ (optional) wird ein Indikator sein, die Eingabe ist eine Frage. Der WH + -Knoten (WHNP/WHADVP/WHADJP) enthält den Fragestamm (wer/was/wann/wo/warum/wie) und der SQ enthält die umgekehrte Phrase.
d.h .:
(SBARQ
(WHNP
(WP What))
(SQ
(VBZ is)
(NP
(DT the)
(NN question)))
(. ?))
Natürlich viel vorhergehenden Klauseln, die zu Fehlern in der Parse verursachen (das umgangen werden können), wie wirklich Fragen schlecht geschrieben. Zum Beispiel der Titel dieses Beitrags "Wie finde ich heraus, ob ein Satz eine Frage ist?" wird ein SBARQ haben, aber kein SQ.
s/einer der syntaktischen Parser verfügbar/jeder Parser die Penn Treebank Format/ –
Für die Aussage Doctor Who eine britische Science-Fiction-Fernsehsendung der BBC produzierte Die Penn Treebank Format des Formulars ist (SP (NP (NNP Doktor)) (SBAR (WHNP (WP Who)) (S (VP (VBZ ist)) (NP (NP (DT a) (JJ Britisch) (NN Wissenschaft) (NN Fiktion) (NN Fernsehen) (NN-Programm)) (VP (VBN erzeugt) (PP (IN) (NP (DT der) (NNP BBC)))))))))) Es schlägt fehl ... –
FYI, ein Parser für F #/C# ist als nugget-Paket verfügbar: http://sergeytihon.wordpress.com/2013/07/11/stanford-parser-is-available-on-nuget/ –
Viele Quasi-Fragen/Anfragen-für-Info werden in der grammatikalischen Form einer Aussage gestellt; z.B. "Ich würde gerne wissen, wer mein Fahrrad gestohlen hat".
ich alle Hoffnung auf verlassen würde von seiner Struktur zu bestimmen, ob die Eingabe des Benutzers eine Frage ist, und einfach annehmen es ist eine Frage, es sei denn, es eindeutig keine Frage ist. Sie könnten einen iterativen, interaktiven Ansatz, damit das System sein „Verständnis“ Eingabe des des Benutzers einschränken könnte:
User: I would like to know how many angels fit on the head of a pin.
System: Do you have a question about angels?
User: Yes.
System: Do you want to know if angels are fit?
User: No.
System: Do you want to know if angels have heads?
User: Possibly.
System: Do you want to know if angels have pins?
User: No.
System: Do you want to know if angels are numerous?
User: No.
System: Do you want to know the dimensions of an angel?
User: Yes.
System: Do you mean angels in paintings?
User: No.
System: Do you mean angels in myth and religious writing?
User: Yes.
System: Angels are metaphysical beings.
User: I hear that Pennsylvania was founded by William Penn. Is that true?
System: Do you have a question about hearing?
User: No.
System: Do you have a question about Pennsylvania?
User: Yes.
System: Pennsylvania was founded by William Penn.
User: When?
System: 1682.
User: What does the name mean?
System: What name?
User: Pennsylvania!
System: Do you want to know the meaning of Pennsylvania?
User: Yes.
System: Pennsylvania means Penn's Woods.
Interessanter Ansatz. :) – nabeelmukhtar
Das ist eine nette Methode, es zu tun. Kann ich annehmen, dass dies rein theoretisch ist? – Lee
@Lee: Haben Sie eine Frage zu "tun"? – Tim
Werfen Sie einen Blick auf Link Grammar Parser Es ist ein mehrsprachiger Parser basierend auf dem Konzept der Linkpaare verwandter Wörter im Satz. Es ist in C geschrieben, hat aber auch eine Java JNI-Schnittstelle.
- 1. Wie kann man herausfinden, ob ein Perl-Hash multidimensional ist?
- 2. Wie kann ich herausfinden, ob ein SKTexture das Platzhalterbild ist?
- 3. Wie kann man herausfinden, ob Bluetooth angeschlossen ist?
- 4. Template-Funktion T: Wie kann man herausfinden, ob T ein Zeiger ist?
- 5. Wie man herausfinden kann, ob eine Uber-Fahrt tatsächlich eine UberEats-Lieferung ist
- 6. Wie kann man herausfinden, ob eine gegebene Funktion O (n) ist?
- 7. Herausfinden, ob eine Spalte NICHT NULL ist
- 8. Wie kann man herausfinden, ob ein Programm mit einem Subprozess abgestürzt ist?
- 9. Wie kann man herausfinden, ob sich zwei CGRect schneiden?
- 10. Reagieren - kann ich herausfinden, ob eine Komponente gerade sichtbar ist
- 11. Wie kann ich herausfinden, ob eine Datei geändert wurde?
- 12. velocity: wie man herausfinden kann, ob ein Feldwert eine bestimmte Zeichenkette enthält
- 13. Wie kann man herausfinden, ob eine Lazy-Relation mit SQLAlchemy noch nicht geladen ist?
- 14. Wie kann man herausfinden, welche Ausnahme eine Funktion auslösen kann?
- 15. Wie kann man herausfinden, ob ein Dokument mit ShellExecute geöffnet werden kann?
- 16. Programmgesteuert herausfinden, ob ein Prozess Benutzereingaben erfordert
- 17. Wie kann ich herausfinden, ob AdMob eine Anzeige geladen hat?
- 18. Finden, ob ein Satz eine bestimmte Phrase in Ruby enthält
- 19. Wie man herausfinden kann, ob eine Batch-Datei durch Doppelklick oder durch die Befehlszeile
- 20. Wie kann ich feststellen, ob ein Satz von 5 Zahlen in Visual Basic zu 15 addiert?
- 21. Kann nicht herausfinden, wie man eine Methode in einen String
- 22. Wie kann man herausfinden, ob eine Methode eines bestimmten Prototyps in einer Klasse existiert?
- 23. Wie kann man herausfinden, ob ein bestimmtes Gerät SIM-Hardware-Unterstützung hat?
- 24. In Applescript, wie kann ich herausfinden, ob ein Menüpunkt ausgewählt/fokussiert ist?
- 25. Wie kann man herausfinden, ob der PC mit einem Netzwerk verbunden ist?
- 26. Wie kann man herausfinden, ob der Benutzer immer noch mit der sessionbasierten Authentifizierung angemeldet ist?
- 27. NHibernate: Herausfinden, ob eine Eigenschaft einem Feld zugeordnet ist
- 28. Alternative zu überprüfen, ob ein Wert in einem Satz ist
- 29. Wie man herausfinden kann, ob/wann eine Github-Zusammenführungs-Anfrage als Edelstein veröffentlicht wurde
- 30. Wie kann ich herausfinden, dass ein Knoten oder eine ButtonBase ein Button ist?
@Noel Was ist mit Griechisch? Sie benutzen ';'. – whiskeysierra
def is_question (text): text.endswith ('?') :-) – Cerin
Also ist "" Zu sein oder nicht. " eine Frage oder nicht? Weil _THAT_ die Frage ist. – polygenelubricants