Как выполнить цикл, чтобы вывести все возможные предложения из поиска по ключевым словам в Shiny?

#html #r #shiny

#HTML #r #блестящий

Вопрос:

Я создал текстовый поиск, при котором при поиске слова отображаются все предложения, содержащие это слово. Однако я получаю только первое предложение выходных данных в Shiny, когда мне нужно отобразить все предложения, основанные на этом слове из загруженного текста..

 library(quanteda)
library(shiny)
library(tidyverse)
library(htmltools)
library(shinythemes)


war <- readLines("war.txt")


war_corpus <- corpus(war)


sentences <- tokens(war_corpus,what="sentence")


make_sentences <- function(word) {
  grep(word,sentences,value= TRUE)}


sentence_line <- function(word) {
  grep(word,sentences,value= FALSE)}



ui<- shinyUI(fluidPage(
  
  
  # Application title
  mainPanel(
    img(src='image.jpg', align = "right"),
    
    br(),
    br(),
    br(),
    
    fluidRow(
      column(2,
             h5(HTML("<strong>Enter a word.Click "SEARCH" </strong>")),
             wellPanel(
               textInput("inputString","Enter a word here",value=" "),
               submitButton("Search"),
             )),
      
      column(5,
             h4("Search Results"), 
             wellPanel(                       
               tags$style("#mytext { white-space: pre-line; }"),
               htmlOutput("mytext")
             )),
      
      column(5, offset = 1.5,
             h6("Uploaded File"),
             wellPanel(
               htmlOutput("showfile"))
      )
    )
    
  ),#Mainpanel
  
)#fluidpage
)#shinyUi



server <- function(input, output, session) {
  output$mytext <- renderUI({
    
    res <- make_sentences(input$inputString)[1]
    res1<- sentence_line(input$inputString)[1]
    tagList(
      tags$a(href=paste('#',res1,sep=""),res1),tags$div(res)
    )
    
  })
  output$showfile <- renderText({
    includeHTML("www/final_tokens.html")
  })
}
shinyApp(ui,server)
  

Как вы можете видеть на скриншоте, для слова ‘good’ я получаю первое предложение, в то время как на самом деле я должен получать все предложения со словом ‘good’ из текстового файла.(27 предложений, например, в слове ‘good’)

введите описание изображения здесь

Комментарии:

1. Почему вы вставляете [1] в make_sentences(input$inputString)[1] ? Не в этом ли причина?

2. удаление этой ошибки [1] : ‘Текст, который будет записан, должен быть длиной в один символьный вектор’

Ответ №1:

Это из-за [1] . В renderUI поместите:

 res <- make_sentences(input$inputString)
res1 <- sentence_line(input$inputString)
divs <- mapply(
  function(line, sentence){
    tags$div(tags$a(href = paste0("#",line), line), tags$p(sentence))
  }, res1, res, SIMPLIFY = FALSE)
do.call(tagList, divs)
  

Комментарии:

1. Я не получаю вывод html-страницы справа с вашим решением, а также номер строки текста —

2. lapply(1:m, function(i){ res <- make_sentences(input$inputString)[i] res1<- sentence_line(input$inputString)[i] — сработало для меня, но выводит почти 50 предложений, и когда word имеет только 10 вхождений, выдает 10 предложений, как я хотел, но после этого не дает ответа. в любом случае я могу выводить только найденные предложения и никаких NA после?

3. @d123 Извините, я кое-что забыл в a теге: это должно быть tags$a(href = paste0("#",line), line) . Я не понимаю, почему html-страница не отображается.