2017-06-10 206 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