1. 程式人生 > 程式設計 >用python實現前向分詞最大匹配演算法的示例程式碼

用python實現前向分詞最大匹配演算法的示例程式碼

理論介紹

分詞是自然語言處理的一個基本工作,中文分詞和英文不同,字詞之間沒有空格。中文分詞是文字挖掘的基礎,對於輸入的一段中文,成功的進行中文分詞,可以達到電腦自動識別語句含義的效果。中文分詞技術屬於自然語言處理技術範疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞演算法。

可以將中文分詞方法簡單歸納為:

1.基於詞表的分詞方法
2.基於統計的分詞方法
3.基於序列標記的分詞方法

其中,基於詞表的分詞方法最為簡單,根據起始匹配位置不同可以分為:

1.前向最大匹配演算法
2.後向最大匹配演算法
3.雙向最大匹配演算法

三種方法思想都很簡單,今天就用python實現前向最大匹配演算法。

word分詞是一個Java實現的分散式的中文分片語件,提供了多種基於詞典的分詞演算法,並利用ngram模型來消除歧義。能準確識別英文、數字,以及日期、時間等數量詞,能識別人名、地名、組織機構名等未登入詞。能通過自定義配置檔案來改變元件行為,能自定義使用者詞庫、自動檢測詞庫變化、支援大規模分散式環境,能靈活指定多種分詞演算法,能使用refine功能靈活控制分詞結果,還能使用詞性標註、同義標註、反義標註、拼音標註等功能。同時還無縫和Lucene、Solr、ElasticSearch、Luke整合。

前向最大匹配演算法

前向最大匹配演算法,顧名思義,就是從待分詞句子的左邊向右邊搜尋,尋找詞的最大匹配。我們需要規定一個詞的最大長度,每次掃描的時候尋找當前開始的這個長度的詞來和字典中的詞匹配,如果沒有找到,就縮短長度繼續尋找,直到找到字典中的詞或者成為單字。

具體程式碼實現

獲取分詞函式: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)

主函式: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 = [] # 儲存分詞結果
  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圖來驗證這種加密演算法的加密效果。'''

分詞結果

用python實現前向分詞最大匹配演算法的示例程式碼

到此這篇關於用python實現前向分詞最大匹配演算法的示例程式碼的文章就介紹到這了,更多相關python 前向分詞最大匹配演算法內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!