Nasıl bir anti intihal siteyi kod istiyorsunuz?

5 Cevap php

Öncelikle, ben böyle bir şey işe nasıl ilgileniyorum, ve ben zaten açık kaynak uygulamaları olabileceğinden eminim gibi, bir istemci vb için inşa etmek niyetinde değilim, lütfen unutmayın.

Nasıl algoritmalar yüklenen metinde intihal tespit hangi çalışır? Etc '', 'a' gibi bilinen kelimeleri şerit, bir dizin için tüm kelimeleri göndermek için regex kullanabilirsiniz ve daha sonra kaç kelime farklı denemelerde aynı görüyor mu? Onları yinelenen bir sürede bayrak özdeş kelime sihirli bir sayı var mı? Kullanmak mı levenshtein()?

Seçim benim dili PHP.

UPDATE

Ben küresel intihal kontrol değil düşünüyor, ama daha bir sınıf 30 tarih denemelerinde diyeceğim. Durumda öğrenciler kesinlikle bir kişi atama birlikte aldık.

İşte bunu yapmak için iddia bir online sitesi: http://www.plagiarism.org/

5 Cevap

İyi intihal tespit belge türü (örneğin belirli bir dilde bir kompozisyon veya program kodu) dayalı sezgisellerin uygulanacaktır.

Ancak, aynı zamanda genel bir çözüm uygulayabilirsiniz. Normalized Compression Distance (bulaşıcı olmayan hastalıklar) bakabilirsiniz. Açıkçası tam bir metnin Kolmogorov complexity hesaplamak değil, ama bunu sadece metni basıladığı yaklaşım olabilir.

A smaller NCD indicates that two texts are more similar. Some compression algorithms will give better results than others. Luckily PHP provides support for several compression algorithms, so you can have your NCD-driven plagiarism detection code running in no-time. Below I'll give example code which uses Zlib:

PHP:

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'));

Python:

>>> 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

Note that for larger texts (read: actual files) the results will be much more pronounced. Give it a try and report your experiences!

I think that this problem is complicated, and doesn't have one best solution. You can detect exact duplication of words at the whole document level (ie someone downloads an entire essay from the web) all the way down to the phrase level. Doing this at the document level is pretty easy - the most trivial solution would take the checksum of each document submitted and compare it against a list of checksums of known documents. After that you could try to detect plagiarism of ideas, or find sentences that were copied directly then changed slightly in order to throw off software like this.

Herhangi bir etkinlik düzeyini isterseniz daha sofistike almak gerekebilir ifade düzeyde çalışan bir şey almak için. Örneğin, paragraflar arasında yazılı tarzı farklılıkları bakmak olabilir, ve bir kağıt geri kalanına kıyasla "yersiz" hissetmek paragraflar için ilgi odağı.

Orada bu konuda gazetelerde çok, bu yüzden henüz kimse mükemmel bir çözüm yoktur sanıyorum. Örneğin, bu 2 kağıtları Bu tür bir yazılım ile genel konularda bazı tanıtımları vermek, ve eğer isterseniz size daha derine kazmak olabilir referanslar bol var.

http://ir.shef.ac.uk/cloughie/papers/pas_plagiarism.pdf

http://proceedings.informingscience.org/InSITE2007/IISITv4p601-614Dreh383.pdf

It really depends on "plagarised from where". If you are talking about within the context of a single site, that's vastly different from across the web, or the library of congres, or ...

http://www.copyscape.com/ hemen hemen yapılabilir kanıtlıyor.

Temel kavram gibi görünüyor

  • do a google search for some uncommon word sequences
  • Her bir sonuç için, ayrıntılı bir analiz yapmak

Detaylı analiz bölümü kesinlikle bir 1-1 karşılaştırma olduğundan, benzer olabilir, ancak kaynak belgeleri bulma ve elde anahtar faktör olabilir.

Eh, her şeyden önce size karşı konum anlamak zorundayız.

Kelime-kelime intihal nokta gülünç kolay olmalıdır. En naif yaklaşım yeterli uzunlukta kelime dizilerini almak ve korpus karşı bunları karşılaştırmak olacaktır. Yeterli uzunlukta inanılmaz düşük olabilir. Google, arama sonuçlarını karşılaştırın:

"I think" => 454,000,000
"I think this" => 329,000,000
"I think this is" => 227,000,000
"I think this is plagiarism" => 5

Bu yüzden bile bu yaklaşım ile iyi bir maç ya da iki (: en suçlular gerçekten aptal eğlenceli bir gerçektir) bulmak için çok yüksek bir şans var.

Taklit eş anlamlı kullanıldığı takdirde, kelime sıralama değişti ve böylece, belli ki biraz daha zor olur. Siz de eş depolamak ve aynı yaklaşım çalışmasını sağlayacak gramer yapısı biraz normalleştirmek için denemek gerekir. Aynı yazım için de geçerli, tabii (yani normalleşme ile eşleşen deneyin ya da eşleştirme sapmalar hesaba deneyin, bulaşıcı olmayan hastalıklar gibi diğer yanıtlar yayınlanmıştır yaklaşımları).

Ancak en büyük sorun, kavramsal intihal olduğunu. Bu gerçekten zor ve her cümle (yani yeterince karmaşık AI) semantik ayrıştırma olmadan belirgin bir çözümleri vardır.

Gerçek şu ki, sadece maçın BAZI tür bulmak gerektiğini, olsa,. Eğer korpus alakalı bir metin bulmak için tam bir eşleşme bulmak gerekmez. Nihai değerlendirme her zaman zaten bir insan tarafından yapılmalıdır, böylece bir hatalı eşleşme bulursanız tamam.

Sahteciler çoğunlukla aptal ve tembel, bu yüzden onların kopyaları da, aptal ve tembel olur. Bazıları işin içine çaba inanılmaz miktarda koymak, ancak bu eserler ilk etapta genellikle non-açık intihal, bu yüzden yani (programlı izini zor bir insan hem metinlerle intihal tanıma sorun varsa sunulan yan tarafında , bir bilgisayar büyük olasılıkla irade, çok). Tüm diğer% 80-ya-so, dilsiz yaklaşım yeterince iyi.

For better results on not-so-big strings:

Dizeleri veya küçük metinler NCD formül doğrudan USO ile sorunlar vardır. Bulaşıcı olmayan hastalıklar (X, X) sıfır değil (!). Bu eserdir kendini karşılaştırma çıkarmak kaldırmak için.

http://leis.saocarlos.sp.gov.br/SIMILAR.php at similar_NCD_gzip () demoyu izleyin

function similar_NCD_gzip($sx, $sy, $prec=0, $MAXLEN=90000) {
# NCD with gzip artifact correctoin and percentual return.
# sx,sy = strings to compare. 
# Use $prec=-1 for result range [0-1], $pres=0 for percentual,
#     $pres=1 or =2,3... for better precision (not a reliable)  
# Use MAXLEN=-1 or a aprox. compress lenght. 
# For NCD definition see http://arxiv.org/abs/0809.2553
# (c) Krauss (2010).
  $x = $min = strlen(gzcompress($sx));
  $y = $max = strlen(gzcompress($sy));
  $xy= strlen(gzcompress($sx.$sy));
  $a = $sx;
  if ($x>$y) { # swap min/max
    $min = $y;
    $max = $x;
    $a = $sy;
  }
  $res = ($xy-$min)/$max; # NCD definition.

  # Optional correction (for little strings):
  if ($MAXLEN<0 || $xy<$MAXLEN) {
    $aa= strlen(gzcompress($a.$a));
    $ref = ($aa-$min)/$min;
    $res = $res - $ref; # correction
  }
  return ($prec<0)? $res: 100*round($res,2+$prec);
}