python 最大匹配分詞

2021-09-29 07:39:32 字數 1685 閱讀 3406

參考部落格參考部落格

# given a dict

li =

["北京大學"

,"生前"

,"來"

,"應聘"

,"大學生"

,"前來"

,"北京"

]dic =

print

(dic)

視窗從前面開始滑動,每次取maxlength

匹配不上也是捨棄後面的

# forward max matching

# given the longest word in dict , the length is 4

# string: test string

max_length =

5string =

"北京大學生前來應聘"

# store the answers

ans =

while

len(string)

>0:

right =

max(

len(string)

, max_length)

sub_string = string[

:right]

while

len(sub_string)

>0:

if sub_string in dic:

string = string[

len(sub_string):]

break

else

: sub_string = sub_string[

:len

(sub_string)-1

]print

(ans)

[『北京大學』, 『生前』, 『來』, 『應聘』]

視窗從最後面開始滑動,匹配不上是捨棄前面的

# backward max matching

res =

max_length =

5string =

"北京大學生前來應聘"

while

len(string)

>0:

l =len(string)

iflen

(string)

< max_length:

sub_string = string

else

: sub_string = string[

len(string)

- max_length:

]while

len(sub_string)

>0:

if sub_string in dic:

string = string[

:l -

len(sub_string)

]break

else

: sub_string = sub_string[1:

]print

(res[::

-1])

[『北京』, 『大學生』, 『前來』, 『應聘』]

演算法流程:

比較正向最大匹配和逆向最大匹配結果 如果分詞數量結果不同,那麼取分詞數量較少的那個 如果分詞數量結果相同 分詞結果相同,可以返回任何乙個 分詞結果不同,返回單字數比較少的那個

逆向最大匹配分詞演算法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...

遞迴實現前向匹配分詞

coding utf 8 功能 遞迴實現前向匹配分詞 說明 zhuanma這個包借鑑自jieba分詞源 用於 將任意格式編碼的字串轉換為unicode編碼,統一 字典和待分詞語句的編碼後,便於句子切分和分詞.author date 2016 04 16 import re from zhuanma ...