查找字典的有效方法

时间:2014-12-29 12:02:22

标签: algorithm dictionary lookup

我有一个字典,它将字映射到id,如:

at: 0
hello: 1
school: 2
fortune:3
high:4
we: 5
eat: 6
....
high_school: 17
fortune_cookie: 18
....

然后,我有一份文件。将文档内容传输到id的最快捷有效的方法是什么。 例如:

"At high school, we eat fortune cookie."
=>  "0 17, 5 6 18"

希望看到你的建议。 感谢readinng。

2 个答案:

答案 0 :(得分:3)

如果文档没有那么多重复,您可以尝试trie数据结构或红黑树。特里是便宜得多。您还可以将trie与通配符结合使用:http://phpir.com/tries-and-wildcards

答案 1 :(得分:2)

这实际上取决于文档的大小,关键字列表是否为静态,以及是否需要查找多字词短语。天真的方法是从字典中的文档中查找每个单词。因为字典查找是O(1),所以查找每个单词将花费O(n)时间,其中n是文档中的单词数。如果您需要查找多字短语,可以对输出进行后处理以找到它们。

这不是最有效的做事方式,但它实施起来非常简单,速度相当快,而且如果您的文件不是很大,那么效果会很好

如果您有非常大的文档,那么您可能需要Aho-Corasick string matching algorithm之类的内容。该算法分两个阶段进行。首先,它从你的字典中的单词构建一个trie,然后它只通过文档并输出所有的匹配。实施起来比天真的方法更复杂,但是一旦构建了trie,它就能很好地工作。而且,说实话, 难以实施。从维基百科文章链接的原始论文很好地解释了算法,并且将它们的伪代码转换为工作程序并不困难。

但请注意,您可能会得到一些意想不到的结果。例如,如果您的词典包含单词" high"和#34;学校"以及两个单词的短语"高中",Aho-Corasick会在看到短语"高中"时为你提供所有三个匹配。

相关问题