【发布时间】:2011-10-18 10:36:15
【问题描述】:
我的任务是为一项作业创建一个简单的拼写检查器,但几乎没有给出任何指导,所以想知道是否有人可以帮助我。我不是在找人帮我做作业,但是任何关于算法的指导或帮助都会很棒!如果我要问的内容不在网站的范围内,那么我很抱歉,我会去别处看看。 :)
项目加载正确拼写的小写单词,然后需要根据两个标准提出拼写建议:
一个字母差异(添加或减去以使单词与字典中的单词相同)。例如,“stack”是对“staick”的建议,“cool”是对“coo”的建议。
一个字母替换。例如,'bad' 将是对 'bod' 的建议。
所以,只是为了确保我已经正确解释.. 我可能会加载单词 [hello, goodbye, wonderful, good, god],然后对(拼写错误的)单词“godd”的建议将是 [好,上帝]。
速度是我在这里的主要考虑因素,所以虽然我认为我知道完成这项工作的方法,但我真的不太确定它的效率如何。我正在考虑这样做的方式是创建一个map<string, vector<string>>,然后对于加载的每个正确拼写的单词,将正确拼写的工作添加为地图中的键,并将向量填充为所有可能的'那个词的错误排列。
然后,当我想查找一个单词时,我会查看地图中的每个向量,看看该单词是否是一个拼写正确的单词的排列。如果是,我会将键添加为拼写建议。
这似乎会占用大量内存,因为每个单词肯定会有数千个排列?如果我最初的正确拼写单词字典很大,它似乎也会非常非常慢?
我在想也许我可以通过只查看与我正在查看的单词相似的键来减少时间。但是话又说回来,如果它们在某些方面相似,那么这可能意味着关键将是一个建议,这意味着我不需要所有这些排列!
所以,是的,我对我应该往哪个方向看有点困惑。我真的很感激任何帮助,因为我真的不知道如何估计不同做事方式的速度(我们还没有在课堂上完全被教过)。
【问题讨论】:
-
有不少自然语言处理工具是开源的,可以作为使用算法的灵感来源。对于 C++ 作业,查看 Java 开源工具可能是一个不错的选择,以确保您只选择算法:例如,请参阅 languagetool.org。
标签: c++ algorithm language-agnostic nlp spell-checking