Saya telah membuat implementasi DIFF untuk membandingkan revisi dokumen di tempat kerja. Ini didasarkan pada Al Perbedaan (O) ND Algoritma dan Variasi-nya .
Satu hal yang menjadi penting adalah mengambil daftar perubahan dan menafsirkannya menjadi teks yang dapat dibaca manusia. Meskipun algoritma saat ini sangat efisien, sangat banyak sehingga sulit untuk diperluas.
Pertanyaan pendek
Saya sedang berpikir tentang mencoba menggunakan A * dan heuristik yang menambah hukuman untuk "berubah". Gagasannya adalah untuk melicinkan yang tidak perlu, "tambah, hapus, tambah, hapus, tambah, hapus" sehingga lebih mudah untuk menguraikan sesuatu yang bisa dibaca manusia. Pada dasarnya, ubah masalah jalur terpendek saya menjadi masalah jalur paling sederhana .
Dan tentu saja tidak membuat output yang selalu "Hapus semuanya , Tambah semuanya "
Apakah ini masuk akal?
Apakah ada prioritas untuk menggunakan heuristik dalam implementasi DIFF? Apa heuristiknya?
Masalah:
Jika kalimat panjang dihapus dan kalimat panjang lain dihapus, tetapi mereka berbagi setidaknya satu kata, ucapkan "dengan". Meninggalkan kata umum saja (dengan tidak menambahkan dan menghapusnya) akan membuat jalur terpendek. Namun, ini benar-benar hanya mengaburkan konteks perubahan ke manusia yang mencoba membaca cetakan dari perubahan.
Contoh dengan DIFF saat ini:
- Teks lama: Bersihkan: Cuci bersih dan keringkan dengan udara toko.
- Teks baru: Bersihkan: Bersihkan dengan aseton dan kain bebas serat.
- Ubah Daftar Catatan:
- Ubah "Powerwash dan blow dry" menjadi "Wipe with acetone"
- Ubah "air shop" menjadi "aseton dan kain bebas serat"
Catatan: "Ubah" digunakan sebagai ganti "hapus 'udara toko', tambahkan 'aseton'"
Seperti yang Anda lihat, not kedua kehilangan SEMUA konteks dan tanpa masih melihat set teks penuh lama dan baru Anda tidak bisa mengerti apa artinya.
Catatan tentang Tanda Baca:
Saya telah membatasi tanda baca sebagai "kata-kata" yang terpisah sehingga saya akan mendapatkannya
- Menambahkan "("
dari pada
- Ubah "Perbaikan" menjadi "(Perbaikan"
karena ini menjengkelkan. Namun, itu berarti bahwa jika bahkan ada koma di kedua teks (sebagai lawan dari kata "dengan" pada contoh sebelumnya) hal yang sama terjadi.
Kemungkinan Solusi:
Saya pikir saya bisa menggunakan algoritma pencarian jalur yang berbeda sebagai gantinya yang dapat memberi saya fleksibilitas untuk menambah bobot pada "jalur" perubahan yang berbeda yang mungkin lebih masuk akal bagi seseorang. Mungkin, saya bahkan bisa melakukan perjalanan ke node yang memiliki tanda baca sedikit berat (tidak yakin bagaimana ini akan mempengaruhi hal-hal lain).
Maka saya bisa mendapatkan contoh sebelumnya ke daftar berikut ini:
- Ubah Daftar Catatan:
- Ubah "Powerwash dan keringkan dengan udara toko" menjadi "Bersihkan dengan aseton dan kain bebas serat"
Lihat! Jauh lebih jelas!
Saya tahu saya akan mendapat pukulan kinerja, dan saya mungkin harus melakukan perombakan besar-besaran terhadap program saya, tetapi yang lebih penting adalah mendapatkan hasil akhir yang saya inginkan.
Intinya:
Sekali lagi, apakah ada prioritas untuk menggunakan heuristik dalam implementasi DIFF, dan apa itu?
Pikiran lain? Investasi waktu yang masuk akal? Ide lain? Algoritma lainnya?
Terima kasih sebelumnya!
EDIT:
Saya mencoba untuk memperjelas / memantapkan pertanyaan saya dan menggeneralisasi pertanyaan saya untuk menambahkan heuristik ke algoritma saya, daripada menggunakan A *. Pada dasarnya hal yang sama dalam hal ini, tetapi saya masih berpikir lebih akurat sekarang. Posting ini berwawasan luas.
sumber