文件相似性判断 -- 超级特征值(super feature)

基于内容的变长分块(CDC)技术,可以用来对文件进行变长分块,而后用来进行重复性检测,广泛用于去重系统中。后来又出现了对相似数据块进行delta压缩,进一步节省存储开销。所以就需要一种高效的相似性检测算法,在论文 WAN Optimized Replication of Backup Datasets Using Stream-Informed Delta Compression
提出的super-features 算法具有很好的效果。主要思想是在滑动窗口进行分块的过程中,通过一个窗口的rabin fingerprint 我们可以随机的得到一个数值,如果它比这个块中所有窗口w的rabin指纹都大,就把它记为一个特征值 feature-i,通过这样的方法得到的多个feature,计算rabin 指纹得到的就是超级特征值SF,下图每个SF有四个特征值得到。

下面是对几个文件简单的测试结果,这里每个文件生成俩超级特征值(如果两个文件有一个super feature一样,就可以认为它们相似性很高),效果比simhash好(缺乏大量数据集论证)。

F1,F2,F3 分别在F的基础上头,尾,中间加入额外字节,发现得到的两个超级特征值都一样 Supfeature[0]=5465959093573163876,Supfeature[1]=7673021043978770954。

F4是一个完全不同的文件, Supfeature[0]=2682386775420212619,Supfeature[1]=3509276326591445061。

参考:

1. Philip Shilane-WAN Optimized Replication of Backup Datasets Using Stream-Informed Delta Compression

2.Some applications of rabin‘s fingerprinting method.

文件相似性判断 -- 超级特征值(super feature)

时间: 2024-10-08 22:24:19

文件相似性判断 -- 超级特征值(super feature)的相关文章

文件相似性判断 -- SimHash

最近调研了一下simhash算法,它主要用在谷歌网页去重中,网上有很多原理性的介绍.既然可以用来判断文件的相似性,就想知道效果怎么样,simhash的精确度是否依赖于分词算法?是否和simhash的长度有关? 在数据去重过程中,都是先对文件进行分块,而后得到关于这个文件的所有指纹(SHA-1 digest),那么如果把这些fingerprints视为这个文件的单词,作为simhash的输入,效果会如何呢?接下来自己做了一个简单的测试,测试文件由自己构建的,下表是统计数据,F是基准文件,貌似效果没

程序相似性判断

一.问题分析 基本任务: 对于两个C语言的源程序清单,用哈希表的方法分别统计两程序中使用C语言关键字的情况,并最终按定量的计算结果,得出两份源程序清单的相似性. 任务要求: C语言关键字的Hash表可以自建,也可以如实现提示中那样构建.此题的主要工作是扫描给定的源程序,累计在每个源程序中C语言关键字出现的频度.在扫描源程序过程中,每遇到关键字就查找Hash表,并累加相应关键字出现的频度.为保证查找效率,建议Hash表的平均查找长度ASL不大于2. 二.程序设计 解决方案: 本程序根据要求和实现提

java中图片文件的判断

javax.imageio 类 ImageIO BufferedImage bi = ImageIO.read(resFile);//resFile --- InputStream if(bi == null){ System.out.println(此文件不为图片文件); } try {//判断是否为图片文件并且返回图片的格式! ImageInputStream iis = ImageIO.createImageInputStream(o); // Find all image readers

通过读取文件头部判断是否为CSV格式文件

通过读取文件头部判断是否为CSV格式文件 通过读取CSV文件头,判断文件是是否属于CSV文件类型,一般而言仅仅只是通过文件后缀来判断该文件所属的类型,这样是不合理的,只要更改一下文件后缀就无法识别这个文件到底是不是正确的文件格式,把可执行的文件后缀改为.CSV如果是通过判断文件后缀来识别文件类型,这样肯定是行不通的,因为exe的文件格式肯定不是CSV的格式,如果提前判断出这个文件头的这样就能定位这个文件是不是我们所需要的文件类型,避免对错误的文件进行解析.同样也可以在某种程度上保护服务器的安全.

C#根据文件流判断文件类型

判断文件真实的类型,不是通过扩展名来判断: /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static bool IsAllowedExtension(string filePa

上传txt文件编码格式判断(文本乱码解决方法)

说明 通过ajax或者浏览上传文本文件,上传时候c#处理时候因为文本格式的创建不同,在获取内容时候会出现中文乱码. 解决方法 通过上传的文件流,判断文件的编码格式,在使用对应的编码格式获取文本内容 #region 通过给定的文件流,判断文件的编码类型        /// <summary>        /// 通过给定的文件流,判断文件的编码类型        /// </summary>        /// <param name=“fs“>文件流</pa

iOS文件类型判断

最近在做的东西有下载zip,只是服务器发送过来的是二进制,需要根据二进制来判断是什么类型的文件,从而进行保存操作.起初很不理解,到后来发现可以通过二进制的前2位的ascii码来进行判断.如下: // 255216 jpg;        // 7173 gif;        // 6677 bmp,        // 13780 png;        // 6787 swf        // 7790 exe dll,        // 8297 rar        // 8075

C++ 遍历目录所有文件并判断是否为目录

1. 思路 使用FindFirstFile.FindNextFile函数,来遍历目录.结果保存在WIN32_FIND_DATA结构体中.将查询结果的dwFileAttributes和FILE_ATTRIBUTE_DIRECTORY取与操作,判断是否为目录. 2. 示例代码 #include <iostream> #include <stdio.h> #include <windows.h> using namespace std; int main() { HANDLE

shell文件的判断

孰能生巧,然而长久不用呢?你就会忘记它,还好有乐于分享的大佬们 shell 判断文件夹或文件是否存在 shell 基础知识 给你个全的,你在Linux环境下多试下就明白了: $0 这个程式的执行名字 $n 这个程式的第n个参数值,n=1..9 $* 这个程式的所有参数,此选项参数可超过9个. $# 这个程式的参数个数 $$ 这个程式的PID(脚本运行的当前进程ID号) $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号) $? 执行上一个指令的返回值 (显示最后命令的退出状态.