我正在对一个充满句子的文本文件进行数据清理任务。在完成这些句子后,我想得到我的词干列表中单词的频率。但是我遇到了一个问题,因为在打印词干列表时,我会为每个句子获取一个列表:
[u'anyon', u'think', u'forgotten', u'day', u'parti', u'friend', u'friend', u'paymast', u'us', u'longer', u'memori']
[u'valu', u'friend', u'bought', u'properti', u'actual', u'relev', u'repres', u'actual', u'valu', u'properti']
[u'monster', u'wreck', u'reef', u'cargo', u'vessel', u'week', u'passeng', u'ship', u'least', u'24', u'hour', u'upload', u'com']
我想获得所有单词的频率,但我只是通过使用以下代码获得每个句子的频率:
fdist = nltk.FreqDist(stem_list)
for word, frequency in fdist.most_common(50):
print(u'{};{}'.format(word, frequency))
这产生以下输出: 的朋友; 2 paymast; 1 长; 1 memori; 1 杂色; 1 美国1 天; 1 任意子; 1 遗忘; 1 想; 1 实际; 2 properti; 2 VALU; 2 的朋友; 1 repres; 1 relev; 1 买1 周; 1 货物; 1 怪物; 1 小时; 1 破坏; 1 上传1 passeng; 1 至少1 礁1 24; 1 容器; 1 船舶; 1 COM; 1 内; 1 区域; 1 territori; 1 自1 水; 1 3; 1
“朋友”这个词被计算两次,因为它是两个不同的句子。我怎么能把它算作朋友一次并展示朋友;在这种情况下是3?
答案 0 :(得分:0)
您可以在一个列表中连接所有内容:
stem_list = [inner for outer in stem_list for inner in outer]
并以与您相同的方式处理。
否则,您可以保留相同的代码,但不是打印,而是创建一个字典并用您获得的值填充它。每次获得新单词时,都会创建该键,然后添加该值。
all_words_count = dict()
for word, frequency in fdist.most_common(50):
if word in all_words_count : # Already found
all_words_count[word] += frequency
else : # Not found yet
all_words_count[word] = frequency
for word in all_words_count :
print(u'{};{}'.format(word, all_words_count[word]))
答案 1 :(得分:0)
我认为最简单的方法是在将数组传递给函数之前组合数组。
allwords = [inner for outer in stem_list for inner in outer]
fdist = nltk.FreqDist(allwords)
for word, frequency in fdist.most_common(50):
print(y'{};{}'.format(word, frequency))
或更短:
fdist = nltk.FreqDist([inner for outer in stem_list for inner in outer])
for word, frequency in fdist.most_common(50):
print(y'{};{}'.format(word, frequency))
我认为您的输入如下:
stem_list = [[u'anyon', u'think', u'forgotten', u'day', u'parti', u'friend', u'friend', u'paymast', u'us', u'longer', u'memori'],
[u'valu', u'friend', u'bought', u'properti', u'actual', u'relev', u'repres', u'actual', u'valu', u'properti'],
[u'monster', u'wreck', u'reef', u'cargo', u'vessel', u'week', u'passeng', u'ship', u'least', u'24', u'hour', u'upload', u'com'],
[.....], etc for the other sentences ]
所以你有两个数组 - 第一个用于句子,第二个用于sentenc中的单词。使用allwords = [inner for outer in outer in outer in outer],你可以浏览句子并将它们组合成一个单词数组。
答案 2 :(得分:0)
You could flatten your 2D array first with chain.from_iterable
:
fdist = nltk.FreqDist(chain.from_iterable(stem_list)):
for word, frequency in fdist.most_common(50):
print(u'{};{}'.format(word, frequency))