Sau một số năm tìm hiểu cách thức hoạt động, đây là hướng dẫn cập nhật của
Làm thế nào để tạo một kho ngữ liệu NLTK với một thư mục các tệp văn bản?
Ý tưởng chính là sử dụng gói nltk.corpus.reader . Trong trường hợp bạn có một thư mục các tệp văn bản bằng tiếng Anh , tốt nhất bạn nên sử dụng PlaintextCorpusReader .
Nếu bạn có một thư mục giống như sau:
newcorpus/
file1.txt
file2.txt
...
Chỉ cần sử dụng những dòng mã này và bạn có thể nhận được một kho tài liệu:
import os
from nltk.corpus.reader.plaintext import PlaintextCorpusReader
corpusdir = 'newcorpus/'
newcorpus = PlaintextCorpusReader(corpusdir, '.*')
LƯU Ý: rằng PlaintextCorpusReader
will sử dụng mặc định nltk.tokenize.sent_tokenize()
và nltk.tokenize.word_tokenize()
để chia văn bản của bạn thành câu và từ và các chức năng này được xây dựng cho tiếng Anh, nó có thể KHÔNG hoạt động cho tất cả các ngôn ngữ.
Dưới đây là toàn bộ mã với việc tạo các tệp văn bản thử nghiệm và cách tạo một kho tài liệu với NLTK và cách truy cập kho văn bản ở các cấp độ khác nhau:
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])
Cuối cùng, để đọc một thư mục các văn bản và tạo ra một corpus NLTK bằng các ngôn ngữ khác, trước tiên bạn phải đảm bảo rằng bạn có một con trăn-callable từ tokenization và câu tokenization module mất chuỗi / basestring đầu vào và sản lượng sản xuất như:
>>> 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', '.']