Rilevare il plagio - quale algoritmo?

6

Attualmente sto scrivendo un programma per leggere un corpo di testo e confrontarlo con i risultati dei motori di ricerca (dalla ricerca di sottostringhe del testo dato), con l'obiettivo di individuare il plagio in, per esempio, documenti accademici.

Le due stringhe confrontate sono la carta originale e il testo in chiaro della pagina Web (restituita da Floki.text/2 eseguito sulla <body> della pagina). In entrambi i casi, tutta la punteggiatura e la formattazione sono state rimosse e sostituite da spazi.

Non sono sicuro di quale tipo di algoritmo di modifica della distanza utilizzare per questo. Ho esaminato tutti quelli elencati su Wikipedia , e ...

  • La distanza di Levenshtein (e Damerau-Levenshtein) sembra che (loro) avrebbero problemi a rilevare per es. alcune frasi rubate nel mezzo di un altro foglio distinto.
  • La più lunga conseguenza comune può (potrebbe?) essere sventata da una leggera riformulazione delle parole a basso significato ("una cosa" contro "la cosa").
  • La distanza di Hamming è completamente incompatibile poiché i due testi probabilmente non saranno esattamente della stessa lunghezza a meno che qualcuno non copi l'intera cosa.
  • Jaro e Jaro-Winkler sono per le stringhe brevi - il modo in cui appare solo in una certa prossimità della posizione non funziona quando potresti avere una frase da una carta ritagliata e inserita all'inizio dell'altra.
posta David Heyman 16.03.2017 - 04:03
fonte

2 risposte

2

Questa è in qualche modo una risposta XY, ma dato che hai iniziato con

read a body of text and compare it to search-engine results (from searching for substrings of the given text), with the goal of detecting plagiarism in, for example, academic papers.

Sembra che la ricerca del testo stessa sia una buona risposta pratica al tuo problema. Il modo di base per individuare i plagi sarebbe il seguente:

  1. Inizia con un corpus di documenti che il documento di destinazione avrebbe potuto essere plagiato.
  2. Crea, ad esempio, un indice invertito basato su Lucene su tali documenti (ad esempio Solr o Elasticsearch).
  3. Dividi il documento di destinazione in una serie di frasi (ad es. interrompendo ogni frase / frase secondaria / ogni n parole).
  4. Cerca il tuo corpus per ogni frase. Restituirai un (forse) vuoto insieme di documenti che quella frase potrebbe essere stata plagiata da (e la (e) posizione (i) in ciascun documento da cui è stata probabilmente presa).
  5. Raccogli tutti questi potenziali esempi di plagio. Se questo supera più di una piccola soglia di frasi, allarma l'obiettivo come probabilmente plagiato.

Questo approccio presenta diversi vantaggi rispetto al tentativo di diff stringhe:

  1. Ti consente di individuare esattamente ciò che nel documento di destinazione potrebbe essere stato plagiato e da dove potrebbe provenire. Ciò consentirà agli utenti di rivedere l'output per avere visibilità e prendere decisioni intelligenti sull'output.
  2. Una buona soluzione di indicizzazione ti consentirà di aggirare errori di ortografia e diverse parole di stop / piccole differenze nel fraseggio.
  3. Una buona soluzione di indicizzazione scalerà molto bene.
  4. Avere un corpus autogestito si comporterà molto meglio della ricerca su Internet. Internet è un luogo così selvaggio e indisciplinato che è probabile che si ottengano partite spurie e si perdano partite importanti. Cioè, Google potrebbe catturare gli studenti che copiano da Wikipedia, ma è anche suscettibile di accusare falsamente le persone di copiare da blog casuali se non sei molto, molto attento. È anche probabile che manchino cose come i documenti ArXiv sul campo, saggi che gli studenti possono acquistare da siti web ombrosi, saggi passati scritti da altri studenti, che sono fonti di plagio molto realistiche.

Se pensi a Turn-it-in, il loro approccio deve essere simile a questo come loro

  1. Dirti dove il saggio potrebbe essere stato plagiato
  2. Può includere documenti precedenti / non wiki e amp; co. sourcing.

Il valore che può essere aggiunto a Turn-it-in e simili semplicemente impostando tu stesso un sistema come questo (che onestamente non sarebbe troppo difficile) è

  1. Dimensioni e qualità del loro corpus di riferimento
  2. Tempo di sviluppo della loro interfaccia utente
  3. Ottimizzazione dell'indicizzazione e della ricerca
  4. Sofisticazione nel modo in cui determinano le frasi e le loro soglie per probabile plagio.
risposta data 16.03.2017 - 05:26
fonte
2

L'intenzione è di confrontare il corpo del testo con i risultati dei motori di ricerca per rilevare il plagio.

Sfortunatamente gli algoritmi che consideri funzionano a livello di personaggio. Sono dispendiosi in termini di tempo con testi più lunghi e non sono adatti per rilevare blocchi di testo o paragrafi invertiti.

Perché non optare per un approccio a parole: si crea un elenco ordinato di parole uniche nel testo e nei risultati della ricerca e si cerca la similarità (proporzione di parole comuni). Questo può essere molto efficiente. Se la somiglianza supera una certa quota, puoi fare un confronto più dispendioso in termini di tempo, indipendentemente dal fatto che tu usi algoritmi a livello di personaggio o se usi algoritmi simili usando una stringa di parole invece di singoli caratteri

    
risposta data 18.03.2017 - 18:06
fonte

Leggi altre domande sui tag