Аккуратный фрейм данных: удаляются немецкие символы

Я использую следующий код для преобразования фрейма данных в аккуратный фрейм данных:

replace_reg <- "https://t.co/[A-Za-z\\d]+|http://[A-Za-z\\d]+|&amp;|&lt;|&gt;|RT|https"
unnest_reg <- "([^A-Za-z_\\d#@']|'(?![A-Za-z_\\d#@]))"
tidy_tweets <- tweets %>% 
filter(!str_detect(text, "^RT")) %>%
mutate(text = str_replace_all(text, replace_reg, "")) %>%
unnest_tokens(word, text, token = "regex", pattern = unnest_reg) %>%
filter(!word %in% custom_stop_words2$word,
     str_detect(word, "[a-zäöüß]"))

Однако это создает аккуратный фрейм данных, в котором немецкие символы üäöß удаляются из вновь созданного столбца слов, например, «wählen» становится двумя словами: «w» и «hlen», а специальный символ удаляется.

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

Может ли кто-нибудь указать мне в правильном направлении, как подойти к этой проблеме?


person mundos    schedule 25.07.2017    source источник
comment
Замените все A-Za-z на [:alpha:]. Ну, A-Za-z\\d можно заменить на [:alnum:]. Примечание: это не всегда работает, поэтому проверьте на своей стороне.   -  person Wiktor Stribiżew    schedule 25.07.2017
comment
если вы токенизируете пакет cleanNLP, вы можете использовать init_tokenizers(locale = "German)   -  person s.brunel    schedule 25.07.2017
comment
вы также можете изменить свой [A-Za-z] на шестнадцатеричный диапазон: asciitable.com и указать все символы, которые вы хотите сохранить. Вдоль строк [^\x20-\x7E] и просто добавьте \x{germanstuff} для остальных   -  person sniperd    schedule 25.07.2017
comment
Спасибо @WiktorStribiżew, [:alum:] почти добился цели! У меня все еще есть некоторые случайные буквы, которые отображаются как слова, но это не похоже на эту проблему.   -  person mundos    schedule 26.07.2017


Ответы (1)


Вам нужно заменить все A-Za-z\\d в выражениях в квадратных скобках на [:alnum:].

Класс символов POSIX [:alnum:] соответствует буквам и цифрам Unicode.

replace_reg <- "https://t.co/[[:alnum:]]+|http://[[:alnum:]]+|&amp;|&lt;|&gt;|RT|https"
unnest_reg <- "([^[:alnum:]_#@']|'(?![[:alnum:]_#@]))"

Если вы используете этот шаблон с функциями stringr, вы также можете вместо этого использовать [\\p{L}\\p{N}], как в

unnest_reg <- "([^\\p{L}\\p{N}_#@']|'(?![\\p{L}\\p{N}_#@]))"

где \p{L} соответствует любой букве Юникода, а \p{N} соответствует любой цифре Юникода.

person Wiktor Stribiżew    schedule 26.07.2017