Intento construir un corpus etiquetado en POS a partir de archivos .txt
externos para la extracción de entidades y fragmentos y relaciones. Hasta ahora he encontrado una incómoda solución de varios pasos:
Leer archivos con en un corpus de texto plano:
from nltk.corpus.reader import PlaintextCorpusReader my_corp = PlaintextCorpusReader(".", r".*\.txt")
Etiqueta de corpus con el etiquetador POS Penn incorporado:
my_tagged_corp= nltk.batch_pos_tag(my_corp.sents())
(Por cierto, en este punto, Python lanzó un error: NameError: name 'batch' is not defined
)
Escriba las oraciones etiquetadas en el archivo:
taggedfile = open("output.txt" , "w") for sent in dd_tagged: line = " ".join( w+"/"+t for (w, t) in sent ) taggedfile.write(line + "\n") taggedfile.close ()
Y finalmente, lea esta salida nuevamente como corpus etiquetado:
from nltk.corpus.reader import TaggedCorpusReader my_corpus2 = TaggedCorpusReader(".",r"output.txt")
Eso es muy inconveniente para una tarea bastante común (la fragmentación siempre solicita un cuerpo etiquetado). Mi pregunta es: ¿existe una forma más compacta y elegante de implementar esto? ¿Un lector de corpus que obtiene archivos de entrada en bruto y un etiquetador al mismo tiempo, por ejemplo?
Obtuve la solución de trabajo para esto: consulte el enlace para ver el procedimiento paso a paso.
Descarga los archivos necesarios para el mismo desde aquí .
Una vez que siga los comandos de 1 pickle, se generará un archivo y este es su cuerpo etiquetado.
Una vez que se genera el archivo pickle, puede verificar si su etiquetador funciona bien ejecutando el siguiente fragmento de código:
import nltk.data tagger = nltk.data.load("taggers/NAME_OF_TAGGER.pickle") tagger.tag(['some', 'words', 'in', 'a', 'sentence'])