用PHP计算抄袭

时间:2011-11-03 20:34:14

标签: php

如果这不是一个面向编程的问题,请原谅我。

假设我们有两句话

  

[1] =这是一个测试思路   [2] =这是一个实验性的想法

如果我混淆了[1]

  

[1] = a这个想法测试是

这会算作抄袭吗?我必须采用什么样的逻辑来检测抄袭。 我不是在制作一个复杂的抄袭服务,而是一个相当简单的服务,可以捕捉到明显的抄袭。

我的逻辑有点像这样

<?php

$str1= "This is a test idea.";
$str2= "This is an experimental idea.";

echo "$str1<br>$str2<br>";

$str1Array = explode(" ",$str1);
$str2Array = explode(" ",$str2);

if(count($str1Array) > count($str2Array))
$max=count($str1Array);
else
$max=count($str2Array);

$word_seq = array();
$word_seq_history = array();
$c=0;
$plag_count=0;

for ($i = 0; $i < $max; $i++) {
        $lev = levenshtein($str1Array[$i], $str2Array[$i]);    // check for an exact match

        if ($lev == 0) {
            $c+=1;//  (exact match)
            //echo "<br>$c";
            $word = $str1Array[$i];
            array_push($word_seq,$word);
        }
        else
        {
           if($lev != 0){

                  if($c>=2)
                    $plag_count+= count($word_seq);
             $current_seq = implode(" ", $word_seq);
             array_push($word_seq_history,$current_seq);
             echo $current_seq;
             $c=0;
             $word_seq= array();
           }
        }
}

echo "plag_count:";
echo $plag_count;
echo "max:";
echo $max;
echo "<br>" ;
echo ($plag_count/$max)*100;

?>

输出:

  

字符串1:“这是一个测试想法。”

     

字符串2:“这是一个实验性的想法。”

     

Words_Same:2 max:5

     抄袭:40%

我需要改变它还是它的方式很好?

2 个答案:

答案 0 :(得分:1)

我会以一种非常基本的方式检测抄袭,首先要校准我的系统:即首先与你确定没有感染的文件进行大量的比较

1)将一堆文件相互比较,用你的函数检测抄袭率。找出最常用的词(让我们说你的速率降到XX%,试验和错误在这里),把这个词放在你的数据库中,并给它们一个权重为0.这样做再次没有这个词直到(小于XX%)(使用正则表达式,你可以过滤这些单词),并给它们权重为1.依此类推......直到你的剽窃率几乎为零。

2)按总和计算'新'百分比(数据中出现在文本中的单词的重量)/(所有单词的总重量)(并给出数据库中尚未出现的单词)权重10)=你的比率

3)用放置的东西测试它,如果不行,改变一些参数(重量)

答案 1 :(得分:0)

我认为这种方法,如果用于检查较长的段落,将会显示出高水平的相关性,因为常见的词汇,特别是文章,介词,“be”动词和其他常见/过度使用的词。如果你正在撰写关于各种主题的文章,无论是代码还是莎士比亚,你都可能遇到许多真正独特的论文常见的行话集。我想你可能需要考虑另一种方法。你有没有研究抄袭及其检测?