Найти бессмысленные слова в тексте - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть набор данных с ответами пользователей, знают ли они бренд или нет. Некоторые пользователи просто ответили на ерунду, как вы можете видеть на моем примере.

meinstring <- c("----asdada", "no idea", "C&A", "aaaaaaaaaa", "---", "adaosdjasodajsdoad")


spamidenfifier <- function(x) {
  verhaeltnis <- str_count(tolower(x), "[aeoiu]") / str_count(x)
  sequenz <- sum(sequence(rle(as.character(data.frame(strsplit(as.character(x), ""))[,1]))$lengths) >= 3, na.rm = TRUE)
  if(str_count(x) > 4) { weight <- 0.9 }  else {  weight <- 1  } ## Gewicht, weil unwahrscheinlicher bei längerem String
  variation_buchstaben <- (length(unique(data.frame(strsplit(as.character(x), ""))[,1])) / str_count(x) * weight)
  if(verhaeltnis < 0.2 | verhaeltnis > 0.8 | sequenz > 0 | variation_buchstaben < 0.5) {
    return(TRUE)
  } else {
    return(FALSE)
  }
}


sapply(meinstring, spamidenfifier)

Выход:

----asdada            no idea                C&A         aaaaaaaaaa                --- adaosdjasodajsdoad 
      TRUE              FALSE              FALSE               TRUE               TRUE              FALSE 

Моя функция работает не так уж плохо, но могут быть и лучшие решения. Есть ли пакет или лучший способ определить, было ли слово просто написано с ошибкой или кто-то ответил ерунду? Если нет, то предложения по улучшению этой функции очень ценятся!

edit: обновлены некоторые улучшения: -)

1 Ответ

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

Просто моя спонтанная идея:

meinstring <- c("----asdada", "no idea", "C&A", "aaaaaaaaaa", "---", "adaosdjasodajsdoad", "+-*-", "*-+-", "adfpdflrraaeea")

grepl('^\\W+$|(?:[-!@#$%^&*\\[\\]()";:_<>.,=+/ ]){2,}|[-!@#$%^&*\\[\\]()";:_<>.,=+/ ]{3,}|[aeoiu]{3,}',
meinstring , perl = T) & !grepl("iou|zweieiig", meinstring) # add the exceptions in the second grepl.

[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE

Нет идеального идеального решения.

...