# -*- coding: utf-8 -*-
'''功能:遞迴實現前向匹配分詞
說明:zhuanma這個包借鑑自jieba分詞源**用於
將任意格式編碼的字串轉換為unicode編碼,統一
字典和待分詞語句的編碼後,便於句子切分和分詞.
author: date : 2016-04-16
'''import re
from zhuanma import strdecode
# 遞迴前向匹配分詞
def seg(chunk,maxlength,diclist,result):
# 句子塊長度
clength = len(chunk)
# 句子塊小於最大詞長
if clength <= maxlength:
# 判斷整個句子塊是否在詞典中
if chunk in diclist:
# 前向匹配分詞
else:
for i in range(1,clength):
if chunk[:-i] in diclist:
seg(chunk[-i:],maxlength,diclist,result)
# 句子塊長度大於最大詞長
elif clength > maxlength:
# 按照最大詞長擷取子串進行分詞
subchunk = chunk[:maxlength]
# 最大詞長擷取的子串在字典中
if subchunk in diclist:
seg(chunk[maxlength:],maxlength,diclist,result)
# 最大詞長擷取的子串不在字典中
else:
# 前向匹配分詞
for i in range(1,maxlength):
if subchunk[:-i] in diclist:
seg(subchunk[-i:]+chunk[maxlength:],maxlength,diclist,result)
return result
if __name__ == "__main__":
# 匯入分詞字典到列表
with open('dic.txt') as f:
diclist = strdecode(f.read()).strip().split('\n')
# 確定字典中最大詞長
maxlength = 0
for word in diclist:
if len(word) > maxlength:
maxlength = len(word)
# 待分詞語句
sentence = strdecode("中華人民共和國成立了,中華民族迎來了新的時代")
# 用標點將句子分塊
tokenlist = re.findall(u"[\u4e00-\u9fa5]+",sentence,re.u)
# 用於儲存分詞結果的列表
result =
# 使用前向匹配演算法分詞
for chunk in tokenlist:
result.extend(seg(chunk,maxlength,diclist,))
print '\n'.join(result)
'''>>> ******************************== restart ******************************==
>>>
中華人民共和國成立了
中華民族迎來了
新的
時代>>>
'''
python 最大匹配分詞
參考部落格參考部落格 given a dict li 北京大學 生前 來 應聘 大學生 前來 北京 dic print dic 視窗從前面開始滑動,每次取maxlength 匹配不上也是捨棄後面的 forward max matching given the longest word in dict...
逆向最大匹配分詞演算法C
逆向順序 程式設計師 序員 員 名程式 程式 序 一名程 名程 程 是一名 一名 名 我是一 是一 一 x我是 我是 是 xx我 x我 我 叫xx xx x 我叫x 叫x x 好我叫 我叫 叫 家好我 好我 我 大家 家 大class program else if flag else len st...
逆向最大匹配分詞演算法C
逆向順序 程式設計師 序員 員 名程式 程式 序 一名程 名程 程 是一名 一名 名 我是一 是一 一 x我是 我是 是 xx我 x我 我 叫xx xx x 我叫x 叫x x 好我叫 我叫 叫 家好我 好我 我 大家 家 大class program else if flag else len st...