如何在R Shiny应用中渲染选择性着色文本?

j0pj023g  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(133)

我有一个很棒的应用程序,用户可以在其中上传简历。我正在使用人工智能从简历中提取技能,我想用不同于其他文本的颜色来渲染简历中的技能文本。
到目前为止,我得到的最接近的方法是问chatGPT,去想想。他/她/它给了我这个“解决方案”:

library(shiny)
library(stringi)

highlight_keywords <- function(text, keywords) {
  for (keyword in keywords) {
    text <- stri_replace_all_fixed(text, keyword, 
                               paste0("<span style='color:red'>", keyword, "</span>"),    vectorize_all = FALSE)
  }
  return(text)
}

ui <- fluidPage(
  textInput("text", "Text"),
  textInput("keywords", "Keywords"),
  textOutput("text")
)

server <- function(input, output) {
  output$text <- renderText({
    highlight_keywords(input$text, strsplit(input$keywords, ",")[[1]])
  })
}

shinyApp(ui, server)`

但实际呈现的是黑色的输入文本,html标签为纯文本-例如:
“我拥有数据科学背景,并拥有五年以上执行复杂统计分析以及构建和部署机器学习模型的实践经验。”
有谁知道为什么会发生这种情况,或者如何完成我正在努力完成的事情?
先谢了!

w6lpcovy

w6lpcovy1#

问题是默认情况下字符串中的所有HTML都被转义,因此会呈现为文本。为了防止这种情况,您必须将文本 Package 为HTML(),并从textOutput切换为htmlOutput

library(shiny)
library(stringi)

highlight_keywords <- function(text, keywords) {
  for (keyword in keywords) {
    text <- stri_replace_all_fixed(
      text, keyword,
      paste0("<span style='color:red'>", keyword, "</span>"),
      vectorize_all = FALSE
    )
  }
  return(text)
}

ui <- fluidPage(
  textInput("text", "Text"),
  textInput("keywords", "Keywords"),
  htmlOutput("text")
)

server <- function(input, output) {
  output$text <- renderText({
    text_high <- highlight_keywords(input$text, strsplit(input$keywords, ",")[[1]])
    HTML(text_high)
  })
}

shinyApp(ui, server)

相关问题