Sto cercando di rilevare se un articolo o un post sul forum è una voce duplicata all'interno del database. Ci ho pensato, arrivando alla conclusione che qualcuno che duplica il contenuto lo farà usando uno dei tre (in ordine decrescente difficile da rilevare):
- copia semplice incolla l'intero testo
- copia e incolla parti di testo fondendole con le loro
- copiare un articolo da un sito esterno e mascherarlo come proprio
Preparazione del testo per l'analisi
Fondamentalmente eventuali anomalie; l'obiettivo è rendere il testo il più "puro" possibile. Per risultati più accurati, il testo è "standardizzato" da:
- Strippaggio di spazi bianchi duplicati e rifilatura iniziale e finale.
- Le newline sono standardizzate a \ n.
- I tag HTML vengono rimossi.
- L'uso di un RegEx chiamato Daring Fireball URL viene rimosso.
- Uso il codice BB nella mia applicazione in modo che vada a.
- (ä) ccentati e stranieri (oltre a Enlgish) vengono convertiti nella loro forma non straniera.
Conservo le informazioni su ciascun articolo nella (1) tabella delle statistiche e nella (2) tabella delle parole chiave.
(1) Tabella delle statistiche Le seguenti statistiche sono memorizzate sul contenuto testuale (proprio come questo post)
- lunghezza del testo
- conteggio delle lettere
- conteggio parole
- conteggio delle frasi
- parole medie per frase
- indice di leggibilità automatizzato
- punteggio della nebbia di sparo
Per le lingue europee, Coleman-Liau e l'indice di leggibilità automatizzato dovrebbero essere utilizzati in quanto non usano il conteggio delle sillabe, quindi dovrebbero produrre un punteggio ragionevolmente accurato.
(2) Tabella delle parole chiave
Le parole chiave vengono generate escludendo un vasto elenco di parole di stop (parole comuni), ad esempio "the", "a", "of", "to", ecc. Ecc.
Dati di esempio
- text_length, 3963
- letter_count, 3052
- word_count, 684
- frase_conto, 33
- word_per_sentence, 21
- gunning_fog, 11.5
- auto_read_index, 9.9
- parola chiave 1, uccisa
- parola chiave 2, ufficiali
- parola chiave 3, polizia
Va notato che una volta che un articolo viene aggiornato, tutte le statistiche di cui sopra vengono rigenerate e potrebbero essere valori completamente diversi.
Come posso utilizzare le informazioni di cui sopra per rilevare se un articolo che viene pubblicato per la prima volta, è già esistente nel database?
Sono consapevole che tutto ciò che progetterò non sarà perfetto, il rischio maggiore è (1) Il contenuto che non è un duplicato verrà contrassegnato come duplicato (2) Il sistema consente il passaggio del contenuto duplicato.
Quindi l'algoritmo dovrebbe generare un numero di valutazione del rischio compreso tra 0 e nessun duplicato, il rischio 5 è possibile duplicato e 10 duplicato. Qualunque cosa sopra 5, allora c'è una buona possibilità che il contenuto sia duplicato. In questo caso il contenuto potrebbe essere contrassegnato e collegato agli articoli che sono possibili duplicati e un essere umano potrebbe decidere se eliminare o consentire.
Come ho detto prima sto memorizzando parole chiave per l'intero articolo, tuttavia mi chiedo se potrei fare lo stesso su base di paragrafo; questo significherebbe anche separare ulteriormente i miei dati nel DB, ma renderebbe anche più facile il rilevamento (2) nel mio post iniziale.
Sto pensando a una media ponderata tra le statistiche, ma in quale ordine e quali sarebbero le conseguenze ...