将拉丁语音译为古希腊字母

时间:2014-07-28 08:07:59

标签: r string icu stringi

There is a simple way将拉丁字母转换为希腊字母,使用适用于R的stringi套餐,依赖于ICU的音译器:

library(stringi)
stri_trans_general("abcd", "latin-greek")

是否有类似的简单方法将拉丁语转换为古希腊语(αβγδ)而不是希腊语(ἀβκδ)?

2 个答案:

答案 0 :(得分:2)

我想您要做的事情(至少,作为您的任务的一部分),是删除所有重音。

以下是使用stringi进行此操作的方法。

library("stringi")
stri_flatten(
   stri_extract_all_charclass(
       stri_trans_nfkd(
          stri_trans_general("abcd", "latin-greek")
       ),
   "\\p{L}")[[1]]
)
## [1] "αβκδ"

首先,我们将stringi音译为希腊语。然后我们执行Unicode规范化NFKD - 这将重音字符分别分为字符和重音符号。接下来是时间提取所有字母并连接结果。 HTH

答案 1 :(得分:1)

现代和古希腊字母之间没有真正的区别。也许最大的一个是古希腊字母没有小写字母。所以αβγδ和ἀβκ都是现代希腊语(阿尔法的重音可能与发音有关,现代希腊语不再有它)。

现在,stri_trans_general在尝试考虑发音时所做的是音译:

  

可发音:如果过程只是简单地映射字符而不考虑其发音,则音译不是很有用。简单地将“αβγδεζηθ...”映射到“abcdefgh ...”将产生可能完整且明确的字符串,但不能发音。 (见here

音译有不同的标准,如ISO 843和UN(见herehere)。 c可以音译为“κ”或“σ”,选择前者。


由于SO是关于编程的,如果你想制作自己的映射,这里有一些代码:

## You have to complete the mapping
map <- data.frame(latin = c("a", "b", "c", "d", "e", "f", " "),
                  greek = c("α", "β", "γ", "δ", "ε", "φ", " "),
                  stringsAsFactors=FALSE)

mapChars <- function(latin) {
    a <- strsplit(latin, "")[[1]]
    res <- sapply(a, function(x) map$greek[map$latin == x])
    paste(res, sep="", collapse="")
}

mapChars("abcd")
## [1] "αβγδ"

希望这会对你有所帮助,

alex(或άλεξ)