Выделение части текстовых строк и игнорирование знаков препинания и регистра в блестящем - PullRequest
0 голосов
/ 16 января 2019

Я пытался реализовать функцию подсветки, которая выделяет слова, которые соответствуют пользовательскому вводу из виджетов 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)
    })
  }
)

Как мне оптимизировать функцию выделения, чтобы иметь возможность выделять: «некоторые» в «чем-то», «тяжелое дыхание» в «штанах», «ванна» в «ВАННОЙ», «крестная» в «крестной» или даже «транспорт» в «транспорт». (со знаком пунктуации рядом со словом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...