Эй, я хотел бы извлечь имена из текста - моя схема идентификации заключается в том, что имена всегда начинаются с заглавной буквы, и в строке будет два или три слова с заглавной буквой. Кроме того, я объясняю тот факт, что мог существовать автор по имени «Джек младший Кости», поэтому я делаю «.» необязательный. Последним случаем может быть то, что в тексте есть учреждение со статьей, например «Театр Роберта Брауна», поэтому я хотел бы исключить все случаи, когда двум / трем словам с заглавной буквой предшествует «». Я делаю это с помощью негативного взгляда:
test <- test <- "A beautiful day for Jack Bones ended in the Robert Brown theater"
str_extract(test, "(?<!the\\s)(([A-Z][\\w]+\\s[A-Z][\\w]+[[:punct:]]?\\s[A-Z][\\w]+)|([A-Z][\\w]+\\s[A-Z][\\w]+))")
[1] "Jack Bones"
Но теперь я сталкиваюсь со следующей проблемой: если предложение начинается с «Театра Роберта Брауна», я тоже подхожу к этому шаблону. Я думал, что смогу будь умным и просто добавь "(? i) в отрицательном виде позади, но оказывается, что это не работает
test <- "The Robert Brown theater was nice, but Jack Bones did not enjoy his time there"
str_extract(test, "(?<!(?i)the\\s)(([A-Z][\\w]+\\s[A-Z][\\w]+[[:punct:]]?\\s[A-Z][\\w]+)|([A-Z][\\w]+\\s[A-Z][\\w]+))")
[1] "The Robert Brown"
Другая идея состояла в том, чтобы просто добавить условие или
str_extract(test, "(?<!(the\\s|The\\s))(([A-Z][\\w]+\\s[A-Z][\\w]+[[:punct:]]?\\s[A-Z][\\w]+)|([A-Z][\\w]+\\s[A-Z][\\w]+))")
[1] "The Robert Brown"
Тогда я попытался, сработает ли это, если использовать только «The» в отрицательном взгляде, и обнаружил, что даже это не сработает
str_extract(test, "(?<!The\\s)(([A-Z][\\w]+\\s[A-Z][\\w]+[[:punct:]]?\\s[A-Z][\\w]+)|([A-Z][\\w]+\\s[A-Z][\\w]+))")
[1] "The Robert Brown"
Теперь я немного не в курсе. Я не понимаю, почему отрицательный взгляд работает с «the», но не работает, если я использую «The». Буду признателен за любую помощь и понимание!