Python 一种高效的HTML文档拼写检查算法

Python 一种高效的HTML文档拼写检查算法,python,html,algorithm,performance,spell-checking,Python,Html,Algorithm,Performance,Spell Checking,我有一个HTML文档,一个常见拼写错误列表,以及每个案例的正确拼写。 HTML文档最多可达50页,有大约30K个拼写更正条目 纠正此HTML文档中所有拼写错误的有效方法是什么? (注意:如果您知道任何相关库,我的实现将使用Python。) 我想到了两种可能的方法: 构建拼写数据的哈希表 从HTML解析文本 按空格将文本拆分为标记 拼写哈希表中的if标记替换为更正 使用更新的文本构建新的HTML文档 这种方法将无法纠正多个单词的拼写错误,这将是存在的。以下是一种简单但似乎效率较低的方法,适用

我有一个HTML文档,一个常见拼写错误列表,以及每个案例的正确拼写。 HTML文档最多可达50页,有大约30K个拼写更正条目

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


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

  • 构建拼写数据的哈希表
  • 从HTML解析文本
  • 按空格将文本拆分为标记
  • 拼写哈希表中的if标记替换为更正
  • 使用更新的文本构建新的HTML文档
这种方法将无法纠正多个单词的拼写错误,这将是存在的。以下是一种简单但似乎效率较低的方法,适用于多词:

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

第一种方法比第二种方法快得多,这是正确的(此外,我建议使用直接哈希法,而不是直接哈希法,对于3万个单词,节省的空间将非常可观)

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

或者,您可以将多字更正从哈希中删除,并将两种方法结合起来,首先对单个字使用哈希,然后对多字组合进行扫描(反之亦然)。如果多字更正的数量相对较少,则这可能仍然相对较快


但是要小心,取出单词标记比仅仅在空格上拆分要复杂得多。您不希望仅仅因为没有在哈希中找到带逗号的“instence”而无法更正错误。

您是正确的,第一种方法将比第二种方法快得多(此外,我建议使用查找而不是直接哈希,对于30k个单词,节省的空间将非常可观)

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

或者,您可以将多字更正从哈希中删除,并将两种方法结合起来,首先对单个字使用哈希,然后对多字组合进行扫描(反之亦然)。如果多字更正的数量相对较少,则这可能仍然相对较快


但是要小心,取出单词标记比仅仅在空格上拆分要复杂得多。你不希望仅仅因为没有在散列中找到逗号为“instence”的“instence”而无法更正错误。

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

我同意Rob的建议,使用基于字符的trie,因为我在很久以前编程了一个拼写纠正算法,它基于有效单词的字典存储为trie。通过使用branch和bound,我能够建议拼写错误的单词可能正确的拼写(By)。此外,由于trie只是一个大型有限状态机,添加通用前缀和后缀相当容易,因此它可以处理“后国家化”之类的“单词”。

30K哈希表很小,不需要trie。您是对的,空间可能不是这里的主要问题。但是对于这种类型的问题,trie结构仍然非常方便。我认为trie结构在这里非常棒,但是在实现方面,您实际上如何完成trie以及遍历?30K哈希表很小,不需要trie。您是对的,空间可能不是这里的主要问题。但是对于这种类型的问题,trie结构仍然非常方便。我认为trie结构在这里非常棒,但是在实现方面,您实际上如何完成trie以及遍历呢?