iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python容错的前缀树实现中文纠错
  • 610
分享到

怎么用Python容错的前缀树实现中文纠错

2023-06-20 14:06:14 610人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“怎么用python容错的前缀树实现中文纠错”,在日常操作中,相信很多人在怎么用Python容错的前缀树实现中文纠错问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python容错的前缀树

这篇文章主要介绍“怎么用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容错的前缀树实现中文纠错”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么用Python容错的前缀树实现中文纠错

本文链接: https://www.lsjlt.com/news/297467.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Python容错的前缀树实现中文纠错
    这篇文章主要介绍“怎么用Python容错的前缀树实现中文纠错”,在日常操作中,相信很多人在怎么用Python容错的前缀树实现中文纠错问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python容错的前缀树...
    99+
    2023-06-20
  • Python中文纠错的简单实现
    介绍 这篇文章主要是用 Python 实现了简单的中文分词的同音字纠错,目前的案例中只允许错一个字,自己如果有兴趣可以继续优化下去。具体步骤如下所示: 先准备一个文件,里...
    99+
    2024-04-02
  • lxml怎么实现XML文档的命名空间前缀映射
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • 怎么用Python递归式实现二叉树前序,中序,后序遍历
    今天小编给大家分享一下怎么用Python递归式实现二叉树前序,中序,后序遍历的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。记...
    99+
    2023-06-29
  • 前端项目中的Vue、React错误监听怎么实现
    本篇内容介绍了“前端项目中的Vue、React错误监听怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、 Vue 错误监听题目:如何...
    99+
    2023-06-30
  • 怎么用Python实现神奇的树效果
    本篇内容主要讲解“怎么用Python实现神奇的树效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现神奇的树效果”吧!turtle是一只神奇的小海龟,可以画出大千世界。而tu...
    99+
    2023-06-16
  • C++二叉树的前序中序后序非递归怎么实现
    这篇“C++二叉树的前序中序后序非递归怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++二叉树的前序中序后序非递归...
    99+
    2023-07-05
  • 刷题系列 - Python中怎么通过非递归实现二叉树前序遍历
    这期内容当中小编将会给大家带来有关刷题系列 - Python中怎么通过非递归实现二叉树前序遍历,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。二叉树前序遍历(Binary Tree Preorder Tra...
    99+
    2023-06-02
  • HTML中怎么用JS实现旋转的圣诞树
    这篇文章将为大家详细讲解有关HTML中怎么用JS实现旋转的圣诞树,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。<!DOCTYPE HEML PUBLIC><html&...
    99+
    2023-06-22
  • 怎么用python实现输入错误密码用户锁定
    这篇文章主要讲解了“怎么用python实现输入错误密码用户锁定”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用python实现输入错误密码用户锁定”吧!新建一个文件,用以存放白名单用户(...
    99+
    2023-06-01
  • 怎么在python中利用后缀表达式实现一个计算器功能
    本文章向大家介绍怎么在python中利用后缀表达式实现一个计算器功能的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。前缀表达式运算符在数字的前面1 + (2 + 3) * 4 - 5 (中缀)- + 1 * + ...
    99+
    2023-06-06
  • 怎么用批处理实现文本内容居中显示
    这篇文章主要介绍了怎么用批处理实现文本内容居中显示,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。a.txt   代码: [Promise don't come eas...
    99+
    2023-06-08
  • python中SQLAlchemy怎么使用前端页面实现插入数据
    这篇文章主要介绍“python中SQLAlchemy怎么使用前端页面实现插入数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中SQLAlchemy怎么使用前端页面实现插入数据”文章能帮...
    99+
    2023-06-29
  • python监控日志中的报错并进行邮件报警怎么实现
    今天小编给大家分享一下python监控日志中的报错并进行邮件报警怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。实现思...
    99+
    2023-07-02
  • 怎么用Bootstrap前端视图实现页面内容模块化的隔离
    这篇文章主要介绍“怎么用Bootstrap前端视图实现页面内容模块化的隔离”,在日常操作中,相信很多人在怎么用Bootstrap前端视图实现页面内容模块化的隔离问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2024-04-02
  • 怎么避免erp实现中的几大常见错误
    怎么避免erp实现中的几大常见错误,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、不仔细收集需求 咨询公司云技术合作伙伴(Cloud Technology Part...
    99+
    2023-06-03
  • 怎么用vbs实现随机读取文件的一行内容
    这篇文章主要介绍怎么用vbs实现随机读取文件的一行内容,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:randomize  set fso=createobject("...
    99+
    2023-06-08
  • 怎么使用python+Word2Vec实现中文聊天机器人
    本篇内容主要讲解“怎么使用python+Word2Vec实现中文聊天机器人”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用python+Word2Vec实现中文聊天机器人”吧! ...
    99+
    2023-07-05
  • go语言中的缓存容器和并发处理:如何通过容器实现高可用性和容错性?
    Go语言是一门以高效和并发处理著称的语言,它为开发人员提供了一系列的工具和特性,以提高应用程序的性能和稳定性。在本文中,我们将重点介绍Go语言中的缓存容器和并发处理,探讨如何通过容器实现高可用性和容错性。 一、缓存容器 Go语言提供了多种类...
    99+
    2023-11-07
    缓存 并发 容器
  • Python怎么调用ChatGPT的API实现文章生成
    这篇“Python怎么调用ChatGPT的API实现文章生成”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么调...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作