良好的抄袭检测将根据文档类型(例如,特定语言的论文或程序代码)应用启发式方法。
但是,您也可以应用常规解决方案。查看归一化压缩距离 (NCD)。显然,你不能准确地计算文本的柯尔莫哥洛夫的复杂性,但你可以通过简单地压缩文本来接近它。
较小的 NCD 表示两个文本更相似。某些压缩算法将提供比其他算法更好的结果。幸运的是,PHP提供了对多种压缩算法的支持,因此您可以立即运行NCD驱动的抄袭检测代码。下面我将给出使用 Zlib 的示例代码:
菲律宾比索:
function ncd($x, $y) {
$cx = strlen(gzcompress($x));
$cy = strlen(gzcompress($y));
return (strlen(gzcompress($x . $y)) - min($cx, $cy)) / max($cx, $cy);
}
print(ncd('this is a test', 'this was a test'));
print(ncd('this is a test', 'this text is completely different'));
蟒:
>>> from zlib import compress as c
>>> def ncd(x, y):
... cx, cy = len(c(x)), len(c(y))
... return (len(c(x + y)) - min(cx, cy)) / max(cx, cy)
...
>>> ncd('this is a test', 'this was a test')
0.30434782608695654
>>> ncd('this is a test', 'this text is completely different')
0.74358974358974361
请注意,对于较大的文本(读取:实际文件),结果将更加明显。试一试并报告您的经验!