您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch |

自学教程:Python中文纠错的简单实现

51自学网 2021-10-30 22:26:04
  python
这篇教程Python中文纠错的简单实现写得很实用,希望能帮到您。

介绍

这篇文章主要是用 Python 实现了简单的中文分词的同音字纠错,目前的案例中只允许错一个字,自己如果有兴趣可以继续优化下去。具体步骤如下所示:

  • 先准备一个文件,里面每一行中放一个中文分词,我这里的文件是下面代码中的 /Users/wys/Desktop/token.txt ,你们可以改成自己,再运行代码
  • 将构建一个前缀树类,实现插入功能,将所有的标准分词都插入到前缀树中,另外实现一个搜索功能,用来搜索分词
  • 将输入的错误分词中的每个字都找出 10 个同音字,将每个字都用 10 个同音字替换,结果可以最多得到 n*10 个分词,n 为分词的长度,因为有的音可能没有 10 个同音字。
  • 将这些分词都经过前缀树的查找,如果能搜到,将其作为正确纠正就过返回

代码

import re,pinyinfrom Pinyin2Hanzi import DefaultDagParamsfrom Pinyin2Hanzi import dagclass 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    # 将每个拼音转换成同音的 10 个候选汉字,    def pinyin_2_hanzi(self, pinyinList):        result = []        words = dag(self.DAG, pinyinList, path_num=10)        for item in words:            res = item.path  # 转换结果            result.append(res[0])        return result    # 获得词经过转换的候选结结果    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)    # 获得纠错之后的正确结果    def getCorrection(self, words):        result = []        for word in words:            for word in self.getCandidates(word):                if Tree.search(word):                    result.append(word)                    break        return resultclass 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 Trueif __name__ == '__main__':    # 初始化纠正器    c = corrector()    # 获得单词    words = c.getData()    # 初始化前缀树    Tree = Trie()    # 将所有的单词都插入到前缀树中    Tree.insert(words)    # 测试    print(c.getCorrection(['专塘街道','转塘姐道','转塘街到']))

结果

打印结果为:
['转塘街道', '转塘街道', '转塘街道']

可以看出都纠正成功了,有一定的效果 ,之后会继续优化。

到此这篇关于Python中文纠错的简单实现的文章就介绍到这了,更多相关Python中文纠错内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


python实现多人聊天服务器以及客户端
如何利用opencv判断两张图片是否相同详解
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1