繁体   English   中英

如何从红宝石的希伯来语utf-8中剥离元音/ nekudot /变音符号?

[英]How to strip vowels/nekudot/diacritics from hebrew utf-8 in ruby?

希伯来语将元音打印为字母周围的nekudot /点。
带有元音:“
不带元音:“יתגבתגארילעמודבבקרלעבודתבוראושיהאהואמעוררהשחר”

我需要一种从弦上剥离这些元音的方法。 与将带元音的字符串转换为不带元音的字符串一样。 有什么建议么?

-ps

我已经尝试过“ hebrew.gsub(/ [^א-ת] /,'')”,但这有两个问题:答:这将删除所有标点符号,英语等。我只想删除元音。 b:一些字母也被删除。 (我的理解是有限的,但似乎某些字母/元音组合在utf-8中变成了“多字节”,与“א-ת”不匹配。

我在网上找到了这个网址https : //gist.github.com/yakovsh/345a71d841871cc3d375 ,但红宝石建议仅适用于rails(假设它完全适用)。 但是,该页面可能有助于找到解决方案。

请帮助,在此先感谢。

元音都在U + 0591和U + 05C7之间,因此您可以

hebrew.gsub(/[\u0591-\u05c7]/,"")

例如

" יִתְגַּבֵּר כַּאֲרִי לַעֲמֹד בַּבֹּקֶר לַעֲבוֹדַת בּוֹרְאוֹ שֶׁיְּהֵא הוּא מְעוֹרֵר הַשַּׁחַר".gsub(/[\u0591-\u05c7]/,"")
# => " יתגבר כארי לעמד בבקר לעבודת בוראו שיהא הוא מעורר השחר"

但是,仅当元音在字符串中都是单独的字符时才有效-或者,如果文本使用规范化形式D,则在讲Unicode的情况下说相同的事情。您可以通过在其上调用String#unicode_normalize来确保是这种情况第一:

hebrew.unicode_normalize(:nfd).gsub(/[\u0591-\u05c7]/,"")

此步骤是必需的,因为Unicode包含几个单独的字符,这些字符在单个代码点中将字母和nekuddot组合在一起,以便与不支持组合变音符的较旧字符集进行往返兼容性。 这些字符意味着您不能仅通过查看字符串“בּ”是由两个代码点序列U+05D1 HEBREW LETTER BET后跟U+05BC HEBREW POINT DAGESH OR MAPIQ还是U+05BC HEBREW POINT DAGESH OR MAPIQ ,还是仅由单个字符U+FB31 HEBREW LETTER BET WITH DAGESH 将字符串放入规范化表单D会将后者替换为前者,并且还将任何其他“预组合”字符拆分为它们的组成部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM