Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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
C++ 有识别不完整单词的拼写库吗?_C++_Spell Checking_Spelling - Fatal编程技术网

C++ 有识别不完整单词的拼写库吗?

C++ 有识别不完整单词的拼写库吗?,c++,spell-checking,spelling,C++,Spell Checking,Spelling,我的用例如下:给定一个字符串,识别从字符串开头开始的所有有效单词。例如: blueberryqqq 应输出: blue blueberry 为此,我有一个字典结构,它使用。例如,如果我的字典只包含上述两个单词,它将如下所示: b->l->u->e->\0 ->b->e->r->r->y->\0 当我调查输入字符串时,拼写检查过程可以告诉我,当我逐字逐句地检查时,是否: 我正在寻找一个有效的词 我找到了一个有效的

我的用例如下:给定一个字符串,识别从字符串开头开始的所有有效单词。例如:

blueberryqqq
应输出:

blue
blueberry
为此,我有一个字典结构,它使用。例如,如果我的字典只包含上述两个单词,它将如下所示:

b->l->u->e->\0
          ->b->e->r->r->y->\0
当我调查输入字符串时,拼写检查过程可以告诉我,当我逐字逐句地检查时,是否:

  • 我正在寻找一个有效的词
  • 我找到了一个有效的词
  • 我没有找到一个正确的词
  • 请注意,这些是标志,
    1
    2
    可以同时为真。通过这种方法,我可以一次有效地找到
    blue
    blueberry
    ,并在到达
    y
    时立即停止尝试。继续这个例子,下面是在我逐字逐句地讲述时发生的事情:

    b:1, l:1, u:1, e:1|2, b:1, e:1, r:1, r:1, y:2
    
    当我看到
    1 | 2
    时,我知道“blue”是一个有效的单词,但我也知道继续往下看字符串,因为我的字典告诉我可能有更多的单词。一旦我到达
    y
    ,我就停下来。非常有效,因为对于所有有效的单词,我只访问每个字母一次,而且一旦字典告诉我没有必要再进一步,我就停止拼写检查。太好了

    我的问题是我的字典trie是根据/usr/share/dict/words构建的,该文件不包含“蓝莓”的复数形式,也就是“蓝莓”,并且通常不包含所有单词的所有“派生词”。因此,如果输入字符串是
    blueberriesqq
    ,我只会得到有效的
    blue

    如果我要使用拼写检查库,如
    aspell
    hunspell
    ,据我所知,我需要单独检查所有子字符串的拼写!e、 g.
    b
    bl
    blu
    等。效率很低!不仅如此,我还不知道什么时候该停止检查。e、 g.我怎么知道没有以
    蓝莓QQ
    开头的单词

    所以,我的问题是:是否有一个拼写检查库可以容纳我的用例


    请注意,拼写建议并不能解决这个问题。将
    blub
    传递给aspell不会返回任何以
    blub
    开头的拼写建议。因此,我将结束我的搜索,即使仍然有可能找到更多有效的单词。

    您可以使用类似
    aspell-d en dump master | aspell-l en expand>my.dict
    的方法将词典扩展到单词列表中,以构建trie。这通常最好使用排序的单词列表,而不是词典。通过利用排序,您可以在排序列表中找到以蓝色开头的点。。。每个新字母都有
    log(N)
    lookup,并且没有任何内存膨胀试图用子字符串等扩展这些内容。你进入单词越深,它得到的速度越快,但速度永远不会太慢。有问题要求我们推荐或查找一本书、工具、软件库,教程或其他非现场资源与堆栈溢出无关。您确定已正确实现trie吗?在我看来,你可以用O(n)(n是字典的大小(计数字符),O(n)来查找字符串。但是用O(1)给出新字符时的更新时间:您只需跟踪活动节点。@screwnut:您可以将您的问题从查找字典工具转变为从
    /usr/share/dict/words
    检索所有带派生词的单词