1. 程式人生 > >語義的特徵提取及簡單詞頻展示(WordCloud)

語義的特徵提取及簡單詞頻展示(WordCloud)

對於語句分析,以及詞雲展示,具體程式碼如下:

# coding=utf-8
import jieba
import numpy
import pandas as pd
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 將三個句子用jieba.cut處理
content1 = jieba.lcut("今天很殘酷,明天更殘酷,後天很美好,但絕對大部分是死在明天晚上,所以每個人不要放棄今天。")
content2 = jieba.lcut("我們看到的從很遠星系來的光是在幾百萬年之前發出的,這樣當我們看到宇宙時,我們是在看它的過去。")
content3 = jieba.lcut("如果只用一種方式瞭解某樣事物,你就不會真正瞭解它。瞭解事物真正含義的祕密取決於如何將其與我們所瞭解的事物相聯絡。")

# 將此三個轉換成列表
content1 = ' '.join(list(content1))
content2 = ' '.join(list(content2))
content3 = ' '.join(list(content3))

# 例項化count
count = CountVectorizer(stop_words=["不會", "如果"])

# 對三篇文章進行特徵提取
data = count.fit_transform([content1, content2, content3])

# 內容列印
print(count.get_feature_names())
print(data.toarray())

# 雲詞展示
# 統計雲詞
words = [content1.split(" "), content2.split(" "), content3.split(" ")]
stopwords = ["不會", "如果","師兄",  ",", "。"]
all_words = []
for word in words:
    for i in word:
        if i in stopwords or len(i)==1:
            continue
        all_words.append(str(i))

# 轉為DataFrame形式
all_words = pd.DataFrame({"all_words": all_words})

words_count = all_words.groupby(by=["all_words"])["all_words"].agg({"count": numpy.size})
words_count = words_count.reset_index().sort_values(by=["count"], ascending=False)

wordcloud = WordCloud(font_path="/Library/Fonts/Songti.ttc", background_color="white", max_font_size=80)
word_frequence = {x[0]: x[1] for x in words_count.head(len(words_count)-1).values}
wordcloud = wordcloud.fit_words(word_frequence)

# 詞頻展示
plt.imshow(wordcloud)

輸出:

['一種', '不要', '之前', '瞭解', '事物', '今天', '光是在', '幾百萬年', '發出', '取決於', '只用', '後天', '含義', '大部分', '如何', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某樣', '殘酷', '每個', '看到', '真正', '祕密', '絕對', '美好', '聯絡', '過去', '這樣']
[[0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0]
 [0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1]
 [1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]

生成的影象為:
在這裡插入圖片描述