Я работаю над примитивным алгоритмом анализа речи. Теперь я хочу улучшить то, как он обрабатывает отрицания положительных/отрицательных утверждений. На данный момент я добавляю строку «НЕ_» только в том случае, если происходит прямое отрицание:
s_commentsOut$gsubContent <- gsub("not ","not NOT_",gsub("n't ","n't NOT_",s_commentsOut$lowCo))
Так например
"This is not good"
становится
"This is not NOT_good"
Теперь я хочу добиться того, чтобы «НЕ_» также добавлялось, когда между вектором целевых слов и отрицанием есть n символов, например:
targetList <- c("nice", "perfect", "good", "love")
Теперь с помощью приведенного выше списка следующая строка:
"This isn't a very good way"
должен стать
"This isn't a very NOT_good way"
Эта замена должна иметь место только в том случае, если отрицание происходит за n
(например, 15
) символов до цели, например. следующее не должно быть преобразовано (поскольку расстояние между целью и отрицанием равно > 15
):
"This is not going to work. However you did this very nicely."
Я нашел следующие статьи SO: Отрицание нескольких символов перед шаблоном
Как заменить символ в строке, но только если он встречается в подстроке с разделителями?
Но я изо всех сил пытаюсь понять это правильно. Тем временем я помогаю себе удалять из текста такие строки, как "нравится", "ан", "а"...
Дополнительные тестовые фразы:
"Nottingham is the love of my life."
"This is good. Nottingham is a town."
"This is not very good"
"This is not good. This is not good. This is not very good. This is nice. This very nice. This is not very nice."
ifelse(grepl('not|n\'t', x), gsub(sprintf("(?=%s)", paste(targetList, collapse = '|')), "NOT_", x, perl = TRUE), x)
- person rawr   schedule 28.10.2016