如何在csv的文本文件/条目的每一行中找到所有n-gram?

时间:2017-06-26 17:11:27

标签: python nltk

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

不是吗?

1 个答案:

答案 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))

Counter.update

  

元素从迭代计数或从另一个映射(或计数器)添加。与dict.update()类似,但添加计数而不是替换它们。