Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将单词与词典中的目标单词进行比较_Algorithm_Hashmap_Spell Checking - Fatal编程技术网

Algorithm 将单词与词典中的目标单词进行比较

Algorithm 将单词与词典中的目标单词进行比较,algorithm,hashmap,spell-checking,Algorithm,Hashmap,Spell Checking,我正试图用JAVA编写一个程序,将字典存储在hashmap中(每个单词在不同的键下),并将给定的单词与字典中的单词进行比较,如果在字典中找不到,则提出拼写建议——基本上是一个拼写检查程序 我已经提出了比较算法(即Needleman Wunsch,然后是Levenshtein distance),等等,但在计算字典hashmap中哪些单词与“hellooo”进行比较时,我陷入了困境 我无法将“ohelloo”[应更正为“hello”)与词典b/c中的每个单词进行比较,这将花费太长的时间,我无法将其

我正试图用JAVA编写一个程序,将字典存储在hashmap中(每个单词在不同的键下),并将给定的单词与字典中的单词进行比较,如果在字典中找不到,则提出拼写建议——基本上是一个拼写检查程序

我已经提出了比较算法(即Needleman Wunsch,然后是Levenshtein distance),等等,但在计算字典hashmap中哪些单词与“hellooo”进行比较时,我陷入了困境

我无法将“ohelloo”[应更正为“hello”)与词典b/c中的每个单词进行比较,这将花费太长的时间,我无法将其与词典中以“o”开头的所有单词进行比较。b/c应该是“hello”


有什么想法吗?

最常见的拼写错误是

  • 删除字母(小词或分词)
  • 交换相邻字母
  • 更改字母(QWERTY相邻字母)
  • 插入字母
一些报告称70-90%的错误属于上述类别(编辑距离1)

看看下面的url,它提供了一个解决单个或两个错误(编辑距离1或2)的方法。几乎所有你需要的东西都在那里

仅供参考:您可以在上述文章的底部找到各种编程语言的实现。我在我的一些项目中使用过它,实际准确性非常好,有时如作者所说超过95%

--根据OP的评论-- 如果您不想预先计算每个可能的更改,然后在映射上搜索,我建议您使用patricia trie()而不是HashMap。不幸的是,您将再次需要处理“第一个字母错误”(例如删除第一个字母或用第二个字母交换第一个字母,或者用Qwerty相邻字母替换它)而且你可以用高概率限制你的搜索


您甚至可以将其与额外的索引映射或带有“反向”单词的Trie或省略前N个字符(例如前2个)的额外索引结合起来,这样您就可以仅捕获前缀上发生的错误。

最常见的拼写错误是

  • 删除字母(小词或分词)
  • 交换相邻字母
  • 更改字母(QWERTY相邻字母)
  • 插入字母
一些报告称70-90%的错误属于上述类别(编辑距离1)

看看下面的url,它提供了一个解决单个或两个错误(编辑距离1或2)的方法。几乎所有你需要的东西都在那里

仅供参考:您可以在上述文章的底部找到各种编程语言的实现。我在我的一些项目中使用过它,实际准确性非常好,有时如作者所说超过95%

--根据OP的评论-- 如果您不想预先计算每个可能的更改,然后在映射上搜索,我建议您使用patricia trie()而不是HashMap。不幸的是,您将再次需要处理“第一个字母错误”(例如删除第一个字母或用第二个字母交换第一个字母,或者用Qwerty相邻字母替换它)而且你可以用高概率限制你的搜索


您甚至可以将它与一个额外的索引映射或带有“反向”单词的Trie或一个省略前N个字符(例如前2个)的额外索引结合起来,因此您可以捕获仅在前缀上发生的错误。

您可以比较给定单词的所有移位,并选择最佳匹配。例如:“ohelloo”、“hellooo”、“elloooh”…好的,但是我如何在字典中选择一个子集来比较该单词?我认为哈希映射不是解决此问题的好数据结构。使用trie/后缀树您可以快速找到具有给定前缀的所有单词。但是如果拼写错误在前缀中呢?您可以比较给定单词的所有移位并选择最佳匹配。例如:“ohelloo”、“hellooo”、“elloooh”…好的,那么我如何在字典中选择一个子集来比较单词?我不认为hashmap是解决此问题的好数据结构。使用trie/后缀树,您将能够快速找到具有给定前缀的所有单词。但是,如果拼写错误在前缀中,该怎么办?谢谢;我已经提出了具有给定字典单词的单词的评分/比较算法。我的问题是关于哪个单词是w例如,如何在字典中选择相似的单词;我已经想出了一个单词与给定的字典单词的评分/比较算法。我的问题是要在字典中比较一个单词与哪个单词,即如何在字典中选择相似的单词