2010-08-26 11 views
20

¿Existe una biblioteca/algoritmo Java de código abierto para encontrar si una determinada pieza de texto es una pregunta o no?
Estoy trabajando en un sistema de preguntas y respuestas que necesita analizar si el texto ingresado por el usuario es una pregunta.
Creo que el problema probablemente se resuelva mediante el uso de bibliotecas NLP de código abierto, pero es obviamente más complicado que el etiquetado de parte de una simple voz. Entonces, si alguien puede decir el algoritmo utilizando una biblioteca NLP de código abierto existente, eso sería bueno también.
También avíseme si conoce una biblioteca/kit de herramientas que utiliza la extracción de datos para resolver este problema. Aunque será difícil obtener datos suficientes para fines de capacitación, podré utilizar los datos de intercambio de pila para el entrenamiento.¿Cómo saber si una oración es una pregunta (interrogativa)?

+0

@Noel ¿Qué pasa con el griego? Usan ';'. – whiskeysierra

+2

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

+4

Así es '" Ser o no ser ". una pregunta o no? Porque _THAT_ es la pregunta. – polygenelubricants

Respuesta

9

En un análisis sintáctico sintáctica de una pregunta, la estructura correcta será en forma de:

(SBARQ (WH+ (W+) ...) 
     (SQ ...* 
      (V+) ...*) 
     (?)) 

Por lo tanto, utilizando cualquiera de los analizadores sintácticos disponibles, un árbol con un nodo SBARQ que tenga un SQ incrustado (opcionalmente) será un indicador de que la entrada es una pregunta. El nodo WH + (WHNP/WHADVP/WHADJP) contiene la raíz de pregunta (who/what/when/where/why/how) y el SQ contiene la frase invertida.

es decir .:

(SBARQ 
    (WHNP 
    (WP What)) 
    (SQ 
    (VBZ is) 
    (NP 
     (DT the) 
     (NN question))) 
    (. ?)) 

Por supuesto, tener un montón de cláusulas precedentes causará errores en el análisis sintáctico (que se puede trabajar alrededor), como será realmente mal escrito preguntas. Por ejemplo, el título de esta publicación "¿Cómo saber si una oración es una pregunta?" tendrá un SBARQ, pero no un SQ.

+1

s/uno cualquiera de los analizadores sintácticos disponibles/cualquier analizador utilizando el formato de Penn Treebank/ –

+0

Para la declaración médico que es un programa de televisión de ciencia ficción británica producida por la BBC El formato Penn Treebank es de la forma (ARRIBA (NP (NP (NNP Doctor)) (SBAR (WHNP (WP Who)) (S (VP (VBZ es) (NP (NP (DT a) (JJ británico) (NN ciencia) (NN ficción) (NN televisión) (programa NN)) (VP (VBN producido) (PP (IN por) (NP (DT el) (NNP BBC)))))))))) Fracasa ... –

+0

FYI, un analizador para F #/C# está disponible como paquete nuget: http://sergeytihon.wordpress.com/2013/07/11/stanford-parser-is-available-on-nuget/ –

1

Muchas cuasi preguntas/solicitudes de información se plantean en la forma gramatical de una declaración; p.ej. "Me gustaría saber quién robó mi bicicleta".

Me abandonar toda esperanza de determinación de su estructura si la entrada del usuario es una pregunta, y simplemente asumir es una cuestión a menos que no es una pregunta sin ambigüedades. Usted podría tomar un enfoque iterativo, interactiva, de modo que el sistema podría afinar su "comprensión" de la entrada del usuario:

 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

Enfoque interesante. :) – nabeelmukhtar

+1

Ese es un buen método para hacerlo. ¿Puedo suponer que esto es puramente teórico? – Lee

+6

@Lee: ¿Tiene alguna pregunta sobre "hacerlo"? – Tim

0

Eche un vistazo a Link Grammar Parser Es un analizador de varios idiomas basado en el concepto de pares de enlaces de palabras relacionadas en la oración. Está escrito en C, pero también tiene una interfaz Java JNI.

Cuestiones relacionadas