遞迴實現前向匹配分詞

2021-07-11 05:56:44 字數 1837 閱讀 3123

# -*- 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...