Python容错的前缀树怎么实现中文纠错
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了Python容错的前缀树怎么实现中文纠错的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python容错的前缀树怎么实现中文纠错文章都会有所收获,下面我们
千家信息网最后更新 2026年11月01日Python容错的前缀树怎么实现中文纠错介绍
实现
这篇文章主要介绍了Python容错的前缀树怎么实现中文纠错的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python容错的前缀树怎么实现中文纠错文章都会有所收获,下面我们一起来看看吧。
介绍
本文使用 Python 实现了前缀树,并且支持编辑距离容错的查询。文中的前缀树只存储了三个分词,格式为 (分词字符串,频率) ,如:("中海晋西园", 2)、("中海西园", 24)、("中南海", 4),可以换成自己的文件进行数据的替换。在查询的时候要指定一个字符串和最大的容错编辑距离。
实现
class Word: def __init__(self, word, freq): self.word = word self.freq = freqclass Trie: def __init__(self): self.root = LetterNode("") self.START = 3 def insert(self, word, freq): self.root.insert(word, freq, 0) def findAll(self, query, maxDistance): suggestions = self.root.recommend(query, maxDistance, self.START) return sorted(set(suggestions), key=lambda x: x.freq)class LetterNode: def __init__(self, char): self.REMOVE = -1 self.ADD = 1 self.SAME = 0 self.CHANGE = 2 self.START = 3 self.pointers = [] self.char = char self.word = None def charIs(self, c): return self.char == c def insert(self, word, freq, depth): if " " in word: word = [i for i in word.split(" ")] if depth < len(word): c = word[depth].lower() for next in self.pointers: if next.charIs(c): return next.insert(word, freq, depth + 1) nextNode = LetterNode(c) self.pointers.append(nextNode) return nextNode.insert(word, freq, depth + 1) else: self.word = Word(word, freq) def recommend(self, query, movesLeft, lastAction): suggestions = [] length = len(query) if length >= 0 and movesLeft - length >= 0 and self.word: suggestions.append(self.word) if movesLeft == 0 and length > 0: for next in self.pointers: if next.charIs(query[0]): suggestions += next.recommend(query[1:], movesLeft, self.SAME) break elif movesLeft > 0: for next in self.pointers: if length > 0: if next.charIs(query[0]): suggestions += next.recommend(query[1:], movesLeft, self.SAME) else: suggestions += next.recommend(query[1:], movesLeft - 1, self.CHANGE) if lastAction != self.CHANGE and lastAction != self.REMOVE: suggestions += next.recommend(query, movesLeft - 1, self.ADD) if lastAction != self.ADD and lastAction != self.CHANGE: if length > 1 and next.charIs(query[1]): suggestions += next.recommend(query[2:], movesLeft - 1, self.REMOVE) elif length > 2 and next.charIs(query[2]) and movesLeft == 2: suggestions += next.recommend(query[3:], movesLeft - 2, self.REMOVE) else: if lastAction != self.CHANGE and lastAction != self.REMOVE: suggestions += next.recommend(query, movesLeft - 1, self.ADD) return suggestionsdef buildTrieFromFile(): trie = Trie() rows = [("中海晋西园", 2),("中海西园", 24),("中南海", 4)] for row in rows: trie.insert(row[0], int(row[1])) return triedef suggestor(trie, s, maxDistance): if " " in s: s = [x for x in s.split(" ")] suggestions = trie.findAll(s, maxDistance) return [str(x.word) for x in suggestions]if __name__ == "__main__": trie = buildTrieFromFile() r = suggestor(trie, "中海晋西园", 1) print(r)分析
结果打印:
["中海晋西园", "中海西园"]
可以看出"中海晋西园"是和输入完全相同的字符串,编辑距离为 0 ,所以符合最大编辑距离为 1 的要求,直接返回。
"中海西园"是"中海晋西园"去掉"晋"字之后的结果,编辑距离为 1, 所以符合最大编辑距离为 1 的要求,直接返回。
另外,"中南海"和"中海晋西园"的编辑距离为 4 ,不符合最大编辑距离为 1 的要求,所以结果中没有出现。
关于"Python容错的前缀树怎么实现中文纠错"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Python容错的前缀树怎么实现中文纠错"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
中海
西园
前缀
容错
中文
最大
字符
字符串
知识
结果
中南
中南海
内容
篇文章
查询
相同
三个
价值
操作简单
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡豆
互联网科技与金融科技
金融科技与互联网金融
互联网科技小贷
苏州互联网科技贷款公司
善班互联网科技有限公司
米客互联网科技
互联网科技咨询
互联网科技有限公司 翻译
美国互联网前沿科技
联恩商钥互联网科技有限公司
滨湖区互联网智能科技产品供应
互联网科技寓意
北京华百购互联网科技有限公司
互联网和黑科技的看法
乌苏新华互联网科技做什么的
华夏恒生互联网科技013171
高科技互联网发展前景如何
上海同邻互联网科技有限公司规模
华人运通互联网科技公司
互联网科技
互联网科技公司经营范围
没上市的科技互联网公司
团飞科技与伯堂互联网服务平台
武汉健翔互联网络科技有限公司
搜狐科技互联网
伊宁互联网科技做什么的
陕西云淼互联网科技公司
银川新华互联网科技学校原画
米泉互联网科技专业怎么样