str_replace_all 基于使用 r 的数据框的句子

str_replace_all on sentence based on dataframe using r

例句

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

这是从 spacyr 包中提取的实体:

spacy_extract_entity(sentence)

和查找列表我想为 ent_type

分配我自己的十六进制代码
ent_type <- c('PERSON', 'ORG', 'LOC',  'DATE')
hex      <- c('#336',  '#F3C', '#7F7', '#FF0')

我如何 return ent_type 和十六进制值并使用 str_replace_all:

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

要使此代码正常工作,您需要先安装此软件包:devtools::install_github("bmewing/mgsub")

我还使用 tibble 包来创建您在原始 post 中共享的模型数据框。

注意:stringr 中的 str_replace_all 将不起作用,因为它不会对同一字符串进行多次替换。有关精彩讨论,请参阅:http://thug-r.life/post/2018-01-10-safe-multiple-string-substitutions/.


# 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."