Python文本處理: 分詞和詞雲圖
阿新 • • 發佈:2018-05-15
wordcloud jieba python3 詞雲 分詞
‘‘‘
import os
import jieba # 分詞包
import numpy # numpy計算包
import codecs # codecs提供open方法指定打開的文件的語言編碼,它會在讀取時自動轉換為內部的unicode
import pandas # 統計學工具包
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator # 詞雲包
from scipy.misc import imread
from time import sleep
def join_txt():
# ---- 合並txt文件
# 獲取目標文件夾的路徑
meragefiledir = os.getcwd() + ‘\\corpus‘
# 獲取當前文件夾中的文件名稱列表
filenames = os.listdir(meragefiledir)
# 打開當前目錄下的result.txt文件,如果沒有則創建
file = open(‘all_result.txt‘, ‘w‘)
# 向文件中寫入字符 先遍歷文件名
for filename in filenames:
filepath = meragefiledir + ‘\\‘
filepath = filepath + filename
# 遍歷單個文件,讀取行數
for line in open(filepath,encoding=‘utf-8‘):
file.writelines(line)
file.write(‘\n‘)
file.close()
def make_pic():
# 導入文本,分詞處理
file = codecs.open(u‘all_result.txt‘, ‘r‘)
content = file.read()
file.close()
segment = []
segs = jieba.cut(content) # 使用jieba分詞
for seg in segs:
if len(seg) > 1 and seg != ‘\r\n‘:
segment.append(seg)
# 去停用詞(文本去噪)
words_df = pandas.DataFrame({‘segment‘: segment})
words_df.head()
stopwords = pandas.read_csv("stopword.txt", index_col=False,
quoting=3, sep=‘\t‘, names=[‘stopword‘], encoding="utf8")
words_df = words_df[~words_df.segment.isin(stopwords.stopword)]
# print(words_df.head(6))
# 詞匯頻率表
words_stat = words_df.groupby(by=[‘segment‘])[‘segment‘].agg({"count": numpy.size})
words_stat = words_stat.reset_index().sort_values(by="count", ascending=False)
# 自定義詞雲背景
bimg = imread(‘mangguo.png‘)
wordcloud = WordCloud(background_color="white", mask=bimg, font_path=‘msyh.ttf‘)
wordcloud = wordcloud.fit_words(dict(words_stat.head(990000).itertuples(index=False)))
# 從背景圖片生成顏色值
bimgColors = ImageColorGenerator(bimg)
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=bimgColors))
# plt.show()
wordcloud.to_file( "ciyun.png")
if __name__ == ‘__main__‘:
join_txt()
sleep(2)
print(‘txt 文件整合完成!----‘)
make_pic()
print(‘ 詞雲 圖片生成 完成-----ciyun.png ‘)
‘‘‘
win 上 wordcloud包需要自己安裝,可以去 https://www.lfd.uci.edu/~gohlke/pythonlibs/
下載對應的whl版本。
需要註意:
wordcloud = wordcloud.fit_words(dict(words_stat.head(990000).itertuples(index=False)))
這裏接受的是一個 dict類型
Python文本處理: 分詞和詞雲圖