Рассмотрим следующее MWE в упражнении для интеллектуального анализа текста, используя R {tm}: Toyota имеет несколько моделей внедорожников в США. models<-c("highlander","land cruiser","rav4","sequoia","4runner")
. Общие средства массовой информации относятся к ним не как «toyota rav4» (корпус уже преобразован в нижний регистр), а как «rav4». Чтобы получить один столбец toyota suvs в DocumentTermMatrix, мне нужно преобразовать все эти бренды в один общий «toyota_suv». То, что я делаю сейчас, это повторить mycorpus<-tm_map(mycorpus, gsub, pattern="rav4", replacement="toyota_suv")
для длины (моделей). Взломам было бы установить model_names<-rep("toyota_suv",length(models))
и продолжить жизнь. Как настроить словарь со многими-к-одному, так что все models
заменяются на «toyota_suv» в одном выражении? Большое спасибо.R словарь: создать сопоставление «много-к-одному»
1
A
ответ
4
Вы можете использовать векторную функцию замещения. Пакет stringi
предлагает такую функцию с семейством функций stri_replace_all
. Здесь я использую stri_replace_all_fixed
, но при необходимости настраиваю чувствительность к регистру и другие параметры.
library(tm)
library(stringi)
toyota_suvs <- c("highlander","land cruiser","rav4","sequoia","4runner")
tm_map(toyCorp, stri_replace_all_fixed,
pattern = toyota_suvs, replacement = "toyota_suv",
vectorize_all = FALSE)
данные:
toyExample <- c("you don't know about the rav4, John Snow",
"the highlander is a great car",
"I want a land cruiser")
toyCorp <- Corpus(VectorSource(toyExample))
Спасибо. не открывая другого вопроса, как это соотносится с сопоставлением словарей с точки зрения времени? – Pradeep
@ Pradeep Я не знаю. Я думаю, вам нужно будет немного поработать над созданием примера набора документов и точно, какую продукцию вы хотите получить. Если вы хотите изменить сами входные документы (перед созданием корпуса), это будет трудно превзойти с помощью 'stringi' напрямую:' stri_replace_all_fixed (toyExample, pattern = toyota_suvs, replacement = "toyota_suv", vectorize_all = FALSE) '. Подача в 'tm_map' значительно замедлит процесс. – Jota
Если время является важным соображением, я бы отошел от пакета 'tm'. Возможно, вы можете попробовать 'quanteda', который имеет метод словаря, однако я не смог заставить его работать с помощью нескольких слов типа« сухопутный крейсер ». Таким образом, потребуется дополнительная обработка. – Jota