2009-07-05 17 views
21

सबसे पहले, कृपया ध्यान दें, मुझे इस बात की दिलचस्पी है कि इस तरह कुछ ऐसा कैसे काम करेगा, और मैं इसे क्लाइंट आदि के निर्माण के इरादे से नहीं चाहता हूं, क्योंकि मुझे यकीन है कि पहले से ही खुले स्रोत कार्यान्वयन हो सकते हैं।आप एंटी चोरी चोरी साइट कैसे कोड करेंगे?

एल्गोरिदम कैसे काम करते हैं जो अपलोड किए गए पाठ में साहित्य चोरी का पता लगाते हैं? क्या यह सभी शब्दों को इंडेक्स में भेजने के लिए रेगेक्स का उपयोग करता है, ज्ञात शब्दों जैसे 'द', 'ए' इत्यादि को छोड़ देता है और फिर विभिन्न निबंधों में कितने शब्द समान होते हैं? क्या उनके पास समान शब्दों की एक जादू संख्या है जो इसे संभावित डुप्लिकेट के रूप में चिह्नित करती है? क्या यह levenshtein() का उपयोग करता है?

पसंद का मेरी भाषा PHP है।

अद्यतन

मैं साहित्यिक चोरी विश्व स्तर पर के लिए जाँच नहीं की सोच रहा हूँ, लेकिन एक वर्ग से 30 अपलोड निबंध में और अधिक कहते हैं। यदि छात्रों को एक सख्ती से एक व्यक्ति असाइनमेंट पर मिल गया है। http://www.plagiarism.org/

उत्तर

30

अच्छा साहित्यिक चोरी का पता लगाने दस्तावेज़ के प्रकार (किसी विशिष्ट भाषा में जैसे एक निबंध या प्रोग्राम कोड) पर आधारित heuristics लागू होगी।

हालांकि, अगर आप भी एक सामान्य समाधान लागू कर सकते हैं। Normalized Compression Distance (एनसीडी) पर एक नज़र डालें। जाहिर है आप वास्तव में किसी पाठ के Kolmogorov complexity की गणना नहीं कर सकते हैं, लेकिन आप इसे आसानी से टेक्स्ट को संपीड़ित कर सकते हैं।

एक छोटा एनसीडी इंगित करता है कि दो ग्रंथ अधिक समान हैं। कुछ संपीड़न एल्गोरिदम दूसरों की तुलना में बेहतर परिणाम देगा। सौभाग्य से PHP several संपीड़न एल्गोरिदम के लिए समर्थन प्रदान करता है, ताकि आप अपने एनसीडी संचालित चोरी साहित्य पहचान कोड को किसी भी समय चल रहे हों। नीचे मैं उदाहरण कोड देंगे, जो 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 

नोट है कि बड़े ग्रंथों के लिए (पढ़ें: वास्तविक फ़ाइलें) परिणाम बहुत हो जाएगा अधिक उच्चारण। इसे आज़माएं और अपने अनुभवों की रिपोर्ट करें!

+1

+1। मैंने बहुत समय पहले सूचना सामग्री को मापने के लिए संपीड़न का उपयोग किया था, लेकिन आपकी पोस्ट ने इस दिलचस्प विचार को वापस लाया। –

+0

तथ्य यह है कि दो समान फाइलें निम्न मान (0.03, 0.10) दे सकती हैं लेकिन आकार (0.9 9) के आधार पर उच्च मान भी बहुत प्रासंगिक हैं। मैं पूरी तरह से इस पर भरोसा नहीं करता। – Chaotic

4

यह वास्तव में पर निर्भर करता है "जहाँ से plagarised":

यहाँ एक ऑनलाइन साइट ऐसा करने के लिए दावा है कि है। यदि आप किसी भी साइट के संदर्भ में बात कर रहे हैं, तो यह वेब से काफी अलग है, या congres की लाइब्रेरी, या ...

http://www.copyscape.com/ काफी साबित होता है कि यह किया जा सकता है।

बुनियादी अवधारणा

  • हो कुछ असामान्य शब्द दृश्यों
  • प्रत्येक परिणाम के लिए के लिए एक Google खोज करते हैं, एक विस्तृत विश्लेषण

विस्तृत विश्लेषण भाग निश्चित रूप से समान हो सकता है ऐसा करने के लिए लगता है , क्योंकि यह 1 से 1 तुलना है, लेकिन स्रोत दस्तावेजों का पता लगाना और प्राप्त करना महत्वपूर्ण कारक है।

+3

Google का उपयोग कर बहुत स्मार्ट। मैं समय-समय पर ऐसा करता हूं जब मुझे एक स्रोत दस्तावेज़ का पता लगाने की आवश्यकता होती है और मेरे पास एक वाक्य या दो है। – Sampson

+0

@ जोनाथन - वही, या जब मेरे पास गीत के कुछ गीत हैं और कलाकार या शीर्षक को याद नहीं कर सकते हैं। @Roger - क्या Google परिणाम कानूनी और/या नैतिकता को स्क्रैप कर रहा है? क्या कोई बेहतर तरीका है? – alex

+1

यदि आप इसे "पेशेवर" आधार पर कर रहे थे, तो आप देव एप्लिकेशन टोकन आदि के लिए साइन अप कर सकते हैं और उनके द्वारा प्रदान किए गए एपीआई का उपयोग कर सकते हैं। प्रारंभ करने के लिए काफी उदार शर्तें। –

5

मुझे लगता है कि यह समस्या जटिल है, और इसका कोई समाधान नहीं है। आप पूरे दस्तावेज़ स्तर पर शब्दों के सटीक प्रतिलिपि का पता लगा सकते हैं (यानी कोई व्यक्ति वेब से एक संपूर्ण निबंध डाउनलोड करता है) वाक्यांश स्तर तक नीचे तक। दस्तावेज़ स्तर पर ऐसा करना बहुत आसान है - सबसे छोटा समाधान प्रत्येक दस्तावेज़ के चेकसम को प्रस्तुत करेगा और ज्ञात दस्तावेजों के चेकसम की सूची के विरुद्ध इसकी तुलना करेगा। इसके बाद आप विचारों की चोरी का पता लगाने की कोशिश कर सकते हैं, या ऐसे वाक्यांशों को ढूंढ सकते हैं जिन्हें सीधे कॉपी किया गया था, इस तरह सॉफ़्टवेयर को फेंकने के लिए थोड़ा बदल दिया।

वाक्यांश स्तर पर काम करने वाली कुछ चीज़ों को प्राप्त करने के लिए आपको किसी भी स्तर की दक्षता के लिए अधिक परिष्कृत होने की आवश्यकता हो सकती है। उदाहरण के लिए, आप पैराग्राफ के बीच लेखन की शैली में मतभेदों को देख सकते हैं, और पेपर के बाकी हिस्सों की तुलना में "जगह से बाहर" महसूस करने वाले अनुच्छेदों पर अपना ध्यान केंद्रित कर सकते हैं।

इस विषय पर बहुत से कागजात हैं, इसलिए मुझे संदेह है कि अभी तक कोई भी सही समाधान नहीं है। उदाहरण के लिए, ये 2 पेपर इस तरह के सॉफ़्टवेयर के साथ कुछ सामान्य मुद्दों के लिए परिचय देते हैं, और आपके पास बहुत सारे संदर्भ हैं जिन्हें आप चाहें तो गहराई से खोद सकते हैं।

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

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

+0

लिंक पीटर के लिए धन्यवाद - +1 – alex

4

नहीं-तो-बड़े तारों पर बेहतर परिणामों के लिए:

तार या छोटे ग्रंथों पर एनसीडी सूत्र के प्रत्यक्ष uso के साथ समस्याओं कर रहे हैं। एनसीडी (एक्स, एक्स) शून्य नहीं है (!)। इस आर्टिफैक्ट को हटाने के लिए स्वयं तुलना घटाएं।

similar_NCD_gzip सी() डेमो http://leis.saocarlos.sp.gov.br/SIMILAR.php

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); 
} 
3

खैर, आप सब से पहले समझने के लिए आप क्या कर रहे हैं के खिलाफ है।

शब्द-के-शब्द चोरी साहित्य को हास्यास्पद रूप से आसान होना चाहिए। सबसे बेवकूफ दृष्टिकोण पर्याप्त लंबाई के शब्द tuples लेना होगा और उन्हें अपने कॉर्पस के खिलाफ तुलना करना होगा। पर्याप्त लंबाई अविश्वसनीय रूप से कम हो सकती है। गूगल परिणाम की तुलना करें:

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

ताकि दृष्टिकोण के साथ भी आप एक बहुत ही उच्च एक अच्छा मैच या दो खोजने के लिए मौका है (मज़ेदार तथ्य: सबसे अपराधियों वास्तव में गूंगा कर रहे हैं)।

यदि चोरीकर्ता समानार्थी शब्द का उपयोग करता है, शब्द क्रम बदलता है और इसी तरह, जाहिर है कि यह थोड़ा और मुश्किल हो जाता है। आपको समानार्थी को भी स्टोर करना होगा और समान दृष्टिकोण को काम करने के लिए व्याकरण संरचना को सामान्यीकृत करने का प्रयास करना होगा। यह वर्तनी के लिए भी जाता है, निश्चित रूप से (यानी सामान्यीकरण से मिलान करने का प्रयास करें या अपने मिलान में विचलन के लिए खाते की कोशिश करें, जैसा कि एनसीडी दृष्टिकोण अन्य उत्तरों में पोस्ट किया गया है)।

हालांकि सबसे बड़ी समस्या वैचारिक चोरी है। यह वास्तव में कठिन है और प्रत्येक वाक्य के अर्थशास्त्र को विश्लेषण किए बिना कोई स्पष्ट समाधान नहीं है (यानी पर्याप्त जटिल एआई)।

सच यह है कि आपको केवल कुछ प्रकार का मिलान ढूंढना होगा। आपके कॉर्पस में प्रासंगिक टेक्स्ट खोजने के लिए आपको सटीक मिलान खोजने की आवश्यकता नहीं है। अंतिम मूल्यांकन हमेशा किसी मानव द्वारा किया जाना चाहिए, इसलिए यदि आप एक अचूक मैच पाते हैं तो यह ठीक है।

साहित्यिक ज्यादातर बेवकूफ और आलसी हैं, इसलिए उनकी प्रतियां बेवकूफ और आलसी भी होंगी।कुछ ने अपने काम में अविश्वसनीय प्रयास किए हैं, लेकिन उन कार्यों को अक्सर पहले स्थान पर गैर-स्पष्ट साहित्यिकता होती है, इसलिए प्रोग्रामेटिक रूप से ट्रैक करना मुश्किल होता है (यानी यदि किसी व्यक्ति को साइड-बाय-साइड दोनों ग्रंथों के साथ साहित्य चोरी को पहचानने में परेशानी होती है , एक कंप्यूटर भी सबसे अधिक संभावना है)। अन्य सभी 80% के लिए-तो, गूंगा दृष्टिकोण काफी अच्छा है।

संबंधित मुद्दे