1. 程式人生 > >中文分詞的python實現-基於FMM演算法

中文分詞的python實現-基於FMM演算法

正向最大匹配演算法(FMM)

正向最大匹配演算法(FMM)是一種基於詞典的分詞方法,思想很簡單就是從左向右掃描尋找詞的最大匹配,比如詞典中同時含有“釣魚”和“釣魚島”,那“釣魚島屬於中國”就會被分詞成“釣魚島/屬於/中國”

過程

  • 限定詞的最大長度(例如5)
  • 從最大的長度開始在詞庫中進行匹配,直到匹配成功
  • 更新起點的位置繼續上一步驟直到全部完成

實驗

程式碼

# -*- coding: utf-8 -*-
# 中文正向最大匹配(FMM)分詞

import sys
reload(sys)     #動態重新載入sys模組
sys.setdefaultencoding('utf8'
) word_dict = ['新華網', '東京', '記者', '吳谷豐', '日本共同社', '28', '報道'] test_str = ' 新華網東京電記者吳谷豐據日本共同社28日報道' # 獲取分詞 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) def main(): global test_str test_str = test_str.decode('utf8').strip() max_len = 5 # 正向最大匹配分詞測試,最大長度5 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 = result_str + seg_str + ' / ' test_str = test_str[seg_len:] print 'output :', result_str if __name__ == '__main__': main()

結果

input : 新華網東京電記者吳谷豐據日本共同社28日報道
output : 新華網 / 東京 / 電 / 記者 / 吳谷豐 / 據 / 日本共同社 / 28 / 日 / 報道 /

分詞詞典可以自定義或者從此網頁下載,然後將word_dict程式碼更換成下面這行

word_dict = [line.strip() for line in open('dict.txt')]