从选定的 Unicode 希伯来语文本中删除希伯来语元音 (nikkud)

Remove Hebrew vowels (nikkud) from selected Unicode Hebrew text

我想 select Word 文档中的一串 Unicode 希伯来语文本,并在不更改任何其他内容的情况下删除希伯来语元音(aka nikkud)。

我需要从 selected 文本中删除给定范围内的 Unicode 字符。我要删除的 Unicode 字符是 U+0591-U+05BD、U+05BF-U+05C2 和 U+05C4-U+05C7。

我在 Google Sheets (thank you GitHub) 中找到了一种使用 REGEXREPLACE 函数从 Unicode 文本字符串中删除希伯来语元音的方法。例如:

=REGEXREPLACE(B1,"[(\x{0591}-\x{05BD})OR(\x{05BF}-\x{05C2})OR(\x{05C4}-\x{05C7})]","")

其中单元格 B1 包含带元音的原始希伯来语文本,函数输出删除元音后的相同文本。那里使用的 Unicode 范围允许我留下两个需要保留的字符(U+05BE 和 U+05C3)。

使用该方法,我可以复制一个希伯来文本字符串,例如 אָמַ יְהוָה,将其粘贴到我的 Google Sheet,然后复制输出 אמ יהוה,并将其粘贴到原文。这比 Word 中的宏慢得多(有数百个这样的希伯来语文本字符串需要修复)。文档的大部分是英文的,带有希伯来语片段,所以我不需要转换整个文档的解决方案。

一些搜索向我表明,Word VBA 存在类似的 RegEx 替换功能,但我没有足够的编程知识来适应我自己的需要。

您可以安装 notepad++ 并在粘贴整个输入后使用此正则表达式使用正则表达式模式执行查找和替换操作。

[\x{0591}-\x{05BD}\x{05BF}-\x{05C2}\x{05C4}-\x{05C7}]

之前:

之后:

然后您可以使用 AutoHotkey 自动执行 copy/paste 操作,例如

如果您想保留格式信息,这也不是问题。

只需进行以下操作:

  • 将文件保存在 Word XML 文档中(另存为>保存类型:Word XML Document (*.xml)
  • 复制此文件并使用 Notepad++ 打开它(您必须复制该文件或关闭 Word,否则您无法以写入模式打开它)
  • 应用解释开头所述的查找和替换并保存文件。
  • 用 Word 重新打开文件并保存 .docx 例如

你可以试试这个宏。请注意,我的速度非常慢:

Sub RemoveHebrewVowels()
    Dim Word As Range
    Dim Words As Variant
    Dim WildcardCollection(3) As String
    Rem [(\x{0591}-\x{05BD}]
    WildcardCollection(0) = "[" & ChrW(1425) & "-" & ChrW(1469) & "]{1;}"
    Rem [\x{05BF}-\x{05C2}]
    WildcardCollection(1) = "[" & ChrW(1471) & "-" & ChrW(1474) & "]{1;}"
    Rem [\x{05C4}-\x{05C7}]
    WildcardCollection(2) = "[" & ChrW(1476) & "-" & ChrW(1479) & "]{1;}"
    'Options.DefaultHighlightColorIndex = wdYellow
    'Clear existing formatting and settings in Find
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    'Selection.Find.Replacement.Highlight = True
    'Cycle through document and find wildcards patterns, replace when found
    For Each Word In ActiveDocument.Words
        For Each WildcardsPattern In WildcardCollection
            With Selection.Find
                .Text = WildcardsPattern
                .Replacement.Text = ""
                .Forward = True
                .Wrap = wdFindContinue
                .Format = False
                .MatchCase = False
                .MatchWholeWord = False
                .MatchWildcards = True
                .MatchSoundsLike = False
                .MatchAllWordForms = False
            End With
            Selection.Find.Execute Replace:=wdReplaceAll
        Next
    Next
End Sub

谢谢大家。基于其中一些建议,我将以下宏组合在一起,它似乎运行良好。可能有更优雅的写法(wp78de's 看起来更统一,但对我不起作用)。

Sub HebrewDevocalizer()
With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[" & ChrW(1425) & "-" & ChrW(1469) & "]"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll

With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[" & ChrW(1471) & "-" & ChrW(1474) & "]"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll

With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "[" & ChrW(1476) & "-" & ChrW(1479) & "]"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

任何需要在软件脚本中使用它的人(Python 3),你可以做

import re
re.sub(r'[\u0591-\u05BD\u05BF-\u05C2\u05C4-\u05C7]', '', 'אֱלֹהִים')

BS"D

将“另存为”另存为其他格式 - 希伯来语 DOS 文本。

在 Word 中重新加载文件,您将看到一个问号已替换每个 nikud。

对“?”进行全局更改 (cntrl H)为空。

全部完成