gpt4 book ai didi

Python中文纠错的简单实现

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 35 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python中文纠错的简单实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

介绍

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

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

代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
 
     # 将每个拼音转换成同音的 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 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([ '专塘街道' , '转塘姐道' , '转塘街到' ]))

结果 。

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

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

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

原文链接:https://juejin.cn/post/6980891267446079495 。

最后此篇关于Python中文纠错的简单实现的文章就讲到这里了,如果你想了解更多关于Python中文纠错的简单实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com