Чтобы этот код работал, вам необходимо сначала установить этот пакет: devtools::install_github("bmewing/mgsub")
.
Я также использую пакет tibble
для создания макета данных, который вы опубликовали в исходном сообщении.
NB: str_replace_all
из stringr
не будет работать, поскольку не выполняет многократных подстановок в одной и той же строке.Хорошее обсуждение смотрите: http://thug -r.life / post / 2018-01-10-safe-множественные строковые замены / .
# You need to install mgsub: devtools::install_github("bmewing/mgsub")
sentence <-"Mr. Smith moved to San Francisco in December."
df <- tibble::tribble(
~text, ~ent_type,
"Smith", "PERSON",
"San Francisco", "LOC",
"December", "DATE")
text2entity <- df$ent_type
names(text2entity) <- df$text
ent_type <- c('PERSON', 'ORG', 'LOC', 'DATE')
hex <- c('#336', '#F3C', '#7F7', '#FF0')
entity2hex <- sprintf("(%s)-%s", ent_type, hex)
names(entity2hex) <- ent_type
text2hex <- sprintf("%s%s", names(text2entity), entity2hex[df$ent_type])
names(text2hex) <- df$text
mgsub::mgsub(sentence,pattern=df$text,replacement=text2hex)
#> [1] "Mr. Smith(PERSON)-#336 moved to San Francisco(LOC)-#7F7 in December(DATE)-#FF0."