在R中使用iconv函数来音译德语单词

Posted

技术标签:

【中文标题】在R中使用iconv函数来音译德语单词【英文标题】:Usage of iconv function in R to transliterate German words 【发布时间】:2021-12-20 03:19:34 【问题描述】:

我正在尝试使用R中的iconv函数来实现德语单词的正确音译(例如,MöbelMoebel)。

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

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"

但是,这不能正常工作。这是我的一些测试的输出:

#cat + library(ds4psy)
iconv(cat ("M", Umlaut["o"],"bel", sep = ""), "latin1", "ASCII//TRANSLIT")
Möbelcharacter(0)
#paste/paste0 + library(ds4psy)
> iconv(paste ("M", Umlaut["o"],"bel", sep = ""), "latin1", "ASCII//TRANSLIT")
[1] "MA?bel"

为了完整起见,我还尝试了stringi中的函数stri_trans_general

stri_trans_general("Möbel", "latin-ascii")
[1] "Mobel"

但是,如您所见,这也不起作用。

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

<?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 代码中做错了什么?

【问题讨论】:

返回NA 的那个是最接近工作PHP 的那个。如果我是你,我会对äae 等进行字符串替换(我不知道如何在 R 中这样做)。 @WalterTross 是的,我们可以使用regex 来做到这一点。 f.e.: &gt; str_replace("Möbel", "ö", "oe") [1] "Moebel" 但是如何修复 iconv,很有趣。 @WalterTross 欢迎您,问题已重新打开。我真的不知道,这个功能哪里坏了。还是我用错了? 【参考方案1】:

如果您没有必要使用iconv,还有另一种方法可以实现您的目标。

您可以定义一组要音译的德语字符和一组替换字符,并将这些对用作str_replace_all 的输入:

数据:

gg <- c("Göthe", "gerädert", "Hürde", "weiß")

首先,定义你的集合:

set <- setNames(c("oe", "ae", "ue", "ss"),
                c("ö", "ä", "ü", "ß"))

然后替换:

library(stringr)
str_replace_all(gg, set)
[1] "Goethe"    "geraedert" "Huerde"    "weiss" 

【讨论】:

以上是关于在R中使用iconv函数来音译德语单词的主要内容,如果未能解决你的问题,请参考以下文章

Python NLTK 中用于情感分析的德语词干

学习PHP中的iconv扩展相关函数

R字符串编码西里尔字母

在列表中使用iconv?

php iconv 函数参数的区别

php中iconv函数问题