欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中文糾錯的簡單實現(xiàn)

 更新時間:2021年07月06日 10:33:11   作者:王大呀呀  
這篇文章主要是用 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)文章

  • pandas中apply和transform方法的性能比較及區(qū)別介紹

    pandas中apply和transform方法的性能比較及區(qū)別介紹

    這篇文章主要介紹了pandas中apply和transform方法的性能比較,在文中給大家講解了apply() 與transform()的相同點與不同點,需要的朋友可以參考下
    2018-10-10
  • 關(guān)于python的對象序列化介紹

    關(guān)于python的對象序列化介紹

    大家好,本篇文章主要講的是關(guān)于python的對象序列化介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Python?中的json常見用法實例詳解

    Python?中的json常見用法實例詳解

    這篇文章主要介紹了Python?中的json常見用法,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • python路徑的寫法及目錄的獲取方式

    python路徑的寫法及目錄的獲取方式

    今天小編就為大家分享一篇python路徑的寫法及目錄的獲取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python幾種繪制時間線圖的方法

    Python幾種繪制時間線圖的方法

    這篇文章主要介紹了Python幾種繪制時間線圖的方法,Matplotlib 作為 Python 家族最為重要的可視化工具,其基本的 API 以及繪制流程還是需要掌握的
    2022-08-08
  • python Tornado異步使用場景源碼解析

    python Tornado異步使用場景源碼解析

    這篇文章主要為大家介紹了python Tornado異步使用場景源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 恢復(fù)百度云盤本地誤刪的文件腳本(簡單方法)

    恢復(fù)百度云盤本地誤刪的文件腳本(簡單方法)

    下面小編就為大家?guī)硪黄謴?fù)百度云盤本地誤刪的文件腳本(簡單方法)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Python語法分析之字符串格式化

    Python語法分析之字符串格式化

    這篇文章主要給大家介紹了關(guān)于Python語法分析之字符串格式化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • pyqt5 刪除layout中的所有widget方法

    pyqt5 刪除layout中的所有widget方法

    今天小編就為大家分享一篇pyqt5 刪除layout中的所有widget方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 樹莓派與PC端在局域網(wǎng)內(nèi)運用python實現(xiàn)即時通訊

    樹莓派與PC端在局域網(wǎng)內(nèi)運用python實現(xiàn)即時通訊

    這篇文章主要為大家詳細(xì)介紹了樹莓派與PC端在局域網(wǎng)內(nèi)運用python實現(xiàn)即時通訊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評論