【问题标题】:efficient algorithm to perform spell check on HTML document对 HTML 文档执行拼写检查的高效算法
【发布时间】:2009-12-24 06:57:19
【问题描述】:

我有一个 HTML 文档、一个常见拼写错误列表以及每种情况的正确拼写。 HTML 文档最多可达约 50 页,并且有约 30K 拼写更正条目。

纠正此 HTML 文档中所有拼写错误的有效方法是什么?
(注意:如果您知道任何相关库,我将使用 Python 实现。)


我想到了两种可能的方法:

  • 构建拼写数据的哈希表
  • 从 HTML 解析文本
  • 按空格将文本拆分为标记
  • 如果拼写哈希表中的标记替换为更正
  • 使用更新的文本构建新的 HTML 文档

这种方法对于存在的多词拼写更正会失败。以下是一种更简单但似乎效率较低的方法,适用于多词:

  • 迭代拼写数据
  • 在 HTML 文档中搜索单词
  • 如果单词存在替换为更正

【问题讨论】:

    标签: python html algorithm performance spell-checking


    【解决方案1】:

    您是正确的,第一种方法比第二种方法快得多(此外,我建议查看 Tries 而不是直接哈希,对于 30k 字而言,空间节省将非常显着)。

    为了仍然能够处理多词情况,您可以跟踪前一个标记,从而检查您的哈希是否有组合字符串,例如“prev cur”。

    否则,您可以将多词更正排除在散列之外并结合您的两种方法,首先对单个单词使用散列,然后对多词组合进行扫描(反之亦然)。如果多词更正的数量相对较少,这仍然可能相对较快。

    要小心,提取单词标记比在空格上拆分更棘手。您不希望仅仅因为在哈希中没有找到带有逗号的“实例”而无法更正错误。

    【讨论】:

    • 30K 的哈希表很小,不需要尝试。
    • 你说得对,空间可能不是这里的主要问题。但是对于这类问题,trie 结构还是很方便的。
    • 我认为这里的 trie 结构很棒,但是在实现方面,您将如何真正完成 trie 以及遍历?
    【解决方案2】:

    我同意 Rob 关于使用基于字符的 trie 的建议,因为我在很久以前就编写了一个拼写校正算法,该算法基于将有效单词字典存储为 trie。通过使用分支定界,我能够建议拼写错误的单词可能正确的拼写(Levenshtein distance)。此外,由于 trie 只是一个大型有限状态机,因此添加公共前缀和后缀相当容易,因此它可以处理诸如“后国家化主义”之类的“词”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2010-09-20
      • 2019-05-08
      • 2016-07-20
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多