以自动方式从希腊文中删除变音符号

时间:2015-05-22 09:56:21

标签: bash diacritics transliteration

我有一个标签文件

形式的反编译stardict字典
κακός <tab> bad

其中<tab>表示制表。

不幸的是,定义单词的方式要求查询包含所有变音标记。因此,如果我想搜索ζῷον,我需要让所有的iotas和抑扬符正确。

因此,我想转换整个文件,以便关键字删除了变音符号。这条线将成为

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

我知道我可以在bash中逐行读取文件,如[1]

所述
while read line           
do           
    command           
done <file 

但有什么方法可以自动化转换生产线的操作?我听说iconv [2],但没有设法使用它实现所需的转换。我最想使用bash脚本。

此外,是否有自动音译希腊语,例如:使用Perseus的方法?

Perseus' way of doing it

/ edit:也许我们可以使用Unicode代码?我们可以注意到U+1F0xU+1F8xx < 8等都是字母α的变体。这将减少手工工作量。我也接受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?

2 个答案:

答案 0 :(得分:2)

我不像现代希腊语那样熟悉古希腊语(它只使用两个变音符号)

然而,我通过元音发现了哪些与变音符号相结合。这给了我以下列表:

ἆἂᾶὰάἀἄ 
ἒὲέἐἔ 
ἦἢῆὴήἠἤ 
ἶἲῖὶίἰἴ 
ὂὸόὀὄ 
ὖὒῦὺύὐὔ 
ὦὢῶὼώὠὤ  

我将此列表保存为文件并将其传递给此sed

cat test.txt | sed -e 's/[ἆἂᾶὰάἀἄ]/α/g;s/[ἒὲέἐἔ]/ε/g;s/[ἦἢῆὴήἠἤ]/η/g;s/[ἶἲῖὶίἰἴ]/ι/g;s/[ὂὸόὀὄ]/ο/g;s/[ὖὒῦὺύὐὔ]/υ/g;s/[ὦὢῶὼώὠὤ]/ω/g'

Credit to hungnv

这是一个简单的sed。它采用每个选项并用未标记的字符替换它。上述命令的结果是:

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

关于音译希腊语:你帖子中的图片旨在帮助用户在你使用类似字形的网站上输入希腊语,而不是总是类似的声音。那些是不好的音译。例如β最常被音译,因为v.ψ是ps。 φ是ph等。

答案 1 :(得分:1)

使用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删除Unicoded表示为变音符号的所有字符

这实际上可以用于删除所有具有良好Unicode支持的脚本/语言的变音符号等,而不仅仅是希腊语。