Saya ingin membandingkan beberapa string satu sama lain, dan menemukan string yang paling mirip. Saya bertanya-tanya apakah ada pustaka, metode, atau praktik terbaik yang akan mengembalikan saya string mana yang lebih mirip dengan string lain. Sebagai contoh:
- "Rubah cepat melompat" -> "Rubah melompat"
- "Rubah cepat melompat" -> "Rubah"
Perbandingan ini akan mengembalikan bahwa yang pertama lebih mirip daripada yang kedua.
Saya rasa saya membutuhkan beberapa metode seperti:
double similarityIndex(String s1, String s2)
Apakah ada hal seperti itu di suatu tempat?
EDIT: Mengapa saya melakukan ini? Saya menulis skrip yang membandingkan output dari file MS Project dengan output dari beberapa sistem warisan yang menangani tugas. Karena sistem lama memiliki lebar bidang yang sangat terbatas, saat nilai ditambahkan, deskripsinya disingkat. Saya ingin beberapa cara semi-otomatis untuk menemukan entri mana dari MS Project yang mirip dengan entri pada sistem sehingga saya bisa mendapatkan kunci yang dihasilkan. Ini memiliki kekurangan, karena masih harus diperiksa secara manual, tetapi akan menghemat banyak pekerjaan
sumber
Cara umum untuk menghitung kemiripan antara dua string dengan cara 0% -100% , seperti yang digunakan di banyak pustaka, adalah mengukur berapa banyak (dalam%) Anda harus mengubah string yang lebih panjang untuk mengubahnya menjadi lebih pendek:
Menghitung
editDistance()
:The
editDistance()
fungsi di atas diharapkan untuk menghitung mengedit jarak antara dua string. Ada beberapa implementasi untuk langkah ini, masing-masing mungkin lebih sesuai dengan skenario tertentu. Yang paling umum adalah algoritma jarak Levenshtein dan kami akan menggunakannya dalam contoh di bawah ini (untuk string yang sangat besar, algoritma lain cenderung berkinerja lebih baik).Berikut dua opsi untuk menghitung jarak edit:
apply(CharSequence left, CharSequence rightt)
Contoh kerja:
Lihat demo online di sini.
Keluaran:
sumber
org.apache.commons.lang3.StringUtils
.Saya menerjemahkan algoritma jarak Levenshtein ke dalam JavaScript:
sumber
Anda dapat menggunakan jarak Levenshtein untuk menghitung perbedaan antara dua string. http://en.wikipedia.org/wiki/Levenshtein_distance
sumber
Memang ada banyak ukuran kesamaan string di luar sana:
Anda dapat menemukan penjelasan dan implementasi java di sini: https://github.com/tdebatty/java-string-similarity
sumber
Anda dapat melakukannya dengan menggunakan java library apache commons . Lihatlah dua fungsi ini di dalamnya:
- getLevenshteinDistance
- getFuzzyDistance
sumber
Secara teoritis, Anda dapat membandingkan jarak edit .
sumber
Ini biasanya dilakukan dengan menggunakan pengukur jarak edit . Pencarian untuk "edit jarak java" menghasilkan sejumlah perpustakaan, seperti ini .
sumber
Kedengarannya seperti pencari plagiarisme bagi saya jika string Anda berubah menjadi dokumen. Mungkin penelusuran dengan istilah itu akan menghasilkan sesuatu yang bagus.
"Programming Collective Intelligence" memiliki bab tentang menentukan apakah dua dokumen serupa. Kodenya menggunakan Python, tetapi bersih dan mudah dipindahkan.
sumber
Terima kasih kepada penjawab pertama, menurut saya ada 2 perhitungan computeEditDistance (s1, s2). Karena menghabiskan waktu yang tinggi, memutuskan untuk meningkatkan kinerja kode. Begitu:
sumber
Anda juga dapat menggunakan algoritma z untuk menemukan kesamaan dalam string. Klik di sini https://teakrunch.com/2020/05/09/string-similarity-hackerrank-challenge/
sumber