Tengo más de 30,000 artículos en francés en un archivo JSON. Me gustaría realizar algunos análisis de texto en artículos individuales y en el conjunto como un todo. Antes de seguir adelante, estoy empezando con objetivos simples:¿Cómo puedo etiquetar y analizar texto en francés usando NLTK y Python?
- identificar las entidades importantes (personas, lugares, conceptos)
- Encuentra cambios significativos en la importancia (~ = frecuencia) de las entidades a través del tiempo (usando el número de secuencia artículo como un proxy para el tiempo)
los pasos que he tomado hasta ahora:
importan los datos en una lista de Python:
import json json_articles=open('articlefile.json') articlelist = json.load(json_articles)
seleccionado un solo artículo para probar, y concatena el texto del cuerpo en una sola cadena:
txt = ' '.join(data[10000]['body'])
cargado un tokenizer frase francesa y dividir la cadena en una lista de frases:
nltk.data.load('tokenizers/punkt/french.pickle') tokens = [french_tokenizer.tokenize(s) for s in sentences]
Ha intentado dividir las oraciones en palabras utilizando el WhiteSpaceTokenizer:
from nltk.tokenize import WhitespaceTokenizer wst = WhitespaceTokenizer() tokens = [wst.tokenize(s) for s in sentences]
Aquí es donde estoy atascado, por las siguientes razones:
- NLTK no tiene un señalizador integrado en el que se puede dividir en palabras francesa. El espacio en blanco no funciona bien, en particular debido a que no se separará correctamente en los apóstrofos.
- Incluso si tuviera que usar expresiones regulares para dividir en palabras individuales, no hay un etiquetador PoS francés (partes del discurso) que pueda usar para etiquetar esas palabras, y no hay forma de dividirlas en unidades lógicas de significado
para Inglés, podría etiquetar y en trozos el texto así:
tagged = [nltk.pos_tag(token) for token in tokens]
chunks = nltk.batch_ne_chunk(tagged)
Mis opciones principales (en orden de preferencia actual) parecen ser:
- uso nltk-trainer para entrenar mi propio etiquetador y chunker.
- Utilice el contenedor de Python para TreeTagger solo para esta parte, ya que TreeTagger ya puede etiquetar francés, y alguien ha escrito un contenedor que llama al binario TreeTagger y analiza los resultados.
- Use una herramienta diferente por completo.
Si tuviera que hacer (1), me imagino que tendría que crear mi propio corpus etiquetado. ¿Es correcto, o sería posible (y predefinido) utilizar el Treebank francés?
Si el formato del corpus French Treebank (example here) no es adecuado para uso con nltk-trainer, ¿es factible convertirlo a dicho formato?
¿Qué enfoques han llevado a los usuarios de NLTK de habla francesa a la etiqueta PoS y al texto del fragmento?
+1 WordPunctTokenizer. Si hay un Treebank francés, entonces ese es probablemente un gran recurso para entrenar a un postagger. Y si requiere la creación de un lector de corpus personalizado, entonces estoy seguro de que NLTK estaría feliz de incluirlo. Una vez que haya hecho eso, nltk-trainer admite la especificación de un lector de corpus personalizado. – Jacob
Gracias Alexis y Jacob. No conozco un corpus etiquetado francés existente, así que probablemente probaré TreeTagger primero. Como dices, probablemente sea más fácil que escribir un lector de corpus personalizado para leer French Treebank. Gracias por la sugerencia re: la lista de correo nltk-users. Leí algunas publicaciones anteriores en el archivo web, pero olvidé suscribirme. – Rahim