Big*_*ndy 3 text r character-encoding
我正在 R 中进行一些文本挖掘。我想要分析的文本是德语的。
\n\n问题是德语字符在文本本身或结果中都无法正确显示。
\n\n我正在 Mac 操作系统上工作。
\n\n我在这里找到了类似的线程并尝试了建议的解决方案:
\n\nSys.setlocale("LC_ALL", "de_DE.UTF-8")\nRun Code Online (Sandbox Code Playgroud)\n\n似乎改变了语言(即不给出错误消息),但字符仍然显示不正确,\ne.g。Erste-Hilfe-Ma\\xa7nahmen而不是Erste-Hilfe-Ma\xc3\x9fnahmen。
\n\ntext <- readLines("Erste Hilfe.txt", encoding="de_DE.UTF-8")\nRun Code Online (Sandbox Code Playgroud)\n\n结果:Erste-Hilfe-Ma\\xa7nahmen
\n\ntext <- readLines("Erste Hilfe.txt", encoding="ISO/IEC 8859-15")\nRun Code Online (Sandbox Code Playgroud)\n\n结果:Erste-Hilfe-Ma\\xa7nahmen
\n\n您还有其他解决方案吗?
\n这在一定程度上取决于您想要对文件执行的操作,但通常来说,即使保留编码,stri_read_lines()包中的变音符号也能很好地工作stringi"auto"
library(stringi)\n\nlines <- stri_read_lines("Erste Hilfe.txt", encoding = "auto")\nRun Code Online (Sandbox Code Playgroud)\n\n如果显示lines向量仍然有问题,可以尝试检测编码:
lines_raw <- stri_read_raw("Erste Hilfe.txt")\n\nstri_enc_detect(lines_raw)\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n在本例中,我读取了一个 UTF-8 格式的文本文件,其中包含许多变音符号,并且 stringi 可以正确猜测编码。但如果置信度不是那么高,您可能想尝试一些编码。
\n\n我也可以在控制台中毫无问题地显示它(尽管已将区域设置设置为 en_GB.UTF-8),但在某些情况下,这可能会导致问题。如果您想检查您的编码是否确实因读入文件而被破坏,或者控制台是否无法显示它,您可以尝试将这些行写回文件并检查:
\n\nstri_write_lines(lines, "Erste Hilfe_new.txt")\nRun Code Online (Sandbox Code Playgroud)\n\n您还可以尝试创建一个带有变音符号的字符向量,然后看看它是否正确显示:
\n\n"\xc3\xa4\xc3\xb6\xc3\xbc"\nRun Code Online (Sandbox Code Playgroud)\n\n通常,RStudio 0.93 以上版本应该不会有这个问题。希望这可以帮助。
\n\n在评论中,事实证明文本的来源仍然可以在互联网上找到 - 我没有考虑过这种可能性。通常会发生编码问题,因为某些编辑器在保存文件时强制使用某种编码。如果可以在线获取源代码,您可以使用该rvest包将文本直接读入 R:
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"\nRun Code Online (Sandbox Code Playgroud)\n\n请参阅他们的文档,了解如何确定 的正确输入html_nodes。我通常使用 chrome 扩展选择器小工具。