【发布时间】:2010-01-24 22:31:35
【问题描述】:
我有几百万个单词,我想在十亿个单词的语料库中搜索。这样做的有效方法是什么。
我正在考虑一个 trie,但是有可用的 trie 的开源实现吗?
谢谢
-- 更新了--
让我补充一些关于究竟需要什么的更多细节。
我们有一个系统,可以抓取新闻来源并根据词的频率获取热门词。可能有一百万字。
我们的数据将如下所示。
Word1 频率1 Word2 频率2 (制表符分隔)
我们还从另一个来源获得了最流行的词(10 亿个),其中也包含上述格式的数据。
这是我想要得到的输出。
- 两个来源的共同词
- 单词仅出现在我们的来源中,而不出现在参考来源中。
- 单词仅出现在参考源中,而不出现在我们的源中。
我只能对上述信息使用 comm(bash 命令)来获取单词。我不知道如何使用 comm 只比较一列而不是两列。
系统应该是可扩展的,我们希望每天都执行此操作并比较结果。我也想得到近似匹配。
所以,我正在考虑编写一个 map reduce 作业。我打算写下面的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 的默认文件。如何写入不同的输出文件。
感谢您阅读本文。
【问题讨论】:
-
你能把它们放在一个 SQL 数据库中,然后使用全文搜索吗?
-
@Travis:他说“高效”。 :)
-
看起来只需要执行一次(要查询的字数是已知的),所以我会说效率被高估了。它只需要快速完成。
-
好的,你有一个包含一百万个不同单词的集合和一个总计十亿个单词的文档集合。你到底在寻找什么输出?如果输出也很大,您希望从那个中获得什么样的信息?
-
纯粹出于好奇,十亿个最常用词的随机样本会是什么样子?鉴于 wornil 和 oophorectomized 等宝物显然在前 700,000 个英文单词中,99.9% 的词条的单词列表的想法甚至更少 常见的令人难以置信。
标签: algorithm search data-structures hadoop mapreduce