Estoy tratando de descubrir cómo usar el troceador en cascada de NLTK según el Capítulo 7 del libro de NLTK . Desafortunadamente, me encuentro con algunos problemas al realizar medidas de fragmentación no triviales.
Comencemos con esta frase:
"adventure movies between 2000 and 2015 featuring performances by daniel craig"
Puedo encontrar todos los NP relevantes cuando uso la siguiente gramática:
grammar = "NP: {<DT>?<JJ>*<NN.*>+}"
Sin embargo, no estoy seguro de cómo construir estructuras anidadas con NLTK. El libro ofrece el siguiente formato, pero claramente faltan algunas cosas (por ejemplo, ¿cómo se especifican realmente varias reglas?):
grammar = r"""
NP: {<DT|JJ|NN.*>+} # Chunk sequences of DT, JJ, NN
PP: {<IN><NP>} # Chunk prepositions followed by NP
VP: {<VB.*><NP|PP|CLAUSE>+$} # Chunk verbs and their arguments
CLAUSE: {<NP><VP>} # Chunk NP, VP
"""
En mi caso, me gustaría hacer algo como lo siguiente:
grammar = "MEDIA: {<DT>?<JJ>*<NN.*>+}
RELATION: {<V.*>}{<DT>?<JJ>*<NN.*>+}
ENTITY: {<NN.*>}"
Se me ocurre que un CFG podría ser mejor para esto, pero solo me di cuenta del soporte de NLTK para esta función hace aproximadamente 5 minutos (a partir de esta pregunta ), y no parece que exista mucha documentación para la función.
Entonces, suponiendo que me gustaría usar un trozo en cascada para mi tarea, ¿qué sintaxis necesitaría usar? Además, ¿es posible para mí especificar palabras específicas (por ejemplo, "dirigido" o "actuado") cuando uso un chunker?