我想在 Word 文档中选择一个 Unicode 希伯来语文本字符串,并删除希伯来语元音(又名 nikkud)而不更改任何其他内容。
我需要从所选文本中删除给定范围内的 Unicode 字符。我要删除的 Unicode 字符是 U+0591-U+05BD、U+05BF-U+05C2 和 U+05C4-U+05C7。
我找到了一种使用 Google Sheets 中的 REGEXREPLACE 函数从 Unicode 文本字符串中删除希伯来语元音的方法(谢谢 GitHub)。例如:
=REGEXREPLACE(B1,"[(\x{0591}-\x{05BD})OR(\x{05BF}-\x{05C2})OR(\x{05C4}-\x{05C7})]","")
其中单元格 B1 包含带有元音的原始希伯来语文本,并且该函数输出删除了元音的相同文本。那里使用的 Unicode 范围允许我留下两个需要保留的字符(U+05BE 和 U+05C3)。
使用该方法,我可以复制希伯来语文本字符串,例如 אָמַר אְהוָה,将其粘贴到我的 Google 表格中,然后复制输出 אמר הוה,并将其粘贴到原始文本上。这比 Word 中的宏慢得多(有数百个希伯来语文本字符串需要修复)。该文档的大部分内容都是英语,其中有希伯来语片段,因此我不需要转换整个文档的解决方案。
一些搜索表明,Word VBA 存在类似的 RegEx 替换函数,但我没有足够的编程知识来适应我自己的需要。
您可以安装
notepad++
并在粘贴整个输入后使用此正则表达式使用正则表达式模式执行查找和替换操作。
[\x{0591}-\x{05BD}\x{05BF}-\x{05C2}\x{05C4}-\x{05C7}]
之前:
之后:
然后您可以使用
AutoHotkey
自动执行复制/粘贴操作
如果您想保留格式信息,这也不是问题。
只需执行以下操作:
Word XML Document (*.xml)
Notepad++
打开它(您必须复制该文件或关闭 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的macro似乎更巩固,但它对我不起作用)。
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) 为空。
全部完成
这是 Excel 365 中的一个简单解决方案:
如果您的文本位于单元格 A2 中,
那么这个公式:
=LET(x,MID(A2,SEQUENCE(LEN(A2)),1),CONCAT(IF(UNICODE(x)>1487,x,"")))
将从文本中删除变音符号
例如:
之前: בְּרֵאשִׁתת
之后: