精华内容
参与话题
问答
  • 文本纠错

    千次阅读 2018-08-22 16:58:46
    假设有这么一个场景,医生开处方的时候,可能写错药品和疾病名称,需要程序自动化纠错 例如:曲米新乳膏和二甲双瓜和双黄连  曲米新乳膏 ==> 曲咪新乳膏  二甲双瓜 ==> 二甲双胍     怎么...

    假设有这么一个场景,医生开处方的时候,可能写错药品和疾病名称,需要程序自动化纠错

    例如:曲米新乳膏和二甲双瓜和双黄连

        曲米新乳膏 ==> 曲咪新乳膏

        二甲双瓜 ==> 二甲双胍

     

     

    怎么做呢?

    直觉告诉我们,应该有一个数据源,包含所有的药品疾病名称。

    1、数据抓取  

        寻医问药 http://www.xywy.com/

        丁香园 http://www.dxy.cn/

        好大夫 http://www.haodf.com/yaopin/

     

    涉及知识:

        网络爬虫

        http协议

        html

        正则

        网络代理

        字符编码

        python

     

    开源的世界,感谢这个时代吧。

    scrapy框架  https://scrapy.org/  看看demo,开始工作吧!

     

    2、单词匹配

    药品数据爬取下来后,有药品疾病的词典了。

    那么怎么从一段文字中识别出哪些是药品名称呢?假设文本都是正确的,药品名称也是正确的。

     

    涉及知识:

        前缀树匹配 

        https://en.wikipedia.org/wiki/Trie

        http://baike.baidu.com/link?url=9tTTwNRyFnYW4EiTfVMrT0hkX7O8TKc0HCrStmTkWfCsV3HEtFK0BA0tWov4ny206MUIvPnzwPpdxqVFgZlo4_

     

        以python语言举例吧,PyTrie

        https://pypi.python.org/pypi/PyTrie  看看demo https://wiki.python.org/moin/CheeseShopTutorial 

        e.g. sentence = “我有双黄连和曲米新乳膏"

        遍历所有包含最后1个字的字串

            我有双黄连和曲米新乳膏

            有双黄连和曲米新乳膏

            双黄连和曲米新乳膏

            ……

        用爬取的药品名称字典生成SortedStringTrie,对每个子串用最长前缀匹配(method:longest_prefix),

        可以得到 双黄连、曲米新乳膏这两个药品名称

     

    3、纠错版本1.0

        好吧,做了好多前期准备工作,可以开始尝试纠错了。先看看错误的例子:

        e.g. sentence = “我有双黄联和曲米新乳膏"

        肉眼看过去  双黄联 ==> 双黄连  机器如何做呢?

        

        涉及知识:

            编辑距离(Levenshtein距离) http://baike.baidu.com/link?url=BlzWCygnY5DdHj453HLQOhVYWnFfQO96hbHgqPTpWPo4x3_n4J6n2g5MVfYPVP7fWzf2u4doEspxkgWJSeJWvkwbMFV1FElBoqlSbbCG06ZLVlZeqoYkX6ucEwkcwTfQ

     

        编辑距离就是求两个字符串的相似性

        天安门 和 天天门  distance=1

        天安门 和 天安      distance=1

        天安门 和 天安门  distance=0

        

        有了编辑距离,借助最长前缀匹配,设定距离阀值,例如4个字,允许1个字不一样,6个字允许两个字不一样。

        用前缀匹配,找到双黄连, 对应的词是双黄联, 好吧,编辑距离ok,替换吧

        双黄连 ==> 双黄连

        恭喜你,纠错成功,关上电脑,可以交差了。

        

        测试报bug了,怎么可能!!!

        e.g. 小儿柏步止咳

        纠错 小儿柏步止咳 ==> 小儿清热止咳

        小儿清热止咳和小儿百部止咳都是药品名称,按照规则,字典树找到第一个小儿清热止咳,符合编辑距离<=2。

        

        看来不能光按照字型去纠错,汉字的输入错误大部分来自同音字。

        找个汉字转拼音的工具

        pypinyin     https://pypi.python.org/pypi/pypinyin

        加上拼音的编辑距离吧,全拼和首字母的,嗯嗯 双重保险,例如必须首字母相同。

        小儿清热止咳 首字母  xeqrzk

        小儿百部止咳 首字母  xebbzk

        小儿柏步止咳  首字母  xebbzk

        纠错 小儿柏步止咳 ==>  小儿百部止咳

        

        测试还是有作用的,虽然报bug让我很不爽

        1.0版本勉强可以上线使用了,精度门槛设置会比较高,召回相对低。

        e.g. 青春都飞扬吧

        青春都 ==> 青春痘

    4、纠错版本2.0

        只看相似距离,是很难去判断纠正后的句子的合理性,因为替换规则只是针对单个单词,丢掉了句子的剩余单词信息。比如,句子1:青春都飞扬吧  句子2:青春逗很多。 句子1应该不去纠错,而句子2应该纠错。

        涉及知识:

        语言模型 https://en.wikipedia.org/wiki/Language_model  本质是用统计学意义判断句子构成的合理性

        中文分词 句子分词的多少 作为判断句子合理性的一个参考因子

        ngram  http://blog.csdn.net/baimafujinji/article/details/51281816 

        语料库 从很大的文本语录中切分出unigram bigram. 这个可以从爬取药品的网站上去爬取用户咨询的问题,这些问题里面包含的药品疾病比较多,适合用作医疗领域的ngram。

        

        ngram切分用nltk(很有名的nlp python库, method:ngrams) http://www.nltk.org/

        

        假设提取出来了unigram,bigram,那么可以试试语言模型了

     

        加入语言模型,去计算 替换后的句子 正确概率,找到替换后句子正确概率最大的

        

    5、优化方向

        精度和召回总是一对矛盾

        概率提升的阀值,可以控制纠错的精度,但是降低了召回

        如何调整阀值,是不断试错过程。

        

        概率是基于统计学意义的,所以badcase的出现不可避免。可以通过人工的数据介入,去干预单词替换

        相近字 加入,使得替换备选集合多一些,提升召回率

        

        想要同时提升精度和召回,就需要分析badcase,设定粒度更小的精度阀值,优化是个长时间的工作。

    6、总结

        英文纠错(good demo:http://norvig.com/spell-correct.html)很多是字母拼写错误,中文纠错更多的是相近字,拼音等带来的字词错误。

        纠错步骤:

        1、正确词词典

        2、从输入句子中 找到替换候选词集合

        3、语言模型判断句子合理性

        4、选出替换后最合理的句子

     

        精度阀值的控制 需要不断尝试,词典单词很多,且面对的是非专业领域词汇,则同样阀值前提下,纠错的精度应该会有所下降。针对特点领域的纠错是可行的,纠错的方法另一个副产品是找出相近意思的词,例如 头疼=>头痛

    展开全文
  • 文本纠错学习

    2019-09-19 16:55:41
    当前由于用户输入随意及手写输入法易出错等原因,错误串在输入文本中占比高达10%-15%,这也使得中文文本纠错模块必要性凸显。而在垂直领域中,比如平安的寿险领域,同样会因为用户输入随意、不清楚产品名称等原因,...

    主要针对:
    https://mp.weixin.qq.com/s/Pff9yYGch-noVq_cUcY5CA
    当前由于用户输入随意及手写输入法易出错等原因,错误串在输入文本中占比高达10%-15%,这也使得中文文本纠错模块必要性凸显。而在垂直领域中,比如平安的寿险领域,同样会因为用户输入随意、不清楚产品名称等原因,导致用户提问与回答存在大量的手写及同音错误。
    自然语言处理常见的任务包括词法分析、句法分析、用户意图识别等,而要取得理想的结果,输入数据的准确性是基本前提。一旦语言使用者对语言掌握不够或粗心大意,从而造成用词不当、张冠李戴等错误时,很容易引起“差之毫厘,谬以千里”的“蝴蝶效应”。因此,文本纠错对NLP技术整体的性能保证起着至关重要的作用。
    试着跑实验:
    https://github.com/beyondacm/Autochecker4Chinese
    https://cloud.tencent.com/developer/article/1435917,DCQC没有代码

    展开全文
  • 中文文本纠错

    2020-09-01 15:01:41
    最全面,精华 中文纠错 待看完 中文文本拼写检查错误纠正方案整理 关联pycorrector 小练习 #--------------简化 import pandas as pd # for data manipulation and analysis from openpyxl import

    小知识点

    "u4e00"代表什么意思 "u9fa5“代表什么意思?
    答:\u4e00-\u9fa5是用来判断是不是中文的一个条件,采用的是unicode编码

    在这里插入图片描述

    参考website

    2020/9/1

    最全面,精华 中文纠错 待看完 中文文本拼写检查错误纠正方案整理
    关联pycorrector


    小练习

    #--------------简化
    import pandas as pd  # for data manipulation and analysis
    from openpyxl import load_workbook
    
    # 读取xlsx文件
    data_path = "E:/Jobs/nlpproject/project1/tt/Raw_data_A.xlsx"
    wb = load_workbook(data_path)
    booksheet = wb.active
    
    rows = booksheet.rows
    columns = booksheet.columns
    # 迭代所有的行,并存为list;为后续进行处理
    res = []
    for row in rows:
        line = [col.value for col in row]
        res = res + line
    
    # 采用规则匹配方式(处理乱码等)
    import re
    from string import digits, punctuation
    
    # 剔除文本中的乱码(利用匹配规则,将文本中乱码用空格进行替换)
    # 作用:去掉中文文本中的表情符号,特殊字符等之类。
    # 备注:\u4e00-\u9fa5是用来判断是不是中文的一个条件,采用的是unicode编码
    rule = re.compile(r'[^a-zA-Z.,——+' + digits + punctuation + '\u4e00-\u9fa5]+')
    resnew = []  #分配新的list,存储匹配后的文本
    for i in range(0, len(res)):
        resnew.append(re.sub(rule, '', res[i]))
    
    df = pd.DataFrame(resnew)  #将list转为dataframe
    df.to_excel("./tt/newText.xlsx", index=False,header=None)
    
    

    参考资料:规则匹配


    英文参考资料专列:NLP中文短文本处理记录(一)

    展开全文
  • 1、文本纠错包安装: pip install https://github.com/kpu/kenlm/archive/master.zip pip install pycorrector 注意:必须先安装kenlm包,再安装pycorrector,否则安装失败 2、中文文本纠错任务,常见错误类型包括...

    1、文本纠错包安装:

    在这里插入图片描述

    pip install https://github.com/kpu/kenlm/archive/master.zip
    pip install pycorrector
    

    注意:必须先安装kenlm包,再安装pycorrector,否则安装失败

    2、中文文本纠错任务,常见错误类型包括:

    • 谐音字词,如 配副眼睛-配副眼镜
    • 混淆音字词,如 流浪织女-牛郎织女
    • 字词顺序颠倒,如 伍迪艾伦-艾伦伍迪
    • 字词补全,如 爱有天意-假如爱有天意
    • 形似字错误,如 高梁-高粱
    • 中文拼音全拼,如 xingfu-幸福
    • 中文拼音缩写,如 sz-深圳
    • 语法错误,如 想象难以-难以想象

    3、加载包使用

    # -*- coding: utf-8 -*-
    
    # 导入包
    import pycorrector
    
    corrected_sent, detail = pycorrector.correct('少先队员因该为老人让坐')
    print(corrected_sent, detail)
    

    默认会从路径 ~/.pycorrector/datasets/zh_giga.no_cna_cmn.prune01244.klm 加载kenlm语言模型文件,如果检测没有该文件,则程序会自动联网下载。当然也可以手动下载 。

    大模型下载地址(模型文件2.8G)

    如果电脑吃内存,不想用大模型,也可用小模型小试牛刀。小模型下载的地址如下:
    小模型下载地址(模型文件20M)

    下载好之后,放在代码同一层级的目录里面即可。
    下面我们加载小模型,使用它进行纠错尝试。

    # -*- coding: utf-8 -*-
    # 导入包
    import os
    from pycorrector import Corrector
    
    lm_path = os.path.join('D:/people_chars_lm.klm')
    model = Corrector(language_model_path=lm_path)
    
    corrected_sent, detail = model.correct('少先队员因该为老人让坐')
    print(corrected_sent, detail)
    

    注意:路径不要有中文哦。否则报错哦
    输出结果:

    少先队员应该为老人让坐 [['因该', '应该', 4, 6]]
    
    Process finished with exit code 0
    
    展开全文
  • https://blog.csdn.net/kobeyu652453/article/details/106905191 博客:中文文本纠错 算例实现(有算例完整代码) 的数据集。
  • 中文文本纠错算法走到多远了?

    万次阅读 2019-02-01 11:30:41
    中文文本纠错任务,常见错误类型包括: 谐音字词,如 配副眼睛-配副眼镜 混淆音字词,如 流浪织女-牛郎织女 字词顺序颠倒,如 伍迪艾伦-艾伦伍迪 字词补全,如 爱有天意-假如爱有天意 形似字错误,如 高梁-高粱 ...
  • 中文的文本纠错,应用场景很多,诸如输入法纠错、输入预测、ASR 后纠错等等。这边简单梳理下对于这个任务的调研结果。
  • 一般有两种文本纠错的类型: 1.Non-word拼写错误 首先看一下Non-word的拼写错误,这种错误表示此词汇本身在字典中不存在,比如把“要求”误写为“药求”,把“correction”误拼写为“corrction”。寻找这种错误很...
  • n-gram文本纠错

    千次阅读 2018-12-17 14:18:17
    项目组从公司处获得语音识别后的客服对话文本,我们对文本进行纠错、情感分析与挖掘等并最终给公司反馈,让公司能够从客服对话文本中获得有效信息。我在项目中参与的部分是文本处理的第一步:文本检错纠错。这几个月...
  • 文本纠错,BK树

    2018-08-22 17:43:29
    从编辑距离、BK树到文本纠错 搜索引擎里有一个很重要的话题,就是文本纠错,主要有两种做法,一是从词典纠错,一是分析用户搜索日志,今天我们探讨使用基于词典的方式纠错,核心思想就是基于编辑距离,使用BK树。...
  • 向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx文本纠错又称为拼写错误或者拼写检查,由于纯文本往往来源于手打或者OCR识别,很可能存...
  • 文本纠错项目一些问题

    千次阅读 2015-04-30 16:09:17
    线程启动问题 thread thread_run头文件 namespace THREAD { class CThread_RUN { public: virtual void run()=0; virtual void set_cache(hash_record* m_cache)=0; virt
  • 融合文本纠错的微博情感分析模型设计与实现,姚云腾,双锴,微博作为国内目前最大的自媒体平台之一,已经成为公众进行信息获取和观点表达的主要网络阵地。微博上包含大量对社会现象、时政新
  • 语音识别结果文本纠错综述

    千次阅读 2018-10-18 10:08:32
    语音识别结果的纠错是语音理解过程中的一项重要工作。由于受限于语音识别的准确性,语音识别的结果常常会出现错误,这将对语音理解的后续工作造成障碍,增加了语音理解的难度。语音识别结果的纠错可以对一些识别的...
  • 在语言处理应用技术方面,百度大脑新增文本纠错、新闻摘要、智能写诗、智能春联和对话情绪识别等能力。今天带大家体验一下文本纠错。 首先认证授权: 在开始调用任何API之前需要先进行认证授权,具体的说明请参考...
  • 调用攻略(Python3) 首先认证授权: 在开始调用任何API之前需要先进行认证授权,具体的说明请参考: http://ai.baidu.com/docs#/Auth/top 获取Access Token 向授权服务地址...必须...
  • 毕设做的是文本纠错方面,然后今天进组见研究生导师 。老师对我做的东西蛮感兴趣。然后介绍自己现在做的一些项目,其中有个模块需要有用到文本纠错功能。 要求1:有多人同时在线编辑文档,然后文档功能有类似Word中...
  • 上一节我们留下了,一个小问题,就是如何对给定的英文文本语料,来进行拼写纠错。 首先,我们给定一个语料文本“beyes_train_text.txt”,然后统计语料中各单词的出现情况。 import re,collections # 提取语料库...
  • 文本纠错 N-gram 修改提示

    千次阅读 2018-10-17 15:55:34
    项目组从公司处获得语音识别后的客服对话文本,我们对文本进行纠错、情感分析与挖掘等并最终给公司反馈,让公司能够从客服对话文本中获得有效信息。我在项目中参与的部分是文本处理的第一步:文本检错纠错。这几个月...
  • 文本纠错又称为拼写错误或者拼写检查,由于纯文本往往来源于手打或者OCR识别,很可能存在一些错误,因此此技术也是一大关键的文本预处理过程,一般存在两大纠错类型。 Non-word拼写错误 第一种是Non-word拼写错误,...
  • 深度模型使用说明 Install 全自动安装:pip install pycorrector 半自动安装: ...cd pycorrector python setup.py install 通过以上两种方法的任何一种完成安装都可以。如果不想安装,可以下载github源码包,安装...
  • BK树或者称为Burkhard-Keller树,是一种基于树的数据结构,被设计于快速查找近似字符串匹配,比方说拼写纠错,或模糊查找,当搜索”aeek”时能返回”seek”和”peek”。 本文首先剖析了基本原理,并在后面给出了...

空空如也

1 2 3 4 5 ... 19
收藏数 374
精华内容 149
关键字:

文本纠错