Использование немецких символов (ü, ö, ä и т. Д.) В текстовом анализе (R) - PullRequest
0 голосов
/ 03 ноября 2018

Я занимаюсь анализом текста в R. Текст, который я хочу проанализировать, написан на немецком языке.

Проблема в том, что немецкие символы не отображаются правильно ни в самом тексте, ни в результатах.

Я работаю в Mac OS.

Здесь я нашел похожие темы и опробовал предлагаемые решения:

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

, кажется, меняет язык (т.е. не выдает сообщение об ошибке), но символы по-прежнему отображаются неправильно, например Эрсте-Хильфе-Ма \ xa7nahmen вместо Эрсте-Хильфе-Масахмен .

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

Есть ли у вас другие решения?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Я опробовал первый вариант, предложенный @JBGruber (stringi), но он не сработал.

В итоге помогло сочетание следующих мер:

  • Sys.setlocale ("LC_ALL", "en_US.UTF-8")
  • В R Studio изменяется File> Reopen with Encoding на UTF-8
  • Сохранение файла снова явно в кодировке UTF-8

Я испробовал множество способов решения этой проблемы, включая все вышеупомянутые шаги независимо, но только этот помог.

0 голосов
/ 03 ноября 2018

Это немного зависит от того, что вы хотите сделать с файлами, но обычно 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")

Вы также можете попробовать создать вектор символов с помощью умляутов и посмотреть, правильно ли он отображается:

"äöü"

Обычно RStudio выше версии 0.93 не должно иметь проблем с этим. Надеюсь, это поможет.

Edit:

В комментариях выяснилось, что источник текста по-прежнему доступен в Интернете - я не рассматривал эту возможность. Часто возникают проблемы с кодировкой, потому что некоторые редакторы при сохранении файла вводят определенную кодировку. Если источник доступен онлайн, вы можете читать текст непосредственно в R, используя пакет rvest:

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 selectorgadget.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...