【问题标题】:Statistical Spell Checking: General Approach and Avoid Feedback Loops统计拼写检查:一般方法和避免反馈循环
【发布时间】:2016-06-20 19:45:19
【问题描述】:

我正在构建的数据库有大量名称,这些名称经常重复。但是,许多名称都有拼写错误,我想尝试自动更正拼写错误。我事先不知道正确的姓名列表。

我目前的方法是在语料库中保留最热门的N 名称及其频率列表。然后,当将新名称输入数据库时​​,我找到最大化term_freq(name) / edit_distance(new_name, name) 的名称。也就是说,我在顶部N 名称中找到了一个现有名称,该名称具有最高频率除以候选名称和候选名称之间的编辑距离。

这是检查名称的合理方法吗?我是不是搞错了?

我担心如果系统检测到一组文档拼错了一个名称,它们会使其进入顶部的N 名称,然后导致所有其他名称也发生变化。

【问题讨论】:

    标签: algorithm nlp spell-checking


    【解决方案1】:

    所以,首先...我有义务说,我怀疑你会在这方面制造更多的麻烦,而不是你节省的时间,而且你可能会更高兴只是要求每个人都正确拼写事物(并接受这些事情如果他们不这样做,将会以一种很好的、​​可预测的方式打破)。话虽如此,如果您要这样做,我会参考贝叶定律:

    P(H|E) = P(H) * P(E|H) / P(E)

    (读作:“给定特定证据的假设概率等于假设的概率乘以给定假设的证据概率,再除以证据的概率。”)

    在这种情况下,您将考虑一个名字是另一个名字拼写错误的可能性,考虑到拼写错误的频率和一些先入为主的预期:

    • P(H) 是(一些特定的拼写错误 | 姓名长度)的概率
    • P(E) 是看到这个名字的基本概率(为此,我会保留所有输入单词的未修改列表)
    • P(E|H) 将是与该名称(一些拼写错误)相距的所有名称的概率总和。

    然后,我会将其结果与它们最初正确的概率进行比较,即P(Zero Typos| Length of Name) * P(This Spelling)

    【讨论】:

    • 我理解 Baye 的,问题是在更大范围内实现它(这个数据库是 Terabytes,并且在不断扩展)。为了跟踪P(H)P(E),我需要将拼写错误的名称存储在我的数据库中,对吗?然后,如果我希望用户查询更正的内容,我需要一个单独的副本,对吗?
    • 我认为没有任何方法可以避免存储拼写错误的名字,而不会引入严重的问题(特别是如果新名字开始出现)。例如,假设“Dan”进入早期N 的顶级名字,但“Don”没有。即使“Don”从长远来看是更多常见的,如果你不存储“不正确”的东西,你也无法了解这一点。我不确定您所说的“查询更正的内容”是什么意思。
    猜你喜欢
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2010-10-05
    • 1970-01-01
    • 2015-10-27
    • 2015-08-11
    • 1970-01-01
    相关资源
    最近更新 更多