Обнаружение скороговорки с помощью str_detect - PullRequest
0 голосов
/ 06 января 2019

У меня есть несколько твитов, и я хочу определить количество смайликов в них. Для этой задачи я хочу использовать лексикон hash_emoticons пакета textclean.

hash_emoticons[1:5]
       x                 y
1:   #-) partied all night
2:    %)             drunk
3:   %-)             drunk
4: ',:-l        scepticism
5: ',:-|        scepticism

Если я использую его со стандартной функцией, я получаю эту ошибку:

library(stringr)

str_detect(Tweets$text, hash_emoticons$x)


longer object length is not a multiple of shorter object lengthError in 
stri_detect_regex(string, pattern, opts_regex = opts(pattern)): 
Incorrectly nested parentheses in regexp pattern. (U_REGEX_MISMATCHED_PAREN)

Есть идеи, как это исправить?

1 Ответ

0 голосов
/ 06 января 2019

Вот один из способов сделать это, используя пакет stringi напрямую. Однако есть некоторые граничные соображения, которые вам нужно объяснить / рассмотреть более внимательно

# Generate some data
xxx <- tibble(Text = c("asdasd", ":o)", "hej :o) :o) :-*"))

Вы хотите посчитать количество смайликов, которые используются в каждой строке, поэтому вам нужно учитывать обнаружение строки для каждого смайлика. str_detect() вернет наличие любых смайликов, но не чисел, поэтому вместо них мы будем использовать stri_count_fixed().

Например

library("stringi")
library("textclean")
# Run through each emoticon
# see if it matches each tweet
# Compute the number of hits
rowSums(sapply(lexicon::hash_emoticons$x, function(i) {
    stringi::stri_count_fixed(xxx$Text, pattern=i)
}))

, который возвращает

[1] 0 2 5

Теперь, если вы посмотрите на входную строку, то увидите 4 смайлика. Элемент :o) будет соответствовать двум смайликам :o и :o), поэтому второй элемент равен 2. И наоборот, строка hej :o) :o) :-* вернет 5, потому что она соответствует :o дважды, :o) дважды и :-* один раз.

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