這篇文章將為大家詳細(xì)講解有關(guān)用python實(shí)現(xiàn)前向分詞大匹配算法的案例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
術(shù)業(yè)有專攻,您咨詢的再多,也不如我了解的一半多;有責(zé)任心的專業(yè)網(wǎng)站設(shè)計(jì)公司會(huì)做到“客戶想到的我們要做到,客戶沒(méi)有想到的我們也要幫客戶做到“。我們的設(shè)計(jì)師是5年以上的設(shè)計(jì)師,我們不僅僅會(huì)設(shè)計(jì)網(wǎng)站,更會(huì)策劃網(wǎng)站。理論介紹
分詞是自然語(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)