W języku arabskim, podobnie jak w niektórych innych językach, istnieje tak zwane znaki diakrytyczne w celu poprawy wymowy. Nie ma konwencji dotyczącej liczby znaków diakrytycznych dla jednego słowa. Niektórzy używają minimum (które preferuję) na tyle, aby jednoznacznie wymawiać, podczas gdy inni używają ich zbytecznie lub po prostu dla celów estetycznych kaligrafii. Tak więc istnieje duża różnorodność tego, co i ile znaków diakrytycznych jest powiązanych z jednym słowem. Kiedy robię to isearch-forward/backward
przez naciśnięcie C-s/r
, problem pojawia się, gdy wpisuję go w minibuforze wyszukiwania bez znaków diakrytycznych, nie będzie pasował do tego samego słowa w tekście, jeśli miał znaki diakrytyczne, co sprawi, że zadanie szukania tego słowa z jego potencjalnymi znakami diakrytycznymi będzie zawsze niezadowalające.
Czy istnieje sposób, aby wyszukiwanie / wyrażenia regularne nie były świadome znaków diakrytycznych? Mam nadzieję, że znajdzie się odpowiedź, która może zostać rozszerzona o wyszukiwanie regexp C-M-s/r
i grep
wyszukiwanie, którego dość często używam w pocisku steru, aby szukać słowa w wieloplikowych projektach lateksowych.
Aktualizacja
Byłoby miło zobaczyć, że Emacs we wszystkich swoich funkcjach wyszukiwania wykonuje krok usuwania tekstu (od akcentów / znaków diakrytycznych / jak go nazywacie) przed dopasowaniem kroku jako domyślnego zachowania, które może zostać wyłączone przez prefiks na żądanie bez względu na to, jaki język jest pod ręką. Zazwyczaj, gdy szukam czegoś, nie oczekuję, że najlepszy redaktor (Emacs) zawiedzie w tym zadaniu tylko z powodu niektórych znaków diakrytycznych lub akcentów, które rzadko, jeśli w ogóle, są potrzebne do wykonywania zwykłych obowiązków tekstowych.
źródło
ucs-normalize-*
funkcje wlisp/international/ucs-normalize.el
. Dla tych nie ma wstępnie zdefiniowanego składania wyszukiwania, tak jak w przypadku składania liter, ale można przynajmniej znormalizować region przed jego przeszukaniem. Dobre wdrożenie jest prawdopodobnie dość złożonym zadaniem.php
zaimplementowane: stackoverflow.com/a/25563250/1288722 - również zaimplementowane wJavascript
: stackoverflow.com/a/7193622/1288722helm-swoop
?Odpowiedzi:
Oto trudny początek, oparty na liście łączących znaki w tej odpowiedzi (a następnie rozszerzonej). (Oznaczając to jako wiki społeczności - edytuj i popraw to!)
Więc jeśli bufor zawiera „الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ” i oceniam
(arabic-search-without-diacritics "الحمد لله رب العالمين")
, to znajduje tekst. Działa również interaktywnie, jakM-x arabic-search-without-diacritics
.Alternatywne podejście:
Oto pełny przykład kodu, który pokazuje, w jaki sposób znaki diakrytyczne i inne znaki spacji (
Mn
właściwość) można usunąć ze znormalizowanych ciągów w dopasowaniach wyrażeń regularnych . Działa z podanymi przykładami, a IMO jest właściwym podejściem.źródło
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1648
- aktualizacja bezpłatna.arabic-search-without-diacritics
działa dobrze, ale łamie się z pewnymi słowami, nie wiem dlaczego takالأَ
. Innym zastrzeżeniem jest to, że zawsze muszę ustawić metodę wprowadzania na arabską, kiedy wprowadzam ciąg znaków do mini-bufora, podczas gdy wisearch-forward/backward
funkcji pozostaje tam.kill-marks
to lepsze podejście do zapewnienia bezproblemowego tekstu gotowego do wszelkiego rodzaju wyszukiwania. Nie jest dla mnie jasne, jak zaimplementować to w całym buforze, a następnie w plikach wielu?isearch-forward/backward
wyróżnić wszystkie wystąpienia i bieżące inaczej, a wywoływanies
spowoduje przejście do przodu ir
do tyłu?