machine learning - NLTK para Reconocimiento de Entidad Nombrada
machine-learning nlp (3)
El bloqueador de NE predeterminado en nltk es un chunker de entropía máximo entrenado en el corpus de ACE ( http://catalog.ldc.upenn.edu/LDC2005T09 ). No ha sido entrenado para reconocer fechas y horas, por lo que debe entrenar a su propio clasificador si desea hacerlo.
Eche un vistazo a http://mattshomepage.com/articles/2016/May/23/nltk_nec/ , todo el proceso se explica muy bien.
Además, hay un módulo llamado timex en nltk_contrib que podría ayudarlo con sus necesidades. https://code.google.com/p/nltk/source/browse/trunk/nltk_contrib/nltk_contrib/timex.py
Estoy tratando de usar el kit de herramientas NLTK para obtener el lugar de extracción, fecha y hora de los mensajes de texto. Acabo de instalar el kit de herramientas en mi máquina y escribí este fragmento rápido para probarlo:
sentence = "Let''s meet tomorrow at 9 pm";
tokens = nltk.word_tokenize(sentence)
pos_tags = nltk.pos_tag(tokens)
print nltk.ne_chunk(pos_tags, binary=True)
Asumí que identificará la fecha (mañana) y la hora (9 pm). Pero, sorprendentemente, no lo reconoció. Obtengo el siguiente resultado cuando ejecuto mi código anterior:
(S (GPE Let/NNP) ''s/POS meet/NN tomorrow/NN at/IN 9/CD pm/NN)
¿Alguien puede ayudarme a entender si me falta algo o NLTK no está lo suficientemente maduro como para etiquetar la hora y la fecha correctamente? ¡Gracias!
El reconocimiento de entidades con nombre no es un problema fácil, no espere que ninguna biblioteca sea 100% precisa. No debe sacar ninguna conclusión sobre el rendimiento de NLTK en base a una oración. Aquí hay otro ejemplo:
sentence = "I went to New York to meet John Smith";
yo obtengo
(S
I/PRP
went/VBD
to/TO
(NE New/NNP York/NNP)
to/TO
meet/VB
(NE John/NNP Smith/NNP))
Como puede ver, NLTK lo hace muy bien aquí. Sin embargo, no pude conseguir que NLTK reconociera today
o tomorrow
como expresiones temporales. Puedes probar Stanford SUTime, es una parte de Stanford CoreNLP - Lo he usado antes de que funcione bastante bien (aunque está en Java).
Si desea identificar correctamente la fecha u hora de los mensajes de texto, puede usar el NER de Stanford .
Utiliza el clasificador CRF (Campos aleatorios condicionales). CRF es un clasificador secuencial. Entonces toma las secuencias de palabras en consideración.
Cómo marco o diseña una oración, en consecuencia obtendrá los datos clasificados.
Si su oración de entrada hubiera sido Let''s meet on wednesday at 9am.
, entonces Stanford NER habría identificado correctamente el wednesday
como fecha y las 9am
. 9am
como hora.
NLTK es compatible con Stanford NER. Intenta usarlo.