from nltk import *
from collections import Counter
bigtxt = open('toSort.txt', 'r').read()
ngram_counts = Counter(ngrams(bigtxt.split(), 3))
print(ngram_counts.most_common(10))
我正在处理一个数据集,其中有多个条目(其中每个条目最初是csv文件中的一行,但现在是文本文件的一行),各种短语:例如。
jump top left now
blue sky time
wow can see every place
上面的第一个代码部分是我尝试查找特定大小的所有n-gram(在本例中为3),但它将文本文件中的所有行视为一个连续的连续短语(如预期的那样) ,从而找到所有n-gram甚至跨越不同的线,给我,例如:
jump top left
top left now
left now blue
now blue sky
各种3克。什么是只在一条线内找到n-gram并计算其频率的最佳方法,例如
jump top left
top left now
有效3克但
now blue sky
不是吗?
答案 0 :(得分:0)
您可以逐行读取文件,为每行单独计算ngrams,然后将计数器合并在一起:
from nltk import *
from collections import Counter
ngram_counts = Counter()
with open('toSort.txt') as bigtxt:
for l in bigtxt:
ngram_counts.update(Counter(ngrams(l.split(), 3)))
print(ngram_counts.most_common(10))
元素从迭代计数或从另一个映射(或计数器)添加。与dict.update()类似,但添加计数而不是替换它们。