Algorithm 匹配给定ASCII文本文件中最近的文件

Algorithm 匹配给定ASCII文本文件中最近的文件,algorithm,data-structures,ascii,information-retrieval,Algorithm,Data Structures,Ascii,Information Retrieval,问题: 我有大约20个ASCII文本文件,每个文件的大小小于10^9字节。另一个ASCII文本文件说FOO是给定的。该程序将策略性地将FOO的内容与给定的20个文件进行匹配,并打印最匹配文件的名称。FOO的内容可能仅部分匹配 由于文件太大,我想知道: 1.如何使用信息检索因为我对IR了解不多 2.我应该使用哪种数据结构来存储此类信息 3.实现它的最佳算法是什么 我知道我要求的太多了,但我真的被困在这个问题上,无法找到解决方法。任何帮助都将不胜感激。谢谢 所以我假设一个文件包含一些文本。所以我们可

问题:

我有大约20个ASCII文本文件,每个文件的大小小于10^9字节。另一个ASCII文本文件说FOO是给定的。该程序将策略性地将FOO的内容与给定的20个文件进行匹配,并打印最匹配文件的名称。FOO的内容可能仅部分匹配

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

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

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

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


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

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

吸血鬼编码器的解决方案假定文档是一袋字,意思是字的顺序无关紧要。但你说的部分匹配,是指一些句子匹配,那就没什么用了

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

对于每个文档,一旦缩小了可能的匹配范围,就可以提高分割文档的分辨率。假设你最初把它们分成两部分,现在你可以把它们分成10部分。这是为了尽量减少运行时间


此外,您还应该使用位置敏感的哈希算法,如:

我的猜测是最近的,是两个文件之间差异最小的文件


我会寻找一个diff算法,或者最长的公共子序列

如何扫描所有文件并为每个文本文件创建一个n维的单词向量,然后您可以计算文档之间的角度并选择最近的一个?一个更简单的方法是使用Jaccard索引,尽管它可能无法提供与余弦相似性相同的精度。请注意,这种技术对规范化的字数进行操作。您确实需要定义最接近的字数。如果测试文件匹配文件1中的所有单词,但单词顺序相反,即quick red fox和fox red the quick,那么它是否比前30%完全匹配文件2,但之后几乎没有相似性更接近?案例重要吗?空白?如果没有最接近的定义,你将很难决定比较什么。也许可以根据文件中的一些特征创建一个最接近的单词、段落、字母?然后互相核对?要回答这个问题,你首先需要指定你想要的更好一点。你需要做两件事:1。定义“最近”-更改字符的最小数量?两个字符之间有什么区别?e、 a->b是否比a->m的变化更好,单词差异?两个连续变化的字母比相隔很远的变化的字母好吗?2.因为这是一个优化问题,所以您优化的用例是什么?单个测试文件?还是很多?比较文件是否随每次测试而更改?还是每次都一样。