str_replace_all基于基于数据帧的句子,使用r

时间:2019-02-24 18:40:55

标签: r regex stringr

例句>

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 :(得分:2)

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

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

NB:str_replace_all中的stringr无法正常工作,因为它不会在同一字符串上进行多次替换。有关讨论,请参见: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."