例句>
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')
如何返回ent_type和hex值并使用str_replace_all替换成这样的句子:
Mr. Smith(PERSON)-#336 moved to San Francisco(LOC)-#7F7 in December(DATE)-#FF0.
答案 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."