Я с большим удовлетворением привык к работе с texttat_collocation () от quanteda для извлечения MWE.Сейчас я пытаюсь извлечь все совпадения, которые соответствуют определенному шаблону, независимо от их частоты.
Моя цель - создать вектор символов, извлекая имена умений из dfm (), созданного с помощью шаблона регулярных выражений.Затем я буду использовать этот символьный вектор в аргументе "select" для построения dfm.Я мог бы также захотеть использовать этот символьный вектор для добавления в словарь, который я использую в качестве онтологии для построения dfms на более поздних стадиях конвейера.
Шаблон: «возрасте xx-xx», где x - это цифра.
Я использовал шаблон регулярного выражения "age \ s ([0-9] {2} - [0-9] {2})" здесь и получил желаемые совпадения.Но когда я пробую это в R (добавив дополнительный "\" перед "\ s"), я не получаю никаких совпадений.
Когда я делаю:
txt <- c("In India, male smokers aged 20-45 perceive brandX positively.",
"In Spain, female buyers aged 30-39 don't purchase brandY.")
ageGroups <- dfm(txt, select = "aged\\s([0-9]{2}-[0-9]{2})", valuetype = "regex")
featnames(ageGroups)
Я получаю:
character(0)
Однако, когда я пытаюсь:
ageGroups <- dfm(txt, select = "([0-9]{2}-[0-9]{2})", valuetype = "regex")
featnames(ageGroups)
Я получаю:
[1] "20-45" "30-39"
Кажется, я не могу захватить пустое пространство в регулярном выражении.Я рассмотрел много подобных вопросов в SO, возможно, , это , является наиболее актуальным, но я все еще не могу выполнить мою конкретную задачу.
Я также пытался:
tokens <- tokens(txt, remove_punct = FALSE, remove_numbers = FALSE, remove_symbols = FALSE)
tokensCompunded <- tokens_compound(tokens, pattern = "aged\\s([0-9]{2}-[0-9]{2})", valuetype = "regex")
attr(tokensCompunded, "types")
Но я получаю все токены обратно:
[1] "In" " " "India" "," "male" "smokers" "aged" "20-45" "perceive"
[10] "brandX" "positively" "." "Spain" "female" "buyers" "30-39" "don't" "purchase"
[19] "brandY"
Я думаю, что может быть несколько других более эффективных подходов для извлечения векторов символов с использованием regex (или glob) с помощью quanteda, и я 'Я счастлив узнать новые способы использования этого удивительного пакета R.
Спасибо за вашу помощь!
Изменить на оригинальный вопрос:
Этот другой вопрос в SO имеетаналогичное требование, то есть обнаружение многословных фраз с использованием объектов kwic, и может быть дополнительно расширено для достижения целей, указанных выше, со следующим дополнением:
kwicObject <- kwic(corpus, pattern = phrase("aged ([0-9]{2}-[0-9]{2})"), valuetype = "regex")
unique(kwicObject$keyword)