我正在构建的数据库中有大量名称,这些名称经常被重复。然而,许多名字都有拼写错误,我想尝试自动纠正错误拼写。我事前并不知道正确的名单。
我目前的做法是在语料库中保留最高N
个名字及其频率的列表。然后,当一个新名称输入到数据库中时,我找到最大化term_freq(name) / edit_distance(new_name, name)
的名称。也就是说,我在顶部N
名称中找到一个现有名称,其频率最高的除以候选名称与候选名称之间的编辑距离。
这是检查姓名的合理方法吗?我错了吗?
我担心如果系统检测到拼写错误名称的一组文档,他们可以将其设置为顶级N
名称,然后导致所有其他名称也发生变化。
答案 0 :(得分:0)
所以,首先......我有义务说我怀疑你会比你保存更麻烦,并且你可能会更高兴只是要求每个人正确拼写事物(并接受这些事情)如果他们不这样做,将以一种不错的,可预测的方式打破)。话虽这么说,如果你打算以这种方式做事,我会看看贝叶定律:
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)
。