Sto pensando di creare un'API che consentirebbe a un programma di inviare una "impronta digitale" di una pubblicazione accademica, confrontarla con un database di articoli di riviste Open Access e, se trovato, inviare all'utente le informazioni sulla citazione canonica. Inizialmente questo sarebbe per uno specifico campo di ricerca, quindi non avrebbe necessariamente bisogno di trattare 20 milioni di documenti per avere successo (anche se i 1000 articoli più citati nel campo fossero coperti, sarebbe un enorme vantaggio per la produttività e collaborazione).Migliore libreria per documento sfocato/impronta digitale di testo
Mi chiedo quale libreria (che è in grado di interfacciarsi con Ruby, idealmente) sarebbe la migliore per fare questo "fingerprinting". Ho visto la combinazione sfocata di Lucene, ma sembra funzionare a livello di parole, mentre in questo caso vorremmo probabilmente presentare un sottogruppo molto più grande del documento. La ragione per fare corrispondenze fuzzy è che alcune persone potrebbero avere una prestampa Word.doc, alcune potrebbero avere il PDF finale, ecc.
Ho davvero apprezzato alcune delle idee qui. Cercare su "hash percettivo" portarmi in un mucchio di nuovo materiale. Ho cercato di riassumere molti dei miei risultati here.
Sembra SimHash, ad esempio the C implementation sarebbe la strada da percorrere, ma ho ancora bisogno di sperimentare di più.
Questo è un post che potrebbe essere interessante: http://stackoverflow.com/questions/8544583/designing-a-noise-filter -for-plagiarism-detection-engine-in-ruby –
Un'alternativa alla fornitura di una libreria è quella di dettagliare un algoritmo, anche se dubito che sarebbe abbastanza veloce per farlo in puro Ruby. Un'idea menzionata da un amico era quella di usare una sorta di diff per vedere quanto "diverso" fosse il testo da ciascuno dei testi nel database. Con migliaia di testi nel database, questo potrebbe non essere scalabile, ma potremmo forse fare ricerche su alcune delle parole nel testo per ridurre rapidamente il set in modo che corrisponda a un numero gestibile. Ho provato diversi word-diff, ma non ne ho trovato uno che sputasse il numero di "differenze"/trasformazioni, ecc., Senza molte altre informazioni –