Domanda

Sto riscontrando un problema nello sviluppo della mia app Web, ecco la descrizione:

Questa webapp (ancora in versione alfa) si basa sul contenuto generato dall'utente (di solito articoli brevi sebbene la loro lunghezza possa diventare piuttosto grande, circa un quarto dello schermo), ogni utente invia almeno 10 di questi articoli, quindi il numero dovrebbe aumentare molto veloce. Per natura, circa il 10% degli articoli sarà duplicato, quindi ho bisogno di un algoritmo per recuperarli.

Ho escogitato i seguenti passaggi:

  1. Al momento dell'invio recupera una lunghezza di testo e memorizzalo in una tabella separata ( article_id , lunghezza), il problema è che gli articoli vengono codificati usando la funzione PHP special_entities () e gli utenti pubblicano contenuti con lievi modifiche (a qualcuno mancherà la virgola, l'accento o addirittura a saltare alcune parole)
  2. Quindi recuperare tutte le voci dal database con intervallo di lunghezza = new_post_length +/- 5% (dovrei usare un'altra soglia, tenendo presente quel fattore umano nella presentazione degli articoli?)
  3. Recupera le prime 3 parole chiave e confrontale con gli articoli recuperati nel passaggio 2
  4. Avere un array finale con le corrispondenze più probabili confronta la nuova voce usando la funzione levenstein () di PHP

Questo processo deve essere eseguito su presentazione dell'articolo, non usando cron. Tuttavia sospetto che creerà carichi pesanti sul server.

Potresti fornire qualche idea per favore?

Grazie! Mike

È stato utile?

Soluzione

La somiglianza del testo / plagiat / duplicate è un argomento importante. Ci sono così tanti algos e soluzioni.

Lenvenstein non funzionerà nel tuo caso. Puoi usarlo solo su piccoli testi (a causa della sua "complessità", ucciderebbe la tua CPU).

Alcuni progetti utilizzano l'allineamento locale adattivo delle parole chiave " (troverai informazioni al riguardo su google.)

Inoltre, puoi controllare questo (controlla i 3 link nella risposta, molto istruttivo):

Somiglianza del coseno vs distanza di Hamming

Spero che questo possa aiutare.

Altri suggerimenti

Vorrei sottolineare che git , il sistema di controllo della versione, ha algoritmi eccellenti per rilevare contenuti duplicati o quasi duplicati. Quando effettui un commit, ti mostrerà i file modificati (indipendentemente dalla ridenominazione) e quale percentuale è cambiata.

È open source e in gran parte scritto in piccoli programmi C focalizzati. Forse c'è qualcosa che potresti usare.

Puoi progettare la tua app in modo da ridurre il carico senza dover controllare le stringhe di testo e le parole chiave rispetto a tutti gli altri post nella stessa categoria. Che cosa succede se gli utenti inviano i contenuti di terze parti a cui fanno riferimento come URL? Vedi l'implementazione di Tumblr: fondamentalmente c'è un campo di testo in formato libero in modo che ogni utente possa commentare e creare la propria parte narrativa del contenuto del post, ma poi ci sono campi formattati anche in base al tipo di riferimento che l'utente sta aggiungendo (video, immagine, link, citazione, ecc.) Un miglioramento su Tumblr consentirebbe all'utente di aggiungere quanti / pochi tipi di contenuti formattati desidera in un determinato post.

Quindi stai solo confrontando tipi noti come un URL o un codice video incorporato. Combinalo con il suggerimento di rexem di costringere gli utenti a classificare per categoria o genere di qualche tipo e avrai un ambito molto più piccolo per cercare duplicati.

Inoltre, se puoi dare a ciascun utente un modo per pubblicare sul proprio " stream " quindi non importa se molte persone duplicano lo stesso contenuto. Offri alle persone un modo per votare dai singoli stream a una "pagina principale" principale flusso di livello in modo che la comunità possa regolare quando vedono elementi duplicati. Invece di votare su / giù come Digg o Reddit, potresti aggiungere un modo per le persone di unire / aggiungere post ai post correlati (consentendo loro di ordinare e gestire il contenuto come attività sulla tua app piuttosto che renderlo un problema di elaborazione scene).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top