使用word2vec工具對指定資料集聚類
阿新 • • 發佈:2018-12-10
一.資料準備階段
採用2018年螞蟻金服舉辦的競賽“金融大腦”初賽的資料集,約10萬條。(其實可以使用自定義的資料集,這裡僅僅是用來做實驗)。進行資料清洗:過濾字母,數字和標點符號。使用結巴分詞,效果如下圖所示:
程式碼如下所示:環境python2.7
#coding=utf-8 import os import sys import codecs import csv import string import jieba import tensorflow as tf import sys import re reload(sys) sys.setdefaultencoding( "utf-8" ) jieba.suggest_freq('花唄', True) jieba.suggest_freq('花貝', True) jieba.suggest_freq('借唄', True) jieba.suggest_freq('花貝', True) #讀取原始csv檔案,並進行分詞 def readcsvfile(read_filename): lines_cut=[] with open(read_filename) as csvfile: for line in csvfile: line_cut='' cutsen=jieba.cut(line) line_cut=' '.join(cutsen) line_cut= re.sub(ur"[^\u4e00-\u9fff]", " ", line_cut) #print(line_cut) lines_cut.append(line_cut) return lines_cut #過濾停用詞 def filter(stpwrdpath,lines_cut): afterfiler_list=[] enco_stpword_list=[] stpwrd_dic = open(stpwrdpath, 'rb') stpwrd_content = stpwrd_dic.read() #將停用詞表轉換為list stpwrdlst = stpwrd_content.splitlines() for stopword in stpwrdlst: enco_stpword=stopword.decode('utf-8') enco_stpword_list.append(enco_stpword) #print (enco_stpword_list) stpwrd_dic.close() for line in lines_cut: new_line="" for word in line.split(" "): if word not in enco_stpword_list: new_line+=word new_line+=' ' print(new_line) afterfiler_list.append(new_line) #print (afterfiler_list) return afterfiler_list #初始的write_filename檔案為空 def writetxtfile(write_filename,write_list): with open(write_filename,'a') as f: for line in write_list: f.write(line) f.write('\n') if __name__ == '__main__': read_filename="mayi.csv"#原始文件 write_filename="after_pre.txt"#分詞去停用詞後的文件 stpwrdpath = "stop_words.txt"#停用詞列表 cut_list=readcsvfile(read_filename)#讀取原始檔案,分詞 afterfiler_list=filter(stpwrdpath,cut_list)#去停用詞 writetxtfile(write_filename,afterfiler_list)#預處理後的文件
其中需增加stop_words.txt停用詞檔案,該程式碼輸入為mayi.csv,輸出為處理後的檔案after_pre.txt。處理效果如上圖所示。
將after_pre.txt重新命名為mayi.txt
二. 從github上下載原始碼
三. 修改demo-classes.sh檔案程式碼
如下圖所示,將make下幾行添加註釋“#”,然後將畫圈的三個地方分別對應經過分詞過濾預處理後的檔案,無序的聚類和有序的聚類結果。本例當中聚類數目為500類。
四. 執行命令
sh demo-class.sh執行該命名則可以得到結果
開啟mayi_classes.sorted.txt 顯示結果如下,可以看出同一類別的詞彙有相關性。聚類效果和資料質量和資料類別數有直接關係。通常聚類適合做為資料的預處理,作為中間結果使用,並不作為最終結果應用。