我有几百万个单词,我想在十亿个单词的语料库中搜索。什么是有效的方法来做到这一点。
我正在考虑使用 trie,但是是否有可用的 trie 开源实现?
谢谢
- 更新 -
让我添加一些关于究竟需要什么的更多细节。
我们有一个系统,我们抓取新闻来源并根据词的频率获取流行词。可能有一百万个单词。
我们的数据看起来像这样。
字 1 频率 1 字 2 频率 2(制表符分隔)
我们还从另一个来源获得了最受欢迎的词(10 亿),其中也包含上述格式的数据。
这是我想得到的输出。
- 两个来源共有的词
- 单词仅出现在我们的来源中,但不在参考来源中。
- 单词仅出现在参考来源中,但不在我们的来源中。
我只能对上述信息使用 comm(bash 命令)来获取单词。我不知道如何使用 comm 仅与一列而不是两列进行比较。
该系统应该是可扩展的,我们希望每天都执行此操作并比较结果。我也想得到近似匹配。
所以,我正在考虑写一个地图减少工作。我打算编写如下的 map 和 reduce 函数,但我有几个问题。
Map
For each word
output key = word and value = structure{ filename,frequency}
done
Reduce
For each key
Iterate through all the values and check if both file1 and file2 are contained.
If yes, then write it to appropriate file.
If only in file1, write it to file1only file
If only in file2, write it to file2only file.
Done.
我有两个问题。在 map reduce 中,我可以提供一个包含我的两个文件的目录作为输入。我不知道如何获取我从中读取单词的文件名。如何获取这些信息?如何写入不同的输出文件,因为 reduce 阶段会自动写入名为 part-xxxxx 的默认文件。如何写入不同的输出文件。
感谢您阅读本文。