str_replace_all для предложения, основанного на кадре данных с использованием r - PullRequest
0 голосов
/ 24 февраля 2019

Пример предложения

sentence <-"Mr. Smith moved to San Francisco in December."

Это извлеченная сущность из пакета spacyr:

spacy_extract_entity(sentence)

enter image description here

и справочный списокЯ хочу назначить свой собственный шестнадцатеричный код для ent_type

ent_type <- c('PERSON', 'ORG', 'LOC',  'DATE')
hex      <- c('#336',  '#F3C', '#7F7', '#FF0')

Как я могу вернуть значение ent_type и hex и заменить его в предложении следующим образом, используя str_replace_all:

Mr. Smith(PERSON)-#336 moved to San Francisco(LOC)-#7F7 in December(DATE)-#FF0.

1 Ответ

0 голосов
/ 24 февраля 2019

Чтобы этот код работал, вам необходимо сначала установить этот пакет: 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."
...