Общая функция для получения частоты определенного слова в строке - PullRequest
1 голос
/ 26 апреля 2019

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

Пока что я занимаюсь созданием функции, которая принимает ввод строки и шаблона (то есть str,шаблон).Поскольку grep захватывает все паттерны в строке, я чувствовал, что length позаботится о захвате частоты выбранного паттерна.

word_count = function(str,pattern) {
   string = gsub("[[:punct:]]","",strsplit(str," "))
   x = grep("pattern",string,value=TRUE)
   return(length(x))
 }

Для фрейма данных (my_df) это выглядит так:

id                      description
123  "It is cozy and pretty comfy. I think you will have good time 
     here."
232  "NOT RECOMMENDED whatsover. You will suffer here."
3333 "BEACHES are awesome overhere!! Highly recommended!!"

...so forth(more than obs.15000)

Я фактически сделал всю часть описания строчными, так что на самом деле это выглядит примерно так:

id                      description
123  "it is cozy and pretty comfy. i think you will have good time 
     here."
232  "not recommended whatsover. you will suffer here."
3333 "beaches are awesome overhere!! highly recommended!!"

...so forth(more than obs.15000)

Тогда, что я действительно хочу, чтобы моя функция сделала:

word_count(my_df$description[1],recommended)
[1] 0 

word_count(my_df$description[3],highly)
[1] 1

Но что она делает:

word_count(my_df$description[1],recommended)
[1] 2 

word_count(my_df$description[3],highly)
[1] 2

По сути, это неправильный ответ.Надеюсь, я хочу использовать эту функцию для применения ко всем строкам в фрейме данных, и я планирую сделать это с помощью if.Тем не менее, при тестировании отдельных строк он, кажется, не выполняет ту работу, которую я хочу.

1 Ответ

3 голосов
/ 26 апреля 2019

Вы можете изменить функцию на

word_count = function(str,pattern) {
   sum(grepl(pattern, strsplit(str, " ")[[1]]))
}

Сначала мы разбиваем строку на пустое место (" "), затем ищем pattern в каждом слове, используя grepl.Поскольку grepl возвращает TRUE / FALSE значений для подсчета количества раз, когда pattern произошло, мы можем напрямую использовать sum.

Затем, когда вы попробуете функцию, она вернет вам ожидаемоеoutput.

word_count(df$description[1],"recommended")
#[1] 0
word_count(df$description[3],"highly")
#[1] 1

Однако обратите внимание, что в stringr есть функция str_count, которая может дать вам непосредственно количество вхождений для каждой строки

stringr::str_count(df$description, "recommended")
#[1] 0 1 1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...