En arabe comme dans certaines autres langues, il existe ce qu'on appelle des diacritiques pour améliorer la prononciation. Il n'y a pas de convention sur le nombre de signes diacritiques à écrire pour un seul mot. Certains utilisent le minimum (que je préfère) juste assez pour lever l'ambiguïté de la prononciation, tandis que certains les utilisent de manière superflue ou simplement à des fins de calligraphie esthétique. Ainsi, il existe une grande variation sur ce que et combien de signes diacritiques sont associés à un mot. Lorsque je le fais isearch-forward/backward
en appuyant sur C-s/r
, un problème survient lorsque je le tape dans le mini-tampon de recherche sans signes diacritiques, il ne correspondra pas au même mot dans le texte s'il avait des signes diacritiques, ce qui rend la tâche de rechercher ce mot avec ses signes diacritiques potentiels toujours insatisfaisante.
Existe-t-il un moyen de rendre la recherche / expression rationnelle ignorante des signes diacritiques? J'espère qu'il y aura une réponse qui pourra être étendue pour inclure regexp C-M-s/r
et grep
rechercher que j'utilise assez souvent dans helm-projectile pour rechercher un mot dans un projet multi-fichiers en latex.
Mettre à jour
Il serait agréable de voir qu'Emacs dans toutes ses fonctions de recherche effectue l'étape de suppression du texte (à partir d'accents / diacritiques / vous le nommez) avant de faire correspondre l'étape comme un comportement par défaut qui peut être désactivé par un préfixe à la demande quelle que soit la langue à portée de main. En règle générale, lorsque je recherche quelque chose, je ne m'attends pas à ce que le meilleur éditeur (Emacs) échoue dans cette course simplement à cause de certains signes diacritiques ou accents qui sont rarement, voire jamais, nécessaires pour accomplir des tâches de texte banales.
ucs-normalize-*
fonctions danslisp/international/ucs-normalize.el
. Il n'y a pas de pliage de recherche prédéfini pour ceux-ci, comme c'est le cas avec le pliage de cas, mais vous pouvez au moins normaliser une région avant de la rechercher. Une bonne mise en œuvre est probablement une tâche assez complexe.php
implémenté: stackoverflow.com/a/25563250/1288722 - également implémenté dansJavascript
: stackoverflow.com/a/7193622/1288722helm-swoop
?Réponses:
Voici un début approximatif, basé sur la liste des caractères de combinaison dans cette réponse (puis étendue). (Marquer ceci comme wiki communautaire - veuillez le modifier et l'améliorer!)
Donc, si un tampon contient "الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ", et j'évalue
(arabic-search-without-diacritics "الحمد لله رب العالمين")
, il trouve le texte. Il fonctionne également de manière interactive, commeM-x arabic-search-without-diacritics
.Approche alternative:
Voici un exemple de code complet qui montre comment les marques diacritiques et autres marques non espacées (
Mn
propriété) peuvent être supprimées des chaînes normalisées dans les correspondances d'expression régulière. Cela fonctionne avec les exemples donnés et l'OMI est la bonne approche.la source
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1648
- mise à jour gratuite.arabic-search-without-diacritics
fonctionne bien mais rompt avec quelques mots, je ne sais pas pourquoi comme celle-ciالأَ
. Autre mise en garde, je dois toujours définir la méthode d'entrée en arabe lorsque j'entre ma chaîne dans un mini-tampon, tandis qu'enisearch-forward/backward
fonction, elle y reste.kill-marks
est la meilleure approche pour fournir un texte sans tracas prêt pour toutes sortes de recherches. Ce qui n'est pas clair pour moi, c'est comment implémenter cela sur un tampon entier, puis sur plusieurs fichiers?isearch-forward/backward
mettre en évidence toutes les occurrences et l'actuelle différemment et en invoquants
va avancer etr
reculer?