iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
AI & Data

建立FF14資訊Discord chatbot系列 第 13

[DAY 13]Discord頻道對話文字雲分析

先前的功能需求都是自己需要才做的

所以今天就來做個工會頻道的文字雲了解一下我們頻道常聊的主題是什麼看看能不能透過bot來解決他們的問題

步驟

  1. 先從頻道上收集所有對話開始,最快抓取資料的方式是使用google擴充功能來完成,裝好後到網頁版discord點擊右上角剛剛的擴充功能圖標後會出現要抓取的頻道以及抓取的日期範圍,我是抓大概快兩年的時間,要注意得維持頁面直到轉出為止

excel的輸出結果:

爬下來的資料筆數為7810筆,這擴充功能還很貼心的告訴我們哪筆對話是BOT,Mentions欄位是指該對話有@別人,Attachments是該對話有上傳附件檔案,整體看下來是個相當乾淨的資料,希望我們公司資料也能這麼乾淨就好了ㄎㄎ

  1. 接下來開始先初步的清洗資料,清的對象有以下幾點:

    • BOT對話還有我的對話
    • Content欄位裡是空值的筆數
    • 由於工會頻最常見的是新成員要告訴管理員ID,ID只會是英文,再加上我們公會沒有歪國人,所以對Content欄位裡篩選出有中文的筆數
  2. 清完後的筆數為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)
    
  1. 上面程式碼最後會輸出個txt檔,裡面就是斷好詞的詞。接下來就是生成文字雲,文字雲生成可以用套件或是網站,由於套件還需要調參有點麻煩,所以我選擇用wordart來生成,登入完後按create

  1. 點擊import後將txt檔裡的詞直接複製貼上,然後import words

  1. 點擊下面的shape後點擊Add image選擇你要生成文字雲的圖片,我這邊就拿FF14 ICON為範例

  1. font這邊選擇我這邊是選漢王字型,如果用他預設的字型中文會無法出來

  1. 設定好後接著點擊visualize

  1. 呈現結果:

總結

根據文字雲上的詞其實可以判斷出工會主要的玩家以新手居多,翻了一下對話紀錄像是公會出現那麼多次是因為找管理員申請進公會,還有我發現主線跟副本出現次數多代表公會頻其實有找團的需求,所以之後我會建一個找團的功能減少他們找團的時間


上一篇
[DAY 12]讓BOT 24小時在線(3/3)
下一篇
[DAY 14]cog架構用法(1/2)
系列文
建立FF14資訊Discord chatbot30

尚未有邦友留言

立即登入留言