希伯来语将元音打印为字母周围的nekudot /点。
带有元音的单词:“יִתְגַּבֵּרכַּאֲרִילַעֲמֹדבַּבֹּקֶרלַעֲבוֹדַתבּוֹרְאוֹשֶׁיְּהֵאהוּאמְעוֹרֵרהַשַּׁחַר”
没有元音:“יתגבתגארילעמודבבקרלעבודתבוראושיהאהואמעוררהשחר”
我需要一种从弦上剥离这些元音的方法。与将带元音的字符串转换为不带元音的字符串一样。有什么建议吗?
-p.s。
我尝试过“ hebrew.gsub(/ [^א-ת] /,'')” 但这有两个问题:a:这将删除所有标点符号,英语等。我只想删除元音。 b:一些字母也被删除。 (我的理解是有限的,但是似乎某些字母/元音组合在utf-8中变成了“多字节”,与“א-ת”不匹配。
我在网上找到了这个:https://gist.github.com/yakovsh/345a71d841871cc3d375,但红宝石建议仅适用于滑轨(假设它完全适用)。 但是,该页面可能有助于找到解决方案。
请帮助,谢谢。
答案 0 :(得分:4)
元音都在U + 0591和U + 05C7之间,因此您只需
hebrew.gsub(/[\u0591-\u05c7]/,"")
例如
" יִתְגַּבֵּר כַּאֲרִי לַעֲמֹד בַּבֹּקֶר לַעֲבוֹדַת בּוֹרְאוֹ שֶׁיְּהֵא הוּא מְעוֹרֵר הַשַּׁחַר".gsub(/[\u0591-\u05c7]/,"")
# => " יתגבר כארי לעמד בבקר לעבודת בוראו שיהא הוא מעורר השחר"
但是,仅当元音在字符串中都是单独的字符时才有效-如果文本使用规范化形式D,则用Unicode说同样的话。您可以通过调用{{ 3}}首先:
hebrew.unicode_normalize(:nfd).gsub(/[\u0591-\u05c7]/,"")
此步骤之所以必要,是因为Unicode包含几个单个字符,这些字符在一个代码点中将字母和 nekuddot 组合在一起,以便与不支持变音符号组合的较旧字符集进行双向兼容。这些字符意味着您不能仅通过查看字符串“בּ”是由两个代码点序列U+05D1 HEBREW LETTER BET
后面紧跟U+05BC HEBREW POINT DAGESH OR MAPIQ
还是仅由单个字符U+FB31 HEBREW LETTER BET WITH DAGESH
组成来辨别。将字符串放入规范化表格D中,将后者替换为规范化表格D,并将所有其他“预组合”字符分成其组成部分。