用python實(shí)現(xiàn)前向分詞最大匹配算法的示例代碼
理論介紹
分詞是自然語(yǔ)言處理的一個(gè)基本工作,中文分詞和英文不同,字詞之間沒(méi)有空格。中文分詞是文本挖掘的基礎(chǔ),對(duì)于輸入的一段中文,成功的進(jìn)行中文分詞,可以達(dá)到電腦自動(dòng)識(shí)別語(yǔ)句含義的效果。中文分詞技術(shù)屬于自然語(yǔ)言處理技術(shù)范疇,對(duì)于一句話,人可以通過(guò)自己的知識(shí)來(lái)明白哪些是詞,哪些不是詞,但如何讓計(jì)算機(jī)也能理解?其處理過(guò)程就是分詞算法。
可以將中文分詞方法簡(jiǎn)單歸納為:
1.基于詞表的分詞方法
2.基于統(tǒng)計(jì)的分詞方法
3.基于序列標(biāo)記的分詞方法
其中,基于詞表的分詞方法最為簡(jiǎn)單,根據(jù)起始匹配位置不同可以分為:
1.前向最大匹配算法
2.后向最大匹配算法
3.雙向最大匹配算法
三種方法思想都很簡(jiǎn)單,今天就用python實(shí)現(xiàn)前向最大匹配算法。
word分詞是一個(gè)Java實(shí)現(xiàn)的分布式的中文分詞組件,提供了多種基于詞典的分詞算法,并利用ngram模型來(lái)消除歧義。能準(zhǔn)確識(shí)別英文、數(shù)字,以及日期、時(shí)間等數(shù)量詞,能識(shí)別人名、地名、組織機(jī)構(gòu)名等未登錄詞。能通過(guò)自定義配置文件來(lái)改變組件行為,能自定義用戶詞庫(kù)、自動(dòng)檢測(cè)詞庫(kù)變化、支持大規(guī)模分布式環(huán)境,能靈活指定多種分詞算法,能使用refine功能靈活控制分詞結(jié)果,還能使用詞性標(biāo)注、同義標(biāo)注、反義標(biāo)注、拼音標(biāo)注等功能。同時(shí)還無(wú)縫和Lucene、Solr、ElasticSearch、Luke集成。
前向最大匹配算法
前向最大匹配算法,顧名思義,就是從待分詞句子的左邊向右邊搜索,尋找詞的最大匹配。我們需要規(guī)定一個(gè)詞的最大長(zhǎng)度,每次掃描的時(shí)候?qū)ふ耶?dāng)前開(kāi)始的這個(gè)長(zhǎng)度的詞來(lái)和字典中的詞匹配,如果沒(méi)有找到,就縮短長(zhǎng)度繼續(xù)尋找,直到找到字典中的詞或者成為單字。
具體代碼實(shí)現(xiàn)
獲取分詞函數(shù):getSeg(text):
def getSeg(text):
# 句子為空
if not text:
return ''
# 句子成為一個(gè)詞
if len(text) == 1:
return text
# 此處寫(xiě)了一個(gè)遞歸方法
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()
# 正向最大匹配分詞測(cè)試 最大長(zhǎng)度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', '驗(yàn)證', 'Baboon', '效果']
測(cè)試句子:
test_str = '''一種基于混沌Logistic加密算法的圖片加密與還原的方法,并利用Lena圖和Baboon圖來(lái)驗(yàn)證這種加密算法的加密效果。'''
分詞結(jié)果

到此這篇關(guān)于用python實(shí)現(xiàn)前向分詞最大匹配算法的示例代碼的文章就介紹到這了,更多相關(guān)python 前向分詞最大匹配算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中文分詞工具之結(jié)巴分詞用法實(shí)例總結(jié)【經(jīng)典案例】
- Python結(jié)巴中文分詞工具使用過(guò)程中遇到的問(wèn)題及解決方法
- Python jieba 中文分詞與詞頻統(tǒng)計(jì)的操作
- Python jieba庫(kù)分詞模式實(shí)例用法
- Python jieba結(jié)巴分詞原理及用法解析
- Python3爬蟲(chóng)中關(guān)于中文分詞的詳解
- Python中文分詞庫(kù)jieba,pkusegwg性能準(zhǔn)確度比較
- python中文分詞庫(kù)jieba使用方法詳解
- python同義詞替換的實(shí)現(xiàn)(jieba分詞)
- 簡(jiǎn)述python四種分詞工具,盤(pán)點(diǎn)哪個(gè)更好用?
相關(guān)文章
python安裝自己的代碼到site-packages問(wèn)題
這篇文章主要介紹了python安裝自己的代碼到site-packages問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
python 循環(huán)結(jié)構(gòu)練習(xí)題
這篇文章主要給大家分享的是python 循環(huán)結(jié)構(gòu)練習(xí)題,求兩個(gè)數(shù)最大公約數(shù)、整數(shù)反轉(zhuǎn):如12345,輸出54321等多個(gè)練習(xí)題,需要的朋友可以參考一下2021-11-11
Python密碼學(xué)概述雙倍強(qiáng)度加密教程
這篇文章主要為大家介紹了Python密碼學(xué)概述雙倍強(qiáng)度加密教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-05-05
selenium+python 對(duì)輸入框的輸入處理方法
今天小編就為大家分享一篇selenium+python 對(duì)輸入框的輸入處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
python 實(shí)現(xiàn)返回一個(gè)列表中出現(xiàn)次數(shù)最多的元素方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)返回一個(gè)列表中出現(xiàn)次數(shù)最多的元素方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
python中的List sort()與torch.sort()
這篇文章主要介紹了python中的List sort()與torch.sort()使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

