先前的功能需求都是自己需要才做的
所以今天就來做個工會頻道的文字雲了解一下我們頻道常聊的主題是什麼看看能不能透過bot來解決他們的問題
excel的輸出結果:
爬下來的資料筆數為7810筆,這擴充功能還很貼心的告訴我們哪筆對話是BOT,Mentions欄位是指該對話有@別人,Attachments是該對話有上傳附件檔案,整體看下來是個相當乾淨的資料,希望我們公司資料也能這麼乾淨就好了ㄎㄎ
接下來開始先初步的清洗資料,清的對象有以下幾點:
清完後的筆數為6482筆,接下來就是對聊天內容進行斷詞及辨識詞性,斷詞的套件我推薦用CkipTagger,照連結的安裝就可以了大家可以試試,比較可能會遇到問題的是不知道裡面詞性代表的意思是什麼,可以從這個連結查詢
怕字數不夠放個清整時的程式碼,我只提取跟名詞有關的詞性
import pandas as pd
from ckiptagger import data_utils, construct_dictionary, WS, POS, NER
if __name__ == '__main__':
rdf = pd.read_excel("chathistory.xlsx",engine='openpyxl')
df = rdf[(rdf["Is bot"]=="No")&(rdf["Author username"]!="joe_美國爸爸ㄧ島")]
df.dropna(subset=["Content"],inplace=True)
#對Content欄位裡篩選出有中文的筆數
chinese_pattern = '[\u4e00-\u9fa5]+'
df = df[df['Content'].str.contains(chinese_pattern,regex=True)]
ws = WS(r"./data")
pos = POS(r"./data")
ner = NER(r"./data")
sentence_list = df['Content'].tolist()
word_sentence_list = ws(sentence_list)
pos_sentence_list = pos(word_sentence_list)
entity_sentence_list = ner(word_sentence_list, pos_sentence_list)
pos_list = ["Na","Nb","Nc","Ncd","Nd"]
clean_list = []
for i, sentence in enumerate(sentence_list):
# print_word_pos_sentence(word_sentence_list[i], pos_sentence_list[i])
assert len(word_sentence_list[i]) == len(pos_sentence_list[i])
for word, pos in zip(word_sentence_list[i], pos_sentence_list[i]):
if pos in pos_list:
# print("word")
clean_list.append(word)
with open("fout.txt", "w",encoding="utf-8") as fout:
print(*clean_list, sep="\n", file=fout)
根據文字雲上的詞其實可以判斷出工會主要的玩家以新手居多,翻了一下對話紀錄像是公會出現那麼多次是因為找管理員申請進公會,還有我發現主線跟副本出現次數多代表公會頻其實有找團的需求,所以之後我會建一個找團的功能減少他們找團的時間