从大量的 txt 语料库中获取 Ngram 频率。文件

Getting Ngram frequency from a a large corpus of txt. files

我需要开发一个代码,用于使用 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 的所有文件的输出。

我的第一个问题是如何将语料库 reader 连接到即将到来的代码以计算 ngrams?

我下一步的问题是我应该使用什么代码模块来计算二元组、三元组和四五克及其频率,这样既高效又快速?

我有 300 个 txt 文件,想用它们来获取 ngram 频率。

您可以像使用内置的 nltk 语料库一样使用新语料库,例如 Brown 或 Reuters 语料库:根据需要调用方法 words()sents()。两种方法都接受文件名参数;如果使用,您只会得到该文件的文字。我建议使用它一次处理一个文件,否则您的一些 ngram 将在一个文件中开始并在另一个文件中结束。 (你想要跨越句子边界的 ngrams 吗?你必须做出相应的决定和处理)。

NLTK 书籍具有函数 nltk.bigramsnltk.trigramsnltk.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 的部分。好好看看