我需要开发一个代码,用于使用NLTK计算大型txt语料库中的Ngram(1,2,3,4,5,6)频率。我有两个问题: 1:我有以下代码将文件导入为批量:
from nltk.corpus import PlaintextCorpusReader
Corpus_root = 'C/x/x/Myfolder'
files = PlaintextCorpusReader(corpus_root, '.*')
files.fileids()
给我输出读入NLTK的所有文件。
我的第一个问题是如何将语料库阅读器连接到即将到来的代码来计算ngrams?
下一步我的问题是我应该用什么模块来计算bigram,trigram和four&五克及其频率高效快速?
我有300个txt文件,想要使用它们来获得ngram频率。
答案 0 :(得分:0)
您使用新语料库的方式与内置的nltk语料库相同,例如布朗或路透社语料库:根据需要调用方法words()
或sents()
。两种方法都接受文件名参数;如果使用,你只会得到该文件的文字。我建议使用它一次处理一个文件,否则你的一些ngrams将从一个文件开始到另一个文件结束。 (你想要ngram跨越句子边界吗?你必须决定并相应地继续)。
NLTK书中包含函数nltk.bigrams
,nltk.trigrams
和nltk.ngrams
(它接受指定ngram大小的第二个参数n
。)
for fname in files.fileids():
lots_of_bigrams = nltk.bigrams(files.words(fname))
# count them however you want
NLTK书的 Chapter 2显示了如何使用words()
和sents()
,甚至还有一节关于ngrams的内容。好好看看。