日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

自然语言处理——分词系统(正向最大匹配法)

發布時間:2023/12/10 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自然语言处理——分词系统(正向最大匹配法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法分析

正向最大匹配法,對于輸入的一段文本從左至右、以貪心的方式切分出當前位置上長度最大的詞。正向最大匹配法是基于詞典的分詞方法,其分詞原理是:單詞的顆粒度越大,所能表示的含義越確切。該算法主要分兩個步驟:
該算法主要分為兩個步驟:
1、一般從一個字符串的開始位置,選擇一個最大長度的詞長的
片段,如果序列不足最大詞長,則選擇全部序列。
2、首先看該片段是否在詞典中,如果是,則算為一個分出來的詞,如果不是,則從右邊開始,減少一個字符,然后看短一點的這個片段是否在詞典中,依次循環,逐到只剩下一個字。
3、序列變為第2步驟截取分詞后,剩下的部分序列
接下來通過一個實力給大家講解具體操作。

形象化演示

首先我們需要選取一個最大的截取長度,通常我們選取詞典中單個分詞的最大長度,在如下案例中,最長的分詞為(中國人)長度為三,那我們每次就取三個字符來進行分詞

從左側開始選中前三個字符進入帶分序列

判斷此時該序列是否存在于給定的詞典中。很遺憾“我是中”不在詞典中,那么從右側開始將最后一個字符從待分序列中刪去

很遺憾,“我是”依然不在分詞詞典中,繼續從右側刪去字符

如上圖所示,若待分序列的長度為1,則判定為單個詞,將其存入已分列表中,并從待分序列中刪除,在剩余的序列中重新組建待分序列,繼續下一輪分詞

經過幾輪循環,所有待分序列長度為零,得到了一個分詞結果,如下圖所示

代碼實現

dict.txt文件(在這里只是展示了簡單版的詞典,可以自己制作任意詞組或者從網站下載)

#創建字典列表 dic = []def init():"""讀取詞典文件載入詞典:return:"""with open("dict.txt", encoding="utf8") as dic_input:for word in dic_input:dic.append(word.strip())#實現正向最大匹配法 def cut_words(raw_sentence, word_dic):#統計詞典種最長的詞(若小于待切分總長度,則每次從未匹配處找這么長的字符串開始匹配)max_length = max(len(word) for word in dic)sentence = raw_sentence.strip() #移除字符串內的空格#統計序列長度words_length = len(sentence)#存儲切分好的詞語cut_word = []while words_length > 0:max_cut_length = min(max_length, words_length)#創建待分序列subsub = sentence[0 : max_cut_length]#進行一輪分詞,在左側切出一個詞while max_cut_length > 0:if sub in dic: #若待切分的詞在詞典中,則將其加入已分列表,跳出循環cut_word.append(sub)breakelif max_cut_length == 1: #剩下單個字,將其切分,并跳出循環cut_word.append(sub)breakelse: #都不符合則從右側去掉一個詞,重新分詞max_cut_length = max_cut_length - 1sub = sub[0 : max_cut_length]#將切掉的單詞刪去sentence = sentence[max_cut_length:]words_length = words_length - max_cut_lengthwords = "/".join(cut_word)return wordsdef main():"""于用戶交互接口:return: """init()while True:print("請輸入您要分詞的序列")input_str = input()if not input_str:breakresult = cut_words(input_str, dic)print("分詞結果:")print(result) if __name__ == '__main__':main()

效果展示

輸入序列:我是中國人,我熱愛我的祖國
分詞結果:我/是/中國人/,/我/熱愛/我/的/祖國/和/人民

總結

以上是生活随笔為你收集整理的自然语言处理——分词系统(正向最大匹配法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。