machine-learning nlp nltk text-processing named-entity-recognition

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.