2010-08-26 16 views
20

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)?

+0

@Noel Was ist mit Griechisch? Sie benutzen ';'. – whiskeysierra

+2

def is_question (text): text.endswith ('?') :-) – Cerin

+4

Also ist "" Zu sein oder nicht. " eine Frage oder nicht? Weil _THAT_ die Frage ist. – polygenelubricants

Antwort

9

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.

+1

s/einer der syntaktischen Parser verfügbar/jeder Parser die Penn Treebank Format/ –

+0

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 ... –

+0

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/ –

1

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. 
+0

Interessanter Ansatz. :) – nabeelmukhtar

+1

Das ist eine nette Methode, es zu tun. Kann ich annehmen, dass dies rein theoretisch ist? – Lee

+6

@Lee: Haben Sie eine Frage zu "tun"? – Tim

0

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.

Verwandte Themen