[英]Saving the n grams python generator output as cvs file
我正在從python中的文本數據中找到n克。
我已經使用NLTK軟件包來實現這一點。 這是代碼
from nltk.util import ngrams
bigrams=ngrams(cleaned_docs,2)
trigrams=ngrams(cleaned_docs,3)
quadgrams=ngrams(cleaned_docs,4)
pentagrams=ngrams(cleaned_docs,5)
這里cleaned_docs是文本中帶標記詞的列表。 每個返回的類型都是一個生成器,其值以n克的元組表示。 對於bi gram,它是這樣的:
for x in bigrams:
print x
("mom's", 'hi')
('this', 'in')
('in', 'house')
我想獲得上述每個n克的頻率分布,並按頻率降序將它們保存在cvs文件中。 csv將具有兩列,一列是n gram名稱,另一列是文本中的對應計數。
我也想繪制n克的頻率,並將該數字另存為.jpeg文件。 這是我用來繪制字母組合或單詞頻率的代碼。 但不確定如何使用此nltk fd對象將其另存為jpeg。
fd = nltk.FreqDist(cleaned_docs)
fig = plt.figure(figsize=(20,15))
plt.ylabel("frequency",fontsize=25)
plt.xlabel("Words",fontsize=25)
plt.rc('xtick', labelsize=15)
plt.rc('ytick', labelsize=15)
plt.title("Word Frequency Distribution",fontsize=25)
fd.plot(80,cumulative=False)
請注意,我正在尋找一種更快的解決方案,因為我的文字很大。 我有55萬個觀測值,每個觀測值平均有500多個字符文本數據。 所以不行。 的二元組和n克也將是巨大的。
nltk.FreqDist
類是python的collections.Counter
的子類,因此沒有什么特別的。 它將計算傳遞給它的可迭代對象中每個元素的出現。
n2_freq = ntlk.FreqDist(bigrams)
要按降序獲得元素,可以使用most_common
方法。
for bigram, freq in n2_freq.most_common():
# Print them...
要保存圖形,可以使用plt.figure
返回的fig
對象,它應該具有savefig
方法。
fig = plt.figure(figsize=(20,15))
[...]
n2_freq.plot()
fig.savefig('bigram_freq_dist.jpg')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.