最大逆向匹配分詞演算法以及CRF條件隨機場(一)
2.中文停用詞表和相對應的語料格式大概長這樣:
首先從後面開始截取5個字,然後把這5個字與字典匹配,發現詞表中沒有,就將北字去掉,以此類推,直到找到詞表中的詞或者只剩下單字,還有一個關鍵點是讀取原始文本時一定要去掉空白符,還有不用去掉中文標點符號。現在給出具體python代碼,大神們輕噴。。。
#! python3# -*- coding: utf-8 -*-import xlrdfrom datetime import datetimedef vocabulary(path):"""從excel表格獲得詞表""" x1 = xlrd.open_workbook(path) sheet1 = x1.sheets()[0] col_2 = sheet1.col_values(1)return col_2[1:]def read_essay():with open(test.txt, r, encoding=utf8) as f: content = f.read().strip()return contentdef max_reverse(essay, essay_name, stop_words_vocabulary, words_vocabulary):"""最大逆向匹配分詞演算法""" essay_length = len(essay) # 一定要將空白符給去掉然後得出文章長度 new_essay = parts = []while essay_length >= 8: # 當文章長度大於8時 cut = essay[-8:essay_length] # 切出長度為8的字元串 """開始對子串進行處理""" for i in range(8, 0, -1): inside_cut = cut[-i:] # 對子串進行切割 if (inside_cut in stop_words_vocabulary) or (inside_cut in words_vocabulary) or (i == 1): new_essay = inside_cut + / + new_essay # 形成帶斜杠的文章 essay_length -= i essay = essay[:essay_length] # 只要找到一個詞就將文章長度減小 parts.insert(0, inside_cut) # 不斷將找到的詞語插入到列表中 break while 0 < essay_length < 8: # 當文章長度已經減小到小於8時 for i in range(essay_length, 0, -1): inside_cut = essay[-i:] inside_cut_length = len(inside_cut)if (inside_cut in stop_words_vocabulary) or (inside_cut in words_vocabulary) or inside_cut_length == 1: new_essay = inside_cut + / + new_essay # 形成帶斜杠的文章 essay_length -= i essay = essay[:essay_length] # 只要找到一個詞就將文章長度減小 parts.insert(0, inside_cut) # 不斷將找到的詞語插入到列表中 break with open(slash_%s.txt % essay_name, w) as f: f.write(new_essay)return partsdef combine(): data1 = vocabulary(stopwords.xlsx) data2 = vocabulary(words.xlsx) essay = read_essay()print(datetime.now())result = max_reverse(essay, test, data1, data2)print(datetime.now())if __name__ == __main__: combine()
推薦閱讀:
※圖解gradient的智能與learning rate的注意事項
※1-3 What is Machine Learning
※機器學習基石筆記15-16:小結和雜談
※RF、GBDT、XGBoost常見面試題整理
※歸一化 正則化 標準化
TAG:機器學習 |