Я пытался реализовать функцию подсветки, которая выделяет слова, которые соответствуют пользовательскому вводу из виджетов textInput.
В настоящее время функция выделения подсвечивает точные слова, но не слова, являющиеся частью других больших слов, а также не распознает слова рядом со знаками препинания или слова в другом регистре.
library(shiny)
library(shinydashboard)
highlight <- function(text, search1, search2) {
if (search2 == "") search2 <- NA
x <- unlist(strsplit(text, split = " ", fixed = T))
x[tolower(x) %in% tolower(c(search1, search2))] <- paste0("<mark>",
x[tolower(x) %in% tolower(c(search1, search2))], "</mark>")
paste(x, collapse = " ")
}
shinyApp(
ui = fluidPage(
textInput("wordsearch1", "Search"),
textInput("wordsearch2", "Search"),
br(), br(),
htmlOutput("searchtext")
),
server = function(input, output, session) {
output$searchtext <- renderText({
outputed=""
wordgroup <- c('group1','group2','group3')
terms <- c('automobile, aerothermodynamic, godmother electricity, something pants ',
'BATHTUB, FUNDAMENTALIST, ENVIRONMENTAL, TRANSPORTATION ',
'The environmental fundamentalist left his pants in his godmother’s bathtub and used an electric auto for transport.'
)
composites <- data.frame(wordgroup, terms)
if(input$wordsearch1!="" | input$wordsearch2!=""){
words<-strsplit(input$wordsearch1,input$wordsearch2,",")
words<-as.character(words[[1]])
words<-tolower(words)
for(i in 1:length(words)){
composites <-composites [
grepl(words[i],composites $terms),]
}
if (dim(composites )[1]>0){
for(i in seq(from=1,to=dim(composites )[1])){
outputed<-paste(outputed,
paste("Group: ",composites [i,"wordgroup"]),
sep="<br/><br/>")
outputed<-paste(outputed,
highlight( paste("Terms: ",composites [i,"terms"]), input$wordsearch1, input$wordsearch2),
sep="<br/><br/>")
}
} else {outputed- "No terms found."}
}
HTML(outputed)
})
}
)
Как мне оптимизировать функцию выделения, чтобы иметь возможность выделять:
«некоторые» в «чем-то», «тяжелое дыхание» в «штанах», «ванна» в «ВАННОЙ», «крестная» в «крестной» или даже «транспорт» в «транспорт». (со знаком пунктуации рядом со словом).