如何从 ruby 中的希伯来语 utf-8 中删除 vowels/nekudot/diacritics?

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

希伯来语将字母周围的元音打印为 nekudot/points。
带元音:“愿他早上起来做造物主的工作;让他成为黑暗的搅动者”
没有元音:“让 Kari 在早上为造物主的工作站起来,愿他唤醒黎明”

我需要一种从字符串中去除这些元音的方法。就像将带元音的字符串转换为不带元音的字符串一样。有什么建议吗?

-p.s.

我试过了"hebrew.gsub(/[^א-ת]/, '')" 但这有两个问题:a:这将删除所有标点符号、英语等。我只想删除元音。 b:一些字母也被删除了。 (我的理解有限,但似乎有些 letters/vowel 组合在 utf-8 中变成 "multibyte" 并且不会匹配“A-T”。

我在网上找到了这个:https://gist.github.com/yakovsh/345a71d841871cc3d375,但是 ruby 建议只对 rails 有效(假设它完全有效)。 但是,也许该页面有助于找到解决方案。

请帮忙,提前致谢。

元音都在U+0591到U+05C7之间,直接做就可以了

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

例如

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

但是,只有当元音在字符串中都是单独的字符时才有效——或者用 Unicode 语言来说同样的事情,如果文本是规范化形式 D。您可以通过调用来确保是这种情况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+FB31 HEBREW LETTER BET WITH DAGESH 组成。将字符串放入规范化形式 D 会将后者替换为前者,并将任何其他 "precomposed" 字符拆分为其组成部分。