用python實現(xiàn)前向分詞最大匹配算法的示例代碼
理論介紹
分詞是自然語言處理的一個基本工作,中文分詞和英文不同,字詞之間沒有空格。中文分詞是文本挖掘的基礎(chǔ),對于輸入的一段中文,成功的進行中文分詞,可以達(dá)到電腦自動識別語句含義的效果。中文分詞技術(shù)屬于自然語言處理技術(shù)范疇,對于一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞算法。
可以將中文分詞方法簡單歸納為:
1.基于詞表的分詞方法
2.基于統(tǒng)計的分詞方法
3.基于序列標(biāo)記的分詞方法
其中,基于詞表的分詞方法最為簡單,根據(jù)起始匹配位置不同可以分為:
1.前向最大匹配算法
2.后向最大匹配算法
3.雙向最大匹配算法
三種方法思想都很簡單,今天就用python實現(xiàn)前向最大匹配算法。
word分詞是一個Java實現(xiàn)的分布式的中文分詞組件,提供了多種基于詞典的分詞算法,并利用ngram模型來消除歧義。能準(zhǔn)確識別英文、數(shù)字,以及日期、時間等數(shù)量詞,能識別人名、地名、組織機構(gòu)名等未登錄詞。能通過自定義配置文件來改變組件行為,能自定義用戶詞庫、自動檢測詞庫變化、支持大規(guī)模分布式環(huán)境,能靈活指定多種分詞算法,能使用refine功能靈活控制分詞結(jié)果,還能使用詞性標(biāo)注、同義標(biāo)注、反義標(biāo)注、拼音標(biāo)注等功能。同時還無縫和Lucene、Solr、ElasticSearch、Luke集成。
前向最大匹配算法
前向最大匹配算法,顧名思義,就是從待分詞句子的左邊向右邊搜索,尋找詞的最大匹配。我們需要規(guī)定一個詞的最大長度,每次掃描的時候?qū)ふ耶?dāng)前開始的這個長度的詞來和字典中的詞匹配,如果沒有找到,就縮短長度繼續(xù)尋找,直到找到字典中的詞或者成為單字。
具體代碼實現(xiàn)
獲取分詞函數(shù):getSeg(text)
:
def getSeg(text): # 句子為空 if not text: return '' # 句子成為一個詞 if len(text) == 1: return text # 此處寫了一個遞歸方法 if text in word_dict: return text else: small = len(text) - 1 text = text[0:small] return getSeg(text)
主函數(shù):main()
def main(): global test_str, word_dict test_str = test_str.strip() # 正向最大匹配分詞測試 最大長度5 max_len = max(len(word) for word in word_dict) result_str = [] # 保存分詞結(jié)果 result_len = 0 print('input :', test_str) while test_str: tmp_str = test_str[0:max_len] seg_str = getSeg(tmp_str) seg_len = len(seg_str) result_len = result_len + seg_len if seg_str.strip(): result_str.append(seg_str) test_str = test_str[seg_len:] print('output :', result_str)
字典:
word_dict = ['混沌', 'Logistic', '算法', '圖片', '加密', '利用', '還原', 'Lena', '驗證', 'Baboon', '效果']
測試句子:
test_str = '''一種基于混沌Logistic加密算法的圖片加密與還原的方法,并利用Lena圖和Baboon圖來驗證這種加密算法的加密效果。'''
分詞結(jié)果
到此這篇關(guān)于用python實現(xiàn)前向分詞最大匹配算法的示例代碼的文章就介紹到這了,更多相關(guān)python 前向分詞最大匹配算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python文件基本操作open函數(shù)應(yīng)用與示例詳解
這篇文章主要為大家介紹了Python文件基本操作open函數(shù)應(yīng)用與示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12使用Tensorflow將自己的數(shù)據(jù)分割成batch訓(xùn)練實例
今天小編就為大家分享一篇使用Tensorflow將自己的數(shù)據(jù)分割成batch訓(xùn)練實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python?Httpx庫實現(xiàn)超跑式網(wǎng)絡(luò)請求用法實例
這篇文章主要為大家介紹了Python?Httpx庫實現(xiàn)超跑式網(wǎng)絡(luò)請求用法實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01Django框架靜態(tài)文件使用/中間件/禁用ip功能實例詳解
這篇文章主要介紹了Django框架靜態(tài)文件使用/中間件/禁用ip功能,結(jié)合實例形式詳細(xì)分析了Django框架靜態(tài)文件的使用、中間件的原理、操作方法以及禁用ip功能相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-07-07Python實現(xiàn)基于KNN算法的筆跡識別功能詳解
這篇文章主要介紹了Python實現(xiàn)基于KNN算法的筆跡識別功能,結(jié)合實例形式詳細(xì)分析了使用KNN算法進行筆跡識別的相關(guān)庫引入、操作步驟與相關(guān)注意事項,需要的朋友可以參考下2018-07-07