首页 > 解决方案 > 在文本分析中使用德语字符(ü、ö、ä 等) (R)

问题描述

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

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

我正在使用 Mac OS。

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

Sys.setlocale("LC_ALL", "de_DE.UTF-8")

似乎改变了语言(即不给出错误消息),但字符仍然显示不正确,例如Erste-Hilfe-Ma\xa7nahmen而不是Erste-Hilfe-Maßnahmen

text <- readLines("Erste Hilfe.txt", encoding="de_DE.UTF-8")

结果:Erste-Hilfe-Ma\xa7nahmen

text <- readLines("Erste Hilfe.txt", encoding="ISO/IEC 8859-15")

结果:Erste-Hilfe-Ma\xa7nahmen

您还有其他解决方案吗?

标签: rtextcharacter-encoding

解决方案


这在一定程度上取决于您要对文件执行的操作,但通常stri_read_lines()从包stringi中可以很好地处理变音符号,即使在保留编码的情况下也是如此"auto"

library(stringi)

lines <- stri_read_lines("Erste Hilfe.txt", encoding = "auto")

如果显示lines矢量后还是有问题,可以尝试检测编码:

lines_raw <- stri_read_raw("Erste Hilfe.txt")

stri_enc_detect(lines_raw)

输出将如下所示:

      Encoding Language Confidence
1        UTF-8                1.00
2 windows-1252       de       0.55
3         Big5       zh       0.44
4 windows-1254       tr       0.25
5 windows-1250       hu       0.14
6     UTF-16BE                0.10
7     UTF-16LE                0.10
8      GB18030       zh       0.10
9   IBM424_rtl       he       0.01

在这种情况下,我读入了一个 UTF-8 文本文件,其中包含许多变音符号,并且 stringi 正确猜测编码没有问题。但是,如果置信度不那么高,您可能想尝试一些编码。

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

stri_write_lines(lines, "Erste Hilfe_new.txt")

您也可以尝试使用变音符号创建一个字符向量,然后查看它是否正确显示:

"äöü"

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

编辑:

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

library(rvest)
lines <- read_html("https://www.zeit.de/wissen/2018-10/erste-hilfe-kinder-rotes-kreuz-kurs-ersthelfer-notfall/komplettansicht") %>% 
  html_nodes(".article__item") %>% 
  html_text()

> grep("Maßnahmen", lines, value = TRUE)[1]
[1] "In vielen europäischen Ländern, etwa in Belgien und Dänemark, steht Erste Hilfe spätestens in der Sekundarstufe im Schullehrplan. Auch Großbritannien arbeitet an einem Gesetzesentwurf, der vorsieht, dass Grundschulkindern grundlegende Erste-Hilfe-Maßnahmen beigebracht werden. Die Schülerinnen und Schüler weiterführender Schulen sollen in Zukunft die Reanimation üben, also Beatmung und Herzdruckmassage.\n"

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


推荐阅读