#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-страница не отображается.