簡體   English   中英

將n克python生成器輸出另存為cvs文件

[英]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')

正如您在plot函數源代碼上看到的那樣,它不返回任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM