【问题标题】:Removing diacritical marks from a Greek text in an automatic way以自动方式从希腊文本中删除变音符号
【发布时间】:2015-08-04 07:09:41
【问题描述】:

我有一个标签文件形式的反编译的stardict字典

κακός <tab> bad

&lt;tab&gt; 表示表格。

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

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

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

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

while read line           
do           
    command           
done <file 

但是有什么办法可以自动化转换线路的操作呢?我听说过iconv [2],但没有设法使用它实现所需的转换。我最好使用 bash 脚本。


此外,是否有一种自动音译希腊语的方式,例如使用珀尔修斯的方法?


/edit: 也许我们可以使用 Unicode 代码?我们可以注意到U+1F0xU+1F8x for x &lt; 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?

【问题讨论】:

  • 珀尔修斯是谁?我的意思是,我知道他是谁,但他是否足够半神,可以将某种方法归功于他?
  • 我的意思是:perseus.tufts.edu/lexica.html
  • 我不确定您所说的“没有使用它”是什么意思。您是说您无法让iconv 进行所需的转换,还是您的意思是由于某种原因,您没有安装iconv(并且无法安装)? (请使用此信息更新您的问题,而不是在此处回复,我将删除此信息)。祝你好运。
  • 关于希腊语的音译:该图像旨在帮助用户在该网站上使用相似的字形输入希腊语,而不是总是相似的声音。那些是糟糕的音译。例如β 最常被音译为 v。ψ 是 ps。 φ 是 ph 值等。

标签: bash diacritics transliteration


【解决方案1】:

您可以使用 Perl 相对轻松地从字符串中删除变音符号:

$_=NFKD($_);s/\p{InDiacriticals}//g;

例如:

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

它的工作原理如下:

  • -CS 为 Perl 的标准输入/标准输出启用 UTF8
  • -MUnicode::Normalize 加载一个用于 Unicode 规范化的库
  • -e 从命令行执行脚本; -n 自动循环输入中的行; -p 自动打印输出
  • NFKD() 将该行转换为 Unicode 规范化形式之一;这意味着重音和变音符号被分解为单独的字符,这样在下一步中更容易将它们删除
  • s/\p{InDiacriticals}//g 删除 Unicoded 表示为变音符号的所有字符

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

【讨论】:

    【解决方案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等。

    【讨论】:

    • 詹姆斯韦伯斯特:那ὧ呢?有两个spiritus,3个重音和下标iota。对于每个可能的长元音(除了 ο 和 ε),我们有 3*4*2 - 1 = 23 个选项。我宁愿不手动定义这一切。音译旨在提供 1:1 的音译(一个拉丁字符每一个希腊字符)。此外在古希腊语中 β 发音为 b ;) 因此野蛮人 (βάρβαρος) 而不是 varvarian :) 但这只是一个例子,关键是在 automatic
    • 我只是在使用多调键盘并按下组合键。如果组合成信..我保留了它。
    • 关于不同的选项..您只需要输入这些组合一次。这似乎比创建一个程序来为您创建组合更容易。即使所有 6 个元音都有 23 个选项,您也只需输入 138 个字符。
    • 不,多 2 倍。因为也有大写字母。
    • 这仍然比您编写生成这些字符的程序所需要输入的字符少。也许吧。这对 PGC 来说是一个很好的问题
    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2011-04-07
    • 2018-02-02
    • 2020-04-05
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多