Dalam bahasa Arab seperti dengan beberapa bahasa lain ada yang disebut diakritik untuk meningkatkan pengucapan. Tidak ada konvensi tentang berapa banyak diakritik harus ditulis untuk satu kata. Beberapa menggunakan minimum (yang saya sukai) hanya cukup untuk mengacaukan pengucapan, sedangkan beberapa menggunakannya secara berlebihan atau hanya untuk tujuan kaligrafi estetika. Dengan demikian, ada variasi yang luas tentang apa dan berapa banyak diakritik terkait dengan satu kata. Ketika saya lakukan isearch-forward/backward
dengan menekan C-s/r
, masalah muncul ketika saya mengetiknya di mini-buffer pencarian tanpa diakritik itu tidak akan cocok dengan kata yang sama dalam teks jika diakritik, membuat tugas mencari kata ini dengan potensi diakritik yang pernah tidak memuaskan.
Apakah ada cara untuk membuat pencarian / pencarian regexp tidak menyadari diakritik? Saya berharap akan ada jawaban yang dapat diperluas untuk memasukkan regexp C-M-s/r
dan grep
mencari yang saya gunakan cukup sering di helm-proyektil untuk mencari kata dalam proyek lateks multi-file.
Perbarui
Akan menyenangkan untuk melihat bahwa Emacs di semua fungsi pencariannya melakukan langkah pengupasan pada teks (dari aksen / diakritik / beri nama) sebelum mencocokkan langkah sebagai perilaku default yang mungkin dimatikan oleh awalan saat diminta tidak peduli apa bahasa yang ada. Biasanya, ketika saya mencari sesuatu yang saya tidak harapkan dari editor terbaik (Emacs) gagal dalam tugas ini hanya karena beberapa diakritik atau aksen yang jarang jika pernah diperlukan untuk menyelesaikan tugas-tugas teks biasa.
sumber
ucs-normalize-*
fungsi dilisp/international/ucs-normalize.el
. Tidak ada lipat pencarian yang telah ditentukan sebelumnya untuk mereka, seperti ada dengan lipat kasus, tetapi Anda setidaknya bisa menormalkan suatu wilayah sebelum mencarinya. Implementasi yang baik mungkin merupakan tugas yang cukup kompleks.php
diterapkan: stackoverflow.com/a/25563250/1288722 - juga diterapkan diJavascript
: stackoverflow.com/a/7193622/1288722helm-swoop
?Jawaban:
Inilah awal yang kasar, berdasarkan daftar penggabungan karakter dalam jawaban ini (dan kemudian diperluas). (Menandai ini sebagai wiki komunitas - harap edit dan perbaiki ini!)
Jadi jika buffer berisi "الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ", dan saya mengevaluasi
(arabic-search-without-diacritics "الحمد لله رب العالمين")
, ia menemukan teks. Ini juga berfungsi secara interaktif, sepertiM-x arabic-search-without-diacritics
.Pendekatan alternatif:
Berikut adalah contoh kode lengkap yang menunjukkan bagaimana tanda diakritik dan nonspacing lainnya (
Mn
properti) dapat dihilangkan dari string yang dinormalisasi dalam kecocokan regexp. Ini bekerja dengan contoh-contoh yang diberikan dan IMO adalah pendekatan yang tepat.sumber
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1648
- bebas biaya untuk memperbarui.arabic-search-without-diacritics
baik tetapi rusak dengan beberapa kata, saya tidak tahu mengapa seperti iniالأَ
. Peringatan lain, saya selalu mengatur-input-metode ke arab ketika saya memasukkan string saya di mini-buffer, sementara dalamisearch-forward/backward
fungsi itu tetap ada.kill-marks
adalah pendekatan yang lebih baik untuk menyediakan teks tanpa repot yang siap untuk semua jenis pencarian. Apa yang tidak jelas bagi saya adalah bagaimana mengimplementasikannya pada buffer keseluruhan dan kemudian pada multifile?isearch-forward/backward
menyorot semua kejadian dan yang saat ini berbeda dan dengan memohons
akan bergerak maju danr
mundur?