標籤:

最大逆向匹配分詞演算法以及CRF條件隨機場(一)

1.首先要有中文停用詞表和相對應語料的詞表,中文停用詞表網上有很多可以下載的地方,在這裡就不再贅述了,而相對應的語料的詞表則需要通過特定的途徑獲取,或者可以通過jieba分詞去獲得。

2.中文停用詞表和相對應的語料格式大概長這樣:

3.有了這些詞表開始正式進行分詞以及打標籤處理,而這時就要用到最大逆向匹配分詞演算法了,這個演算法的核心思想就是規定一個標準長度,比如是8,然後不斷去切割這8個字元,每次切割的同時要去詞庫去找,如果詞庫中有的話將加上斜杠。還是舉個例子會比較好,比如說有一個字元串,"我愛北京天安門",而詞庫里有愛,北京,天安門這幾個詞語,由於這個字元串有點短,就規定固定長度為5好了,

首先從後面開始截取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:機器學習 |