中文分词算法python_Python FMM算法的中文分词器实现方法源码
這是一篇基于Python代碼使用FMM算法達到中文分詞效果實現方法的文章。中文語句分詞因為編碼的關系在Python語言中并不是很好處理,關于中文亂碼與編碼的問題解決方法,可以參考玩蛇網的Python中文亂碼與編碼的問題 超高清視頻教程。
本文的Python代碼中用到了FMM算法,想要知道FMM算法是什么?大家可以自行百度一下,這里就是最簡單思想是:使用貪心算法向前找n個,如果這n個組成的詞在詞典中出現,就通過;如果沒有出現,那么找n-1個,一樣一直繼續下去;假如n個詞在詞典中出現,這時就要從n+1位置繼續找下去,一直到句子的結束為止。
Python FMM算法的中文分詞器實現方法源碼如下:
import re
#導入re模塊(Regular Expression正則表達式)
def PreProcess(sentence,edcode="utf-8"):
sentence = sentence.decode(edcode)
sentence=re.sub(u"[。,,!……!《》<>\"'::?\?、\|“”‘’;]"," ",sentence)
return sentence
def FMM(sentence,diction,result = [],maxwordLength = 4,edcode="utf-8"):
i = 0
sentence = PreProcess(sentence,edcode)
length = len(sentence)
while i < length:
# find the ascii word
tempi=i
tok=sentence[i:i+1]
while re.search("[0-9A-Za-z\-\+#@_\.]{1}",tok)<>None:
i= i+1
tok=sentence[i:i+1]
if i-tempi>0:
result.append(sentence[tempi:i].lower().encode(edcode))
# find chinese word
left = len(sentence[i:])
if left == 1:
"""go to 4 step over the FMM"""
"""should we add the last one? Yes, if not blank"""
if sentence[i:] <> " ":
result.append(sentence[i:].encode(edcode))
return result
m = min(left,maxwordLength)
#www.iplaypy.com
for j in xrange(m,0,-1):
leftword = sentence[i:j+i].encode(edcode)
# print leftword.decode(edcode)
if LookUp(leftword,diction):
# find the left word in dictionary
# it's the right one
i = j+i
result.append(leftword)
break
elif j == 1:
"""only one word, add into result, if not blank"""
if leftword.decode(edcode) <> " ":
result.append(leftword)
i = i+1
else:
continue
return result
def LookUp(word,dictionary):
if dictionary.has_key(word):
return True
return False
def ConvertGBKtoUTF(sentence):
return sentence.decode('gbk').encode('utf-8')
dictions = {}
dictions["ab"] = 1
dictions["cd"] = 2
dictions["abc"] = 1
dictions["ss"] = 1
dictions[ConvertGBKtoUTF("好的")] = 1
dictions[ConvertGBKtoUTF("真的")] = 1
sentence = "asdfa好的是這樣嗎vasdiw呀真的daf dasfiw asid是嗎?"
s = FMM(ConvertGBKtoUTF(sentence),dictions)
for i in s:
print i.decode("utf-8")
test = open("test.txt","r")
for line in test:
s = FMM(CovertGBKtoUTF(line),dictions)
for i in s:
print i.decode("utf-8")
Python中文分詞的代碼中多次出現了"utf-8"、'gbk'、decode、encode這類編python碼轉換的函數方法。對于大多數字初學python的朋友們來說,這是一個難點,并不容易理解。但一但理解透徹了又會感覺十分的簡單。
這個基于Python FMM算法的中文分詞器實現方法源碼就這樣了,能達要需要的效果實現,當然也可以再做更好的更改。希望和大家有更多的交流,有問題也可以在下面的評論區中一起學習交流。
玩蛇網文章,轉載請注明出處和文章網址:https://www.iplaypy.com/code/c2717.html
相關文章 Recommend
總結
以上是生活随笔為你收集整理的中文分词算法python_Python FMM算法的中文分词器实现方法源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 出参传递数组指针_C语言指针重难点详解
- 下一篇: python json模块rodas方法