我需要开发一个代码,用于使用NLTK计算大型文本语料库中的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的所有文件的输出。
我的第一个问题是如何将语料库阅读器连接到即将到来的代码来计数ngram ?
我在下一步的问题是我应该用什么模块的代码来计数双字母,三字母和四个&5克和它们的频率哪个是高效和快速的?
我有300个txt文件,想用它们来获得ngram频率
您使用新语料库的方式与内置的nltk语料库(如Brown或Reuters语料库)相同:根据需要调用words()
或sents()
方法。这两个方法都接受一个filename参数;如果使用,您将只得到该文件的单词。我建议使用它一次处理一个文件,否则您的一些ngram将在一个文件中开始,在另一个文件中结束。(你想要跨越句子边界的句子吗?你必须作出决定,并据此进行。
NLTK书有函数nltk.bigrams
, nltk.trigrams
和nltk.ngrams
(接受第二个参数n
指定ngram大小)。
for fname in files.fileids():
lots_of_bigrams = nltk.bigrams(files.words(fname))
# count them however you want
NLTK书籍的第2章展示了如何使用words()
和sents()
,甚至有一节关于ngram。