我的用例如下:给定一个字符串,识别从字符串开头开始的所有有效单词。例如:
blueberryqqq
应输出:
blue
blueberry
为此,我有一个使用trie<char>
的字典结构。例如,如果我的字典仅包含上面的两个单词,那么它就是这样的:
b->l->u->e->\0
->b->e->r->r->y->\0
当我调查我的输入字符串时,拼写检查过程可以告诉我,因为我从一封信到另一封信是否:
请注意,这些是标记,1
和2
可以同时为true。通过这种方法,我可以一次有效地找到blue
和blueberry
,并在我到达y
时立即停止尝试。继续这个例子,这是我在一封信到另一封信时发生的事情:
b:1, l:1, u:1, e:1|2, b:1, e:1, r:1, r:1, y:2
当我看到1|2
时,我知道&#34;蓝色&#34;是有效的单词,但我也知道继续沿着字符串向下走,因为我的字典告诉我有更多的单词可能。一旦我到达y
,我就会停下来。非常高效,因为我只对所有有效单词访问每个字母一次,并且一旦字典告诉我没有必要进一步,我就停止拼写检查。完美!
我的问题是我的字典特里是从/ usr / share / dict / words构建的,并且该文件不包含复数形式的&#34; bluberry&#34;这是&#34;蓝莓&#34;并且通常不会包含所有&#34;衍生物&#34;所有的话。因此,如果输入字符串为blueberriesqqq
,我只会将blue
视为有效。
如果我使用像aspell
或hunspell
这样的拼写检查库,,我可以告诉,我需要拼写检查所有子字符串单独!例如b
,bl
,blu
等等效率很低!不仅如此,我还不知道何时停止检查。例如我怎么知道没有以blueberriesqq
开头的任何单词?
所以,我的问题变成了:那里有一个能够容纳我的用例的拼写检查库吗?
请注意,拼写建议不会削减它。将blueb
传递给aspell不会返回任何以blueb
开头的拼写建议。因此,即使仍然有可能有更多有效的单词,我也会结束我的搜索。