Saya mencoba mendeteksi apakah artikel atau posting forum adalah entri duplikat dalam database. Saya telah memikirkan hal ini, sampai pada kesimpulan bahwa seseorang yang menduplikasi konten akan melakukannya menggunakan salah satu dari ketiganya (dalam penurunan yang sulit dideteksi):
- salin sederhana tempelkan seluruh teks
- salin dan tempel bagian-bagian teks yang digabungkan dengan miliknya
- menyalin artikel dari situs eksternal dan menyamar sebagai milik mereka
Mempersiapkan Teks Untuk Analisis
Pada dasarnya ada anomali; tujuannya adalah membuat teks semurni mungkin. Untuk hasil yang lebih akurat, teks "standar" oleh:
- Stripping duplikat spasi putih dan pemangkasan depan dan belakang.
- Baris baru distandarisasi untuk \ n.
- Tag HTML dihapus.
- Menggunakan RegEx yang disebut Daring Fireball URL dilucuti.
- Saya menggunakan kode BB dalam aplikasi saya sehingga masuk ke.
- (ä) ccented dan asing (selain Enlgish) dikonversi ke bentuk non asing.
Saya menyimpan informasi tentang setiap artikel di (1) tabel statistik dan di (2) tabel kata kunci.
(1) Tabel Statistik Statistik berikut disimpan tentang konten tekstual (seperti posting ini)
- panjang teks
- jumlah surat
- jumlah kata
- jumlah kalimat
- kata rata-rata per kalimat
- indeks keterbacaan otomatis
- skor kabut gunning
Untuk bahasa Eropa, Coleman-Liau dan Automated Readability Index harus digunakan karena mereka tidak menggunakan penghitungan suku kata, sehingga harus menghasilkan skor yang cukup akurat.
(2) Tabel Kata Kunci
Kata kunci dihasilkan dengan mengecualikan daftar besar kata-kata berhenti (kata-kata umum), misalnya, 'the', 'a', 'of', 'to', dll, dll.
Contoh data
- text_length, 3963
- letter_count, 3052
- word_count, 684
- kalimat_kount, 33
- word_per_sentence, 21
- gunning_fog, 11.5
- auto_read_index, 9.9
- kata kunci 1, terbunuh
- kata kunci 2, petugas
- kata kunci 3, polisi
Perlu dicatat bahwa sekali artikel diperbarui, semua statistik di atas dibuat ulang dan bisa menjadi nilai yang sama sekali berbeda.
Bagaimana saya bisa menggunakan informasi di atas untuk mendeteksi jika artikel yang pertama kali diterbitkan, sudah ada dalam database?
Saya tahu apa pun yang saya desain tidak akan sempurna, risiko terbesar adalah (1) Konten yang bukan duplikat akan ditandai sebagai duplikat (2) Sistem memungkinkan konten duplikat masuk.
Jadi algoritma harus menghasilkan angka penilaian risiko dari 0 menjadi duplikat risiko 5 menjadi duplikat mungkin dan 10 menjadi duplikat. Apa pun di atas 5 maka ada kemungkinan bagus bahwa konten tersebut duplikat. Dalam hal ini, konten dapat ditandai dan ditautkan ke artikel yang merupakan duplikat yang mungkin dan manusia dapat memutuskan apakah akan menghapus atau mengizinkan.
Seperti yang saya katakan sebelumnya saya menyimpan kata kunci untuk seluruh artikel, namun saya bertanya-tanya apakah saya dapat melakukan hal yang sama berdasarkan paragraf; ini juga akan berarti lebih jauh memisahkan data saya di DB tetapi juga akan membuatnya lebih mudah untuk mendeteksi (2) di posting awal saya.
Saya sedang berpikir rata-rata tertimbang antara statistik, tetapi dalam urutan apa dan apa yang akan menjadi konsekuensi ...
sumber
Jawaban:
Ada banyak algoritma yang menangani kesamaan dokumen di NLP. Berikut makalah seminal yang menjelaskan berbagai algoritma. Wikipedia juga memiliki koleksi yang lebih besar. Saya mendukung ukuran Jaro Winkler dan telah menggunakannya untuk proyek sekolah pascasarjana dalam metode pengelompokan aglomeratif.
sumber
Lihatlah algborithm Rabin-Karp . Ini menggunakan hash bergulir agak seperti menggunakan rsync untuk meminimalkan byte yang dikirimkan selama sinkronisasi. Dengan menyesuaikan ukuran jendela yang Anda gunakan untuk hash, Anda dapat membuatnya lebih atau kurang sensitif. RK digunakan untuk, antara lain, deteksi plagiarisme, yang pada dasarnya mencari semacam dupes.
sumber
Langkah pertama yang dilakukan adalah mendeteksi kalimat (atau beberapa blok data masuk akal lainnya. Ambil blok tersebut dan hapus semua data mete, html spasi putih acak, pengembalian dll. Ambil MD5 hasil dan simpan dalam tabel. Anda bisa kemudian cocokkan dengan blok ini untuk mencoba menemukan kecocokan.
Jika ini tidak berhasil, Anda dapat mencoba n-gram. Di sini Anda membutuhkan satu entri dari setiap kata di halaman, tetapi harus dapat memberi Anda kecocokan yang cukup baik.
http://en.wikipedia.org/wiki/N-gram
sumber
Untuk matematika matematika yang tepat saya akan menyimpan hash dan kemudian membandingkannya.
Saya pikir sistem yang digunakan untuk ujian mengukur kelompok kata dan kemudian frekuensi kelompok dari setiap ukuran. Misalnya rantai 30 kata yang disalin akan mencetak 5 poin risiko dan 5 kejadian 10 rantai kata mencetak skor 5 poin. Maka Anda akan memiliki ambang batas 30 poin per 500 kata.
Benar-benar Anda membutuhkan algoritma semantik sehingga kata-kata seperti 'juga' dan 'dan' diuraikan sebagai sama.
sumber