2017-06-10 152 views
0

请问如何计算“词组”的频率分布?NLTK词组分布的频率分布

换句话说,我有一个文本文件。这里是一个快照:

a snapshot of it is given here

这里是我的代码,以查找在文本文件中的50个最常用的词:

f=open('myfile.txt','rU') 
text=f.read() 
text1=text.split() 
keywords=nltk.Text(text1) 
fdist1=FreqDist(keywords) 
fdist1.most_common(50) 

在结果中,你可以在链接中看到,每个单词计算。下面是结果的截图:

a screenshot of the results

它运作良好,但我试图找到每一行的文本文件的频率分布。例如,在第一行中,有一个术语“概念改变”。该程序将“概念”和“更改”计算为不同的关键字。但是,我需要找到术语“概念改变”的频率分布。

+0

欢迎堆栈溢出。您可以通过提供一些有关您尝试过的方式以及卡住的位置的信息来改善您的问题。 – Willem

+1

另外:输入文件实际上是什么样的?显示几行。 – alexis

+0

我根据你的建议编辑了我的问题 –

回答

0

您正在分割文本任何空格。见the docs,这是默认行为,当你不给任何分隔符。

如果您要在示例程序中输出text1的值,您会看到这一点。它仅仅是一个单词列表 - 不是线条 - 所以在传递到FreqDist时已经完成了损坏。

为了解决这个问题,只是text.split("\n")取代:

import nltk 
from nltk import FreqDist 
f=open('myfile.txt','rU') 
text=f.read() 
text1=text.split("\n") 
keywords=nltk.Text(text1) 
print(type(keywords)) 
fdist1=FreqDist(keywords) 
print(fdist1.most_common(50)) 

这给出了一个输出,如:

[('conceptual change', 1), ('coherence', 1), ('cost-benefit tradeoffs', 1), ('interactive behavior', 1), ('naive physics', 1), ('rationality', 1), ('suboptimal performance', 1)] 
+0

嘿我有一个类似的问题,我想知道你是否可以帮助我。我不会将这些单词当作OP本身来分解,我使用的是NLTK文本作为输入,并且我分别得到单词'heart'和'rate'。有没有办法解决这个问题?提前致谢! https://stackoverflow.com/questions/45531514/nltk-freqdist-counting-two-words-as-one – tech4242