主頁 > 知識庫 > Python中文糾錯的簡單實現(xiàn)

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

熱門標(biāo)簽:預(yù)覽式外呼系統(tǒng) 銀川電話機器人電話 電銷機器人錄音要學(xué)習(xí)什么 外賣地址有什么地圖標(biāo)注 企業(yè)彩鈴地圖標(biāo)注 上海正規(guī)的外呼系統(tǒng)最新報價 如何地圖標(biāo)注公司 煙臺電話外呼營銷系統(tǒng) 長春極信防封電銷卡批發(fā)

介紹

這篇文章主要是用 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)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python容錯的前綴樹實現(xiàn)中文糾錯

標(biāo)簽:盤錦 珠海 西寧 湖北 上饒 宜昌 潮州 佳木斯

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python中文糾錯的簡單實現(xiàn)》,本文關(guān)鍵詞  Python,中文,糾,錯的,簡單,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python中文糾錯的簡單實現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python中文糾錯的簡單實現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章