В арабском, как и в некоторых других языках, есть диакритические знаки для улучшения произношения. Не существует соглашения о том, сколько диакритических знаков должно быть написано для одного слова. Некоторые используют минимум (который я предпочитаю) как раз достаточно для устранения неоднозначности произношения, тогда как другие используют их излишне или просто для эстетических каллиграфических целей. Таким образом, существует широкий разброс того, что и сколько диакритических знаков связано с одним словом. Когда я isearch-forward/backward
нажимаю C-s/r
, возникает проблема, когда я набираю его в мини-буфере поиска без диакритических знаков, оно не будет совпадать с тем же словом в тексте, если у него есть диакритические знаки, что делает задачу поиска этого слова с его потенциальными диакритическими знаками когда-либо неудовлетворительной.
Есть ли способ сделать поиск / регулярное выражение поиска, не зная диакритические знаки? Я надеюсь , что будет ответ , который может быть расширен для включения regexp C-M-s/r
и grep
поиска , которые я использую довольно часто в штурвале-снаряде искать слова в латексных проектах мультей-файлы.
Обновление
Было бы неплохо видеть, что Emacs во всех своих функциях поиска делает шаг зачистки текста (из ударений / диакритических знаков / вы называете его) перед соответствием шагу в качестве поведения по умолчанию, которое может быть отключено префиксом по требованию не важно, какой язык под рукой. Как правило, когда я ищу что-то, я не ожидаю, что лучший редактор (Emacs) потерпит неудачу в этом поручении только из-за некоторых диакритических знаков или акцентов, которые редко когда-либо необходимы для выполнения рутинных операций над текстом.
источник
ucs-normalize-*
функции вlisp/international/ucs-normalize.el
. Для них не существует предварительно определенного свертывания поиска, как в случае с свертыванием регистра, но вы можете, по крайней мере, нормализовать регион перед его поиском. Хорошая реализация, вероятно, довольно сложная задача.php
реализовано: stackoverflow.com/a/25563250/1288722 - также реализовано вJavascript
: stackoverflow.com/a/7193622/1288722helm-swoop
?Ответы:
Вот грубое начало, основанное на списке символов объединения в этом ответе (и затем расширенном). (Отметить это как вики сообщества - пожалуйста, отредактируйте и улучшите это!)
Поэтому, если буфер содержит «الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ», и я оцениваю
(arabic-search-without-diacritics "الحمد لله رب العالمين")
, он находит текст. Он также работает в интерактивном режиме, какM-x arabic-search-without-diacritics
.Альтернативный подход:
Вот полный пример кода, который демонстрирует, как диакритические и другие непространственные метки (
Mn
свойство) могут быть удалены из нормализованных строк в совпадениях с регулярным выражением. Он работает с приведенными примерами, и IMO - правильный подход.источник
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1648
- платное обновление.arabic-search-without-diacritics
работает хорошо, но разрывается с некоторыми словами, я не знаю почему, как этаالأَ
. Другое предостережение, я всегда должен устанавливать-input-method на арабский, когда я ввожу свою строку в мини-буфер, в то время как вisearch-forward/backward
функции она остается там.kill-marks
это лучший подход для обеспечения беспрепятственного текста, готового для всех видов поиска. Что мне неясно, это как реализовать это для всего буфера, а затем для нескольких файлов?isearch-forward/backward
выделял все вхождения и текущий по-разному, и, вызывая его,s
будет двигаться вперед иr
двигаться назад?