有一种简单的方法可以将拉丁字母转换为希腊字母,使用stringi
R 包,这里依赖于 ICU 的音译:
library(stringi)
stri_trans_general("abcd", "latin-greek")
有没有类似的简单方法将拉丁语转换为古希腊语(αβγδ)而不是希腊语(ἀβκδ)?
我猜您想要做的(至少,作为您任务的一部分)是删除所有重音。
这是一种使用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——这将重音字符分别拆分为字符和重音符号。接下来是提取所有字母并连接结果的时候了。高温高压
现代和古希腊字母之间没有真正的区别。也许最大的一个是古希腊字母没有小写字母。所以 αβγδ 和 ἀβκδ 都是现代希腊语(由于 alpha 的重音可能与发音有关,现代希腊语不再有它)。
现在,stri_trans_general
在尝试考虑发音的同时进行音译:
可发音:如果该过程只是简单地映射字符而不考虑其发音,则音译就没有那么有用了。简单地将“αβγδεζηθ...”映射到“abcdefgh...”将产生可能完整且明确但不能发音的字符串。(见这里)
音译有不同的标准,例如 ISO 843 和 UN(参见此处和此处)。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] "αβγδ"
希望这对你有帮助,
亚历克斯(或άλεξ)