自动去除希腊文本中的变音符号

5
我有一个以tab文件形式反编译的stardict词典。
κακός <tab> bad

其中 <tab> 表示制表符。

不幸的是,这些单词的定义要求查询包括所有变音标记。所以如果我想搜索 ζῷον,我需要正确地输入所有 iota 和 circumflex。

因此,我想将整个文件转换为没有变音符号的关键字。因此该行将变为

κακος <tab> <h3>κακός</h3> <br/> bad

我知道我可以像这里[1]描述的那样,在bash中逐行读取文件。

while read line           
do           
    command           
done <file 

但是有没有自动化转换行的方法?我听说过 iconv [2],但是使用它时没有达到预期的转换效果。最好使用一个 bash 脚本。
此外,是否有一种自动将希腊语转写的方式,例如使用 Perseus 的方法?
/edit: 或许我们可以使用 Unicode 代码?我们可以注意到对于 x <8 等,U+1F0xU+1F8x 都是 α 字母的变体。这将减少手动工作量。我也接受 C++ 解决方案。
[1] http://en.kioskea.net/faq/1757-how-to-read-a-file-line-by-line
[2] How to remove all of the diacritics from a file?

谁是珀尔修斯?我的意思是,我知道他是谁,但他是否足够像半神那样被归属于某种方法? - Jongware
1
我的意思是这个:http://www.perseus.tufts.edu/lexica.html - marmistrz
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - shellter
关于翻译希腊字母:该图旨在帮助用户使用类似的符号在该网站上输入希腊语,而不总是相似的发音。这些都是不太准确的翻译。例如,β通常被翻译为v。ψ是ps。φ是ph等。 - James Webster
2个回答

2
“我对古希腊语不太熟悉,但我对现代希腊语很熟悉(它只使用了两个变音符号)。
然而,我查阅了元音字母并确定了哪些与变音符号相结合。这给了我以下列表:”
ἆἂᾶὰάἀἄ 
ἒὲέἐἔ 
ἦἢῆὴήἠἤ 
ἶἲῖὶίἰἴ 
ὂὸόὀὄ 
ὖὒῦὺύὐὔ 
ὦὢῶὼώὠὤ  

我把这个列表保存为一个文件,然后传递给了 sed
cat test.txt | sed -e 's/[ἆἂᾶὰάἀἄ]/α/g;s/[ἒὲέἐἔ]/ε/g;s/[ἦἢῆὴήἠἤ]/η/g;s/[ἶἲῖὶίἰἴ]/ι/g;s/[ὂὸόὀὄ]/ο/g;s/[ὖὒῦὺύὐὔ]/υ/g;s/[ὦὢῶὼώὠὤ]/ω/g'

这是一个简单的sed命令。它将每个选项都替换为未标记的字符。上述命令的结果如下:

Credit to hungnv

ααααααα
εεεεε
ηηηηηηη
ιιιιιιι
οοοοο
υυυυυυυ
ωωωωωωω

关于希腊语的转写:您帖子中的图像旨在帮助用户在您所取的网站上使用类似的字形输入希腊语,而不是总是相似的发音。那些是较差的转写。例如,β通常被转写为v。ψ是ps。φ是ph等。

我只是使用多音键盘并按下组合键。如果组合键生成了一个字母,我就保留它。 - James Webster
1
关于不同的选项...你只需要输入这些组合一次。这似乎比创建一个程序来为您创建组合更容易。即使所有6个元音字母有23个选项,你只需要输入138个字符。 - James Webster
这仍然比编写生成这些字符的程序所需键入的字符要少。也许这会成为PGC上一个不错的问题。 - James Webster
请问您能否给我一个关于alpha和omicron的例子,告诉我哪些变音符是有效的? - James Webster
我猜基于Unicode编码的替换应该更有效率。但是我不知道如何以明智的方式实现它。http://unicode.org/charts/PDF/U1F00.pdf - marmistrz
显示剩余3条评论

2
你可以使用Perl相对容易地从字符串中删除变音符号:
$_=NFKD($_);s/\p{InDiacriticals}//g;

例如:

$ echo 'ὦὢῶὼώὠὤ ᾪ' | perl -CS -MUnicode::Normalize -pne '$_=NFKD($_);s/\p{InDiacriticals}//g'
ωωωωωωω Ω

这是如何工作的:
  • -CS 为Perl的stdin/stdout启用UTF8
  • -MUnicode::Normalize 加载Unicode规范化库
  • -e 在命令行上执行脚本;-n 自动循环输入的每一行;-p 自动打印输出
  • NFKD() 将该行转换为Unicode规范化形式之一;这意味着重音和变音符号被分解成单独的字符,从而更容易在下一步中删除它们
  • s/\p{InDiacriticals}//g 删除所有被Unicode标记为变音符号的字符
实际上,这应该适用于所有具有良好Unicode支持的脚本/语言,而不仅仅是希腊语。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接