Регулярное выражение в R для извлечения высказываний, которые удовлетворяют отрицательному положению - PullRequest
0 голосов
/ 30 января 2019

У меня есть большое количество высказываний, каждое из которых содержит слово «хорошо» в различных положениях высказывания.Вот некоторые иллюстративные данные:

data <- c("well what the church meeting 's got to decide",
        "oh well yes those are those are normal things",
        "well they 've sent you a letter from hospital",
        "and i think well you cheeky sod you know",
        "'cos she 's well that day albert took me",
        "yeah well you 're going out anyway so you")

Я хотел бы извлечь те высказывания, которые удовлетворяют отрицательному позиционному критерию : это 'хорошо«не первое или второе слово в высказывании.Ожидаемый результат:

data <- c("and i think well you cheeky sod you know",
        "'cos she 's well that day albert took me")

Этот шаблон заставляет меня делать то, что я делаю не хочу извлечь:

grep("^well|^\\w*\\swell", data, perl = T, value = T)
[1] "well what the church meeting 's got to decide" "oh well yes those are those are normal things"
[3] "well they 've sent you a letter from hospital" "yeah well you 're going out anyway so you"    

Теперь трюк будет Отрицать этот шаблон.Я пробовал использовать отрицательный прогноз, но он не работает:

grep("(?!^well|^\\w*\\swell)", data, perl = T, value = T)
[1] "well what the church meeting 's got to decide" "oh well yes those are those are normal things"
[3] "well they 've sent you a letter from hospital" "and i think well you cheeky sod you know"     
[5] "'cos she 's well that day albert took me"      "yeah well you 're going out anyway so you"

Какое регулярное выражение в R будет выполнять искомое извлечение?Заранее спасибо.

1 Ответ

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

Вы можете использовать invert=TRUE для сторнирования ваших grep результатов, и ваш шаблон можно немного упростить:

> data <- c("well what the church meeting 's got to decide",
+         "oh well yes those are those are normal things",
+         "well they 've sent you a letter from hospital",
+         "and i think well you cheeky sod you know",
+         "'cos she 's well that day albert took me",
+         "yeah well you 're going out anyway so you")
> grep("^\\s*(?:\\w+\\s+)?well\\b", data, value=TRUE, invert=TRUE)
[1] "and i think well you cheeky sod you know"
[2] "'cos she 's well that day albert took me"

Нет необходимости использовать механизм PCRE для запуска этого шаблона.

Сведения о регулярном выражении

  • ^ - начало строки
  • \\s* - 0+ пробелов
  • (?:\\w+\\s+)?- сопоставление без захвата группы:
    • \\w+ - 1+ символов слова
    • \\s+ - 1+ пробелов
  • well\\b- целое слово well (\b - граница слова).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...