现实世界的拼写错误统计?

41 投票
5 回答
8715 浏览
提问于 2025-04-16 02:23

我在哪里可以找到一些真实的拼写错误统计数据?

我正在尝试将人们输入的文本与内部对象匹配,但人们往往会犯拼写错误。
错误主要有两种类型:

  1. 拼写错误 - 比如把 "Hello" 错写成 "Helllo",把 "Saturday" 错写成 "Satudray" 等等。
  2. 拼写 - 比如把 "Chicago" 错写成 "Shikago"。

我使用 Damerau-Levenshtein 距离 来处理拼写错误,使用 Double Metaphone 来处理拼写(Python 实现可以在 这里这里 找到)。

我想专注于 Damerau-Levenshtein(或者简单称为 编辑距离)。教科书中的实现总是将删除、插入、替换和调换的权重设为 '1'。虽然这样简单,算法也很好,但这并不符合“现实”或“真实世界的概率”。

举几个例子:

  • 我相信 "Helllo"("Hello")的可能性比 "Helzlo" 更高,尽管它们的编辑距离都是 1。
  • 在 QWERTY 键盘上,"Gello" 离 "Hello" 更近,而不是 "Qello"。
  • Unicode 转写: "München" 和 "Munchen" 之间的“真实”距离是多少?

那么,删除、插入、替换和调换的“真实世界”权重应该是多少呢?

即使是 Norvig 的拼写纠正器 也使用了没有权重的编辑距离。

顺便说一下,我相信这些权重需要是函数,而不仅仅是简单的浮点数(根据上面的例子)……

我可以调整算法,但我在哪里可以“学习”这些权重呢?我没有访问 谷歌规模的数据……

我应该随便猜测吗?

编辑 - 尝试回答用户问题:

  • 我当前的无权重算法在面对拼写错误时经常失败,原因如上所述。“Return on Tursday”:每个“真实的人”都能轻易判断 Thursday 比 Tuesday 更可能,但它们的编辑距离都是 1! (是的,我确实记录并测量我的性能)。
  • 我正在开发一个自然语言处理的旅行搜索引擎,所以我的字典包含大约 25,000 个目的地(预计会增长到 100,000),时间表达式大约 200(预计 1,000),人名表达式大约 100(预计 300),货币表达式大约 100(预计 500),“连接逻辑词”(如“从”、“美丽”、“公寓”)大约 2,000(预计 10,000)等等……
  • 编辑距离在每个词组中的使用是不同的。我尝试在明显的情况下“自动纠正”,例如与字典中仅有一个其他单词的编辑距离为 1。我有很多其他手动调整的规则,例如 Double Metaphone 修正,它与字典中长度大于 4 的单词的编辑距离不超过 2……规则列表随着我从现实输入中学习而不断增长。
  • “在你的阈值内有多少对字典条目?”:这取决于“复杂的加权系统”和现实世界(未来)的输入,不是吗?无论如何,我有广泛的单元测试,以确保我对系统所做的每一次更改都能使其变得更好(当然是基于过去的输入)。大多数小于 6 个字母的单词与另一个字典条目之间的编辑距离都是 1。
  • 今天,当有两个字典条目与输入的距离相同时,我尝试应用各种统计方法来更好地猜测用户的意思(例如,巴黎,法国在我的搜索中比 Pārīz,伊朗更可能出现)。
  • 选择错误单词的代价是向最终用户返回半随机(通常荒谬)的结果,并可能失去客户。而不理解的代价稍微低一些:用户会被要求重新表述。
  • 复杂性的代价值得吗?是的,我相信是值得的。你不会相信人们向系统输入了多少拼写错误,并期望它能理解,而我确实需要在 精确度和召回率 上有所提升。

5 个回答

5

Church和Gale的论文《拼写纠正的概率评分》可能会对你有帮助。在这篇论文中,作者把打字错误看作是作者和计算机之间的一个“嘈杂通道”。附录里有一些表格,列出了在美联社出版物中出现的打字错误。每种类型的打字错误都有一个表格,具体包括:

  • 删除错误
  • 插入错误
  • 替换错误
  • 调换错误

举个例子,看看插入错误的表格,我们可以看到字母l在另一个l后面被错误地插入了128次(这是这一列中最高的数字)。利用这些表格,你可以生成你需要的概率数据。

8

我建议你看看这个三元组算法。我觉得它在查找拼写错误方面比编辑距离算法更有效。它的速度也应该更快,如果你把字典放在Postgres数据库里,还可以利用索引来加速查询。

你可能会觉得这个stackoverflow上的话题很有用,讨论的是谷歌的“你是想说”算法。

14

获取真实世界中拼写错误统计数据的一个可能来源是维基百科的完整编辑历史

http://download.wikimedia.org/

另外,你可能会对AWB的RegExTypoFix感兴趣。

http://en.wikipedia.org/wiki/Wikipedia:AWB/T

撰写回答