公衆號文章連接前端
2018-05-05 15:55:40 2班某某(1315426911)
2018-05-07 13:48:39 2XXX<xxxx@qq.com>
複製代碼
pattern=re.compile(r'(\d*)-(\d*)-(\d*) .* .*')#匹配 信息
pattern2=re.compile(r'(\d+):(\d+):\d+')#匹配 15:55:40
複製代碼
代碼開箱可用,你須要把你的文件名==替換正確的路徑==,還有要在同級目錄下==建立img文件夾==保存生成的兩張圖片。各類依賴環境很簡單,直接pip install xxx。 附上核心代碼:python
import re
import numpy as np
import matplotlib.pyplot as plt ##繪圖庫
from wordcloud import WordCloud
import jieba.analyse
string="2018-05-05 15:55:40 2班某某(1315426911)"
pattern=re.compile(r'(\d*)-(\d*)-(\d*) .* .*')
#匹配 2018-05-05 15:55:40 2班某某(1315426911) 有一個坑點就是2018-05-07 13:48:39 2XXX<xxxx@qq.com>這種格式
pattern2=re.compile(r'(\d+):(\d+):\d+')#匹配 15:55:40
#pattern3=re.compile(r'(\()(.*?)(\))')#匹配 2班某某(1315426911)相關內容
f = open('E:/text.txt', 'r', encoding='utf-8') # 要進行分詞處理的文本文件 (通通按照utf8文件去處理,免得麻煩)
lines = f.readlines()
index=0
def getpicture(y):#matplotlib繪圖
x=[]
for i in range(0,24):
x.append(str(i)+':00-'+str(i+1)+':00')
Xi = np.array(x)
Yi = np.array(y)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標籤
plt.figure(figsize=(8, 6)) ##指定圖像比例: 8:6
plt.subplots_adjust(bottom=0.2)
plt.scatter(Xi, Yi, color="red", label="times")
plt.xlabel("時間00:00—24:00")
plt.ylabel("發言次數/次")
plt.xticks(range(0,24),rotation=75,fontsize=10)#設置橫座標顯示24次。
plt.yticks(range(0,1000,50))
# plt.legend(loc='lower right') # 繪製圖例
# plt.show()
plt.savefig("img/hour.png",format='png')
plt.close()
def getciyun(value):
text=''
for i in range(0,24):
text+=str(value[i]['text'])
args=jieba.analyse.extract_tags(text,topK=80)
text=' '.join(args)
wc = WordCloud(background_color="white",
width=1500, height=1000,
min_font_size=40,
font_path="simhei.ttf",
# max_font_size=300, # 設置字體最大值
random_state=40, # 設置有多少種隨機生成狀態,即有多少種配色方案
) # 字體這裏有個坑,必定要設這個參數。不然會顯示一堆小方框wc.font_path="simhei.ttf" # 黑體
# wc.font_path="simhei.ttf"
my_wordcloud = wc.generate(text)
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
wc.to_file('img/wordcloud.png')
def analysebyhour(lines):
value=[]
y=[]
index=0
for i in range(0,24):
value.append({})
value[i]['time']=0
value[i]['text']=''
for line in lines:
if line != "\n" and line.strip() != "\n" and line != None and not line.__contains__("撤回了"):
line = line.replace("[表情]", " ").replace("@全體成員", " ").replace("[表情]", " ").\
replace("[QQ紅包]我發了一個「專享紅包」,請使用新版手機QQ查收紅。", "").replace("\n", " ").replace("[圖片]",'')
if(pattern.search(line)):#匹配到正確的對象
date=pattern.search(line)
hour=pattern2.search(line).group(1)
#print(date.group(0),hour)
value[int(hour)]['time']+=1
index=hour
else:
print(line)
value[int(index)]['text']+=str(line)
for i in range(0,24):
print('time:',i,'time',value[i]['time'])
y.append(value[i]['time'])
getpicture(y)
getciyun(value)
analysebyhour(lines)
複製代碼
而後兩張圖片就出來了: 正則表達式
經過這些簡單的文本分析感受頗有趣,有興趣等有時間把第二種也作出來,那種可能作起來比較麻煩一些。可是難道仍是不大的。這些東西看似高深,其實瞭解api作起來很簡單。api
但願一塊兒加油。數組