7

问题:

我有大约 20 个 ASCII 文本文件,每个文件的大小都小于10^9 字节。给出了另一个 ASCII 文本文件(比如 FOO)。程序是将 FOO 的内容与给定的 20 个文件进行战略匹配,并打印 CLOSEST 匹配文件的名称。FOO 的内容可能仅部分匹配。

由于文件太大,我想知道:

1.如何使用信息检索(因为我对IR不太了解)

2.我应该使用哪种数据结构来存储这些信息

3.实现它的最佳算法是什么。

我知道我问的太多了,但我真的被这个问题困住了,无法找到解决方法。任何帮助都将不胜感激。谢谢!

4

3 回答 3

0

所以我假设一个文件包含一些文本。所以我们可以说每个文件都是一个大字符串。现在制作 20 个向量或数组。浏览文件并将每个单词作为向量中的一个元素。现在创建一个大小为 20 的向量来存储每个文件的匹配现在也为给定文件创建一个词向量。现在创建一个循环来遍历这些向量,如果在任何给定索引处您发现与这 20 个向量和给定向量中的任何一个匹配。增加匹配存储向量中对应文件的值。最后,匹配存储向量中的最高值将指示具有最佳匹配的文件。

于 2013-06-07T06:51:47.893 回答
0

Vampire Coder 的解决方案假设文档是词袋,意思是词的顺序无关紧要。但是“部分匹配”是指某些句子匹配,那将没有任何好处。

您可以将每个文档分成重叠的子集,并获取每个子集的哈希值。然后,您将文档转换为一组哈希。然后你可以比较哈希值。这是您可以做您想做的事情的一种方式。

对于每个文档,一旦您缩小了潜在匹配范围,您就可以提高划分文档的分辨率。假设您最初将它们分成两份,现在您可以将它们分成10份。这是为了最大限度地减少运行时间。

你也应该使用局部敏感散列算法,如:http ://en.wikipedia.org/wiki/Nilsimsa_Hash

于 2014-01-14T04:40:43.983 回答
0

我对“最接近”的猜测是两个文件之间差异最小的文件。

我会寻找差异算法或最长公共子序列https://en.m.wikipedia.org/wiki/Longest_common_subsequence_problem

于 2015-07-26T19:03:41.537 回答