首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中图标函数在德语音译中的应用

R中图标函数在德语音译中的应用
EN

Stack Overflow用户
提问于 2021-11-06 12:19:19
回答 1查看 151关注 0票数 3

我试图使用R中的iconv函数来实现德语单词的正确音译(例如,M bel→Moebel)。

我编写了以下代码(尝试使用英语/德语语言环境):

代码语言:javascript
复制
iconv("Möbel", "latin1", "ASCII//TRANSLIT")
[1] "Mobel"

iconv("Möbel", "UTF-8", "ASCII//TRANSLIT")
[1] NA

iconv("Möbel", "UTF-8", "ASCII//TRANSLIT", sub ="")
[1] "Mbel"

iconv("Möbel", "Windows-1252", "ASCII//TRANSLIT")
[1] "Mobel"

然而,这是不能正常运作的。下面是我的一些测试的输出:

代码语言:javascript
复制
#cat + library(ds4psy)
iconv(cat ("M", Umlaut["o"],"bel", sep = ""), "latin1", "ASCII//TRANSLIT")
Möbelcharacter(0)
代码语言:javascript
复制
#paste/paste0 + library(ds4psy)
> iconv(paste ("M", Umlaut["o"],"bel", sep = ""), "latin1", "ASCII//TRANSLIT")
[1] "MA?bel"

为了完整起见,我还尝试了来自stringi的函数stringi

代码语言:javascript
复制
stri_trans_general("Möbel", "latin-ascii")
[1] "Mobel"

但是,正如你所看到的,这也是行不通的。

我不明白的是,为什么iconv函数在R中不能正常工作,而它在PHP中显然是正确工作的

代码语言:javascript
复制
<?php
    //some German
    $utf8_sentence = 'Weiß, Goldmann, Göbel, Weiss, Göthe, Goethe und Götz';
    setlocale(LC_ALL, 'de_DE');
    
    $trans_sentence = iconv('UTF-8', 'ASCII//TRANSLIT', $utf8_sentence);
    
    //gives [Weiss, Goldmann, Goebel, Weiss, Goethe, Goethe und Goetz]
    echo $trans_sentence . PHP_EOL;
?>

为什么我在R与PHP的iconv版本中看到了这种行为上的差异?我的R码做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-11-06 12:35:36

如果没有必要使用iconv,那么还有另外一种方法来实现您的目标。

您可以定义一组您想要音译的德语字符及其替换,并使用这些对作为str_replace_all的输入。

数据:

代码语言:javascript
复制
gg <- c("Göthe", "gerädert", "Hürde", "weiß")

首先,定义您的集合:

代码语言:javascript
复制
set <- setNames(c("oe", "ae", "ue", "ss"),
                c("ö", "ä", "ü", "ß"))

然后替换:

代码语言:javascript
复制
library(stringr)
str_replace_all(gg, set)
[1] "Goethe"    "geraedert" "Huerde"    "weiss" 
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69863915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档