Después de algunos años de averiguar cómo funciona, aquí está el tutorial actualizado de
¿Cómo crear un corpus NLTK con un directorio de archivos de texto?
La idea principal es hacer uso del paquete nltk.corpus.reader . En el caso de que tenga un directorio de archivos de texto en inglés , es mejor usar PlaintextCorpusReader .
Si tiene un directorio que se parece a esto:
newcorpus/
file1.txt
file2.txt
...
Simplemente use estas líneas de código y puede obtener un corpus:
import os
from nltk.corpus.reader.plaintext import PlaintextCorpusReader
corpusdir = 'newcorpus/'
newcorpus = PlaintextCorpusReader(corpusdir, '.*')
NOTA: que PlaintextCorpusReader
usará el valor predeterminado nltk.tokenize.sent_tokenize()
y nltk.tokenize.word_tokenize()
dividirá sus textos en oraciones y palabras y estas funciones están diseñadas para inglés, es posible que NO funcione para todos los idiomas.
Aquí está el código completo con la creación de archivos de texto de prueba y cómo crear un corpus con NLTK y cómo acceder al corpus en diferentes niveles:
import os
from nltk.corpus.reader.plaintext import PlaintextCorpusReader
txt1 = """This is a foo bar sentence.\nAnd this is the first txtfile in the corpus."""
txt2 = """Are you a foo bar? Yes I am. Possibly, everyone is.\n"""
corpus = [txt1,txt2]
corpusdir = 'newcorpus/'
if not os.path.isdir(corpusdir):
os.mkdir(corpusdir)
filename = 0
for text in corpus:
filename+=1
with open(corpusdir+str(filename)+'.txt','w') as fout:
print>>fout, text
assert os.path.isdir(corpusdir)
for infile, text in zip(sorted(os.listdir(corpusdir)),corpus):
assert open(corpusdir+infile,'r').read().strip() == text.strip()
newcorpus = PlaintextCorpusReader('newcorpus/', '.*')
for infile in sorted(newcorpus.fileids()):
print infile
with newcorpus.open(infile) as fin:
print fin.read().strip()
print
print newcorpus.raw().strip()
print
print newcorpus.paras()
print
print newcorpus.paras(newcorpus.fileids()[0])
print newcorpus.sents()
print
print newcorpus.sents(newcorpus.fileids()[0])
print newcorpus.words()
print newcorpus.words(newcorpus.fileids()[0])
Finalmente, para leer un directorio de textos y crear un corpus NLTK en otros idiomas, primero debe asegurarse de tener módulos de tokenización de palabras y de oraciones que se puedan llamar en Python y que tomen la entrada de cadena / cadena base y produzcan dicha salida:
>>> from nltk.tokenize import sent_tokenize, word_tokenize
>>> txt1 = """This is a foo bar sentence.\nAnd this is the first txtfile in the corpus."""
>>> sent_tokenize(txt1)
['This is a foo bar sentence.', 'And this is the first txtfile in the corpus.']
>>> word_tokenize(sent_tokenize(txt1)[0])
['This', 'is', 'a', 'foo', 'bar', 'sentence', '.']