Python中文糾錯的簡單實現(xiàn)
介紹
這篇文章主要是用 Python 實現(xiàn)了簡單的中文分詞的同音字糾錯,目前的案例中只允許錯一個字,自己如果有興趣可以繼續(xù)優(yōu)化下去。具體步驟如下所示:
- 先準(zhǔn)備一個文件,里面每一行中放一個中文分詞,我這里的文件是下面代碼中的 /Users/wys/Desktop/token.txt ,你們可以改成自己,再運行代碼
- 將構(gòu)建一個前綴樹類,實現(xiàn)插入功能,將所有的標(biāo)準(zhǔn)分詞都插入到前綴樹中,另外實現(xiàn)一個搜索功能,用來搜索分詞
- 將輸入的錯誤分詞中的每個字都找出 10 個同音字,將每個字都用 10 個同音字替換,結(jié)果可以最多得到 n*10 個分詞,n 為分詞的長度,因為有的音可能沒有 10 個同音字。
- 將這些分詞都經(jīng)過前綴樹的查找,如果能搜到,將其作為正確糾正就過返回
代碼
import re,pinyin
from Pinyin2Hanzi import DefaultDagParams
from Pinyin2Hanzi import dag
class corrector():
def __init__(self):
self.re_compile = re.compile(r'[\u4e00-\u9fff]')
self.DAG = DefaultDagParams()
# 將文件中的詞讀取
def getData(self):
words = []
with open("/Users/wys/Desktop/token.txt") as f:
for line in f.readlines():
word = line.split(" ")[0]
if word and len(word) > 2:
res = self.re_compile.findall(word)
if len(res) == len(word): ## 保證都是漢字組成的分詞
words.append(word)
return words
# 將每個拼音轉(zhuǎn)換成同音的 10 個候選漢字,
def pinyin_2_hanzi(self, pinyinList):
result = []
words = dag(self.DAG, pinyinList, path_num=10)
for item in words:
res = item.path # 轉(zhuǎn)換結(jié)果
result.append(res[0])
return result
# 獲得詞經(jīng)過轉(zhuǎn)換的候選結(jié)結(jié)果
def getCandidates(self, phrase):
chars = {}
for c in phrase:
chars[c] = self.pinyin_2_hanzi(pinyin.get(c, format='strip', delimiter=',').split(','))
replaces = []
for c in phrase:
for x in chars[c]:
replaces.append(phrase.replace(c, x))
return set(replaces)
# 獲得糾錯之后的正確結(jié)果
def getCorrection(self, words):
result = []
for word in words:
for word in self.getCandidates(word):
if Tree.search(word):
result.append(word)
break
return result
class Node:
def __init__(self):
self.word = False
self.child = {}
class Trie(object):
def __init__(self):
self.root = Node()
def insert(self, words):
for word in words:
cur = self.root
for w in word:
if w not in cur.child:
cur.child[w] = Node()
cur = cur.child[w]
cur.word = True
def search(self, word):
cur = self.root
for w in word:
if w not in cur.child:
return False
cur = cur.child[w]
if cur.word == False:
return False
return True
if __name__ == '__main__':
# 初始化糾正器
c = corrector()
# 獲得單詞
words = c.getData()
# 初始化前綴樹
Tree = Trie()
# 將所有的單詞都插入到前綴樹中
Tree.insert(words)
# 測試
print(c.getCorrection(['專塘街道','轉(zhuǎn)塘姐道','轉(zhuǎn)塘街到']))
結(jié)果
打印結(jié)果為:
['轉(zhuǎn)塘街道', '轉(zhuǎn)塘街道', '轉(zhuǎn)塘街道']
可以看出都糾正成功了,有一定的效果 ,之后會繼續(xù)優(yōu)化。
到此這篇關(guān)于Python中文糾錯的簡單實現(xiàn)的文章就介紹到這了,更多相關(guān)Python中文糾錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python基于機(jī)器學(xué)習(xí)方法實現(xiàn)的電影推薦系統(tǒng)實例詳解
這篇文章主要介紹了Python基于機(jī)器學(xué)習(xí)方法實現(xiàn)的電影推薦系統(tǒng),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06
matplotlib調(diào)整子圖間距,調(diào)整整體空白的方法
今天小編就為大家分享一篇matplotlib調(diào)整子圖間距,調(diào)整整體空白的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Pytorch技法之繼承Subset類完成自定義數(shù)據(jù)拆分
這篇文章主要介紹了Pytorch技法之繼承Subset類完成自定義數(shù)據(jù)拆分,下文我們介紹一些下面是加載內(nèi)置訓(xùn)練數(shù)據(jù)集的常見操作,需要的小伙伴可以參考一下2022-02-02
解決pyecharts運行后產(chǎn)生的html文件用瀏覽器打開空白
這篇文章主要介紹了解決pyecharts運行后產(chǎn)生的html文件用瀏覽器打開空白,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Python?識別錄音并轉(zhuǎn)為文字的實現(xiàn)
本文主要介紹了Python?識別錄音并轉(zhuǎn)為文字的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Python深度學(xué)習(xí)實戰(zhàn)PyQt5布局管理項目示例詳解
本文具體介紹基本的水平布局、垂直布局、柵格布局、表格布局和進(jìn)階的嵌套布局和容器布局,最后通過案例帶小白創(chuàng)建一個有型的圖形布局窗口2021-10-10
Pandas之DataFrame對象的列和索引之間的轉(zhuǎn)化
這篇文章主要介紹了Pandas之DataFrame對象的列和索引之間的轉(zhuǎn)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06

