В R как сопоставить и извлечь определенное слово из текста, независимо от формирования?

#r #pattern-matching

#r #сопоставление с образцом

Вопрос:

У меня есть следующий образец текста, и я хочу извлечь из текста только машинное обучение.

 text <- c("Machine Learning is my fav topic.", "I love machinelearning.")

ifelse((found <- regexpr("\sMachine Learning", text, 
                     perl =TRUE)) !=-1, substring(text, found, 
                          found attr(found,"match.length")), "nothing found")
  

Но это возвращает меня..

 "nothing found" "nothing found"
  

Я должен получить результат в виде:

 "Machine Learning", "machinelearning"
  

Ответ №1:

(?i) Делает регулярное выражение нечувствительным к регистру. Используйте шаблон ‘Machine’, за которым следует ноль или более пробелов ( \s* ), за которым следует ‘Learning’

 library(stringr)
unlist(str_extract_all(text, "(?i)Machine\s*Learning"))
#[1] "Machine Learning" "machinelearning" 
  

Ответ №2:

У меня есть 2 балла, пожалуйста, смотрите ниже:

1) Когда вы хотите выполнить поиск по обеим упомянутым вами фразам, вы должны использовать выражение как «machine s?обучение». Чем? после s пробел игнорируется.

2) Используйте regexpr для поиска соответствия, затем используйте функцию regmatches () для извлечения текста.

 > text <- c("Machine Learning is my fav topic.", "I love machinelearning.")
> m <- regexpr("machine\s?learning", text, perl=TRUE,  ignore.case = TRUE)
> regmatches (text, m)

[1] "Machine Learning" "machinelearning"