在文本分析 (R) 中使用德语字符(ü、ö、ä 等)

Big*_*ndy 3 text r character-encoding

我正在 R 中进行一些文本挖掘。我想要分析的文本是德语的。

\n\n

问题是德语字符在文本本身或结果中都无法正确显示。

\n\n

我正在 Mac 操作系统上工作。

\n\n

我在这里找到了类似的线程并尝试了建议的解决方案:

\n\n
Sys.setlocale("LC_ALL", "de_DE.UTF-8")\n
Run Code Online (Sandbox Code Playgroud)\n\n

似乎改变了语言(即不给出错误消息),但字符仍然显示不正确,\ne.g。Erste-Hilfe-Ma\\xa7nahmen而不是Erste-Hilfe-Ma\xc3\x9fnahmen

\n\n
text <- readLines("Erste Hilfe.txt", encoding="de_DE.UTF-8")\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果:Erste-Hilfe-Ma\\xa7nahmen

\n\n
text <- readLines("Erste Hilfe.txt", encoding="ISO/IEC 8859-15")\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果:Erste-Hilfe-Ma\\xa7nahmen

\n\n

您还有其他解决方案吗?

\n

JBG*_*ber 5

这在一定程度上取决于您想要对文件执行的操作,但通常来说,即使保留编码,stri_read_lines()包中的变音符号也能很好地工作stringi"auto"

\n\n
library(stringi)\n\nlines <- stri_read_lines("Erste Hilfe.txt", encoding = "auto")\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果显示lines向量仍然有问题,可以尝试检测编码:

\n\n
lines_raw <- stri_read_raw("Erste Hilfe.txt")\n\nstri_enc_detect(lines_raw)\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出将如下所示:

\n\n
      Encoding Language Confidence\n1        UTF-8                1.00\n2 windows-1252       de       0.55\n3         Big5       zh       0.44\n4 windows-1254       tr       0.25\n5 windows-1250       hu       0.14\n6     UTF-16BE                0.10\n7     UTF-16LE                0.10\n8      GB18030       zh       0.10\n9   IBM424_rtl       he       0.01\n
Run Code Online (Sandbox Code Playgroud)\n\n

在本例中,我读取了一个 UTF-8 格式的文本文件,其中包含许多变音符号,并且 stringi 可以正确猜测编码。但如果置信度不是那么高,您可能想尝试一些编码。

\n\n

我也可以在控制台中毫无问题地显示它(尽管已将区域设置设置为 en_GB.UTF-8),但在某些情况下,这可能会导致问题。如果您想检查您的编码是否确实因读入文件而被破坏,或者控制台是否无法显示它,您可以尝试将这些行写回文件并检查:

\n\n
stri_write_lines(lines, "Erste Hilfe_new.txt")\n
Run Code Online (Sandbox Code Playgroud)\n\n

您还可以尝试创建一个带有变音符号的字符向量,然后看看它是否正确显示:

\n\n
"\xc3\xa4\xc3\xb6\xc3\xbc"\n
Run Code Online (Sandbox Code Playgroud)\n\n

通常,RStudio 0.93 以上版本应该不会有这个问题。希望这可以帮助。

\n\n

编辑:

\n\n

在评论中,事实证明文本的来源仍然可以在互联网上找到 - 我没有考虑过这种可能性。通常会发生编码问题,因为某些编辑器在保存文件时强制使用某种编码。如果可以在线获取源代码,您可以使用该rvest包将文本直接读入 R:

\n\n
library(rvest)\nlines <- read_html("https://www.zeit.de/wissen/2018-10/erste-hilfe-kinder-rotes-kreuz-kurs-ersthelfer-notfall/komplettansicht") %>% \n  html_nodes(".article__item") %>% \n  html_text()\n\n> grep("Ma\xc3\x9fnahmen", lines, value = TRUE)[1]\n[1] "In vielen europ\xc3\xa4ischen L\xc3\xa4ndern, etwa in Belgien und D\xc3\xa4nemark, steht Erste Hilfe sp\xc3\xa4testens in der Sekundarstufe im Schullehrplan. Auch Gro\xc3\x9fbritannien arbeitet an einem Gesetzesentwurf, der vorsieht, dass Grundschulkindern grundlegende Erste-Hilfe-Ma\xc3\x9fnahmen beigebracht werden. Die Sch\xc3\xbclerinnen und Sch\xc3\xbcler weiterf\xc3\xbchrender Schulen sollen in Zukunft die Reanimation \xc3\xbcben, also Beatmung und Herzdruckmassage.\\n"\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅他们的文档,了解如何确定 的正确输入html_nodes。我通常使用 chrome 扩展选择器小工具。

\n