Я создал эту простую модель предсказания текста. Как мне интегрировать свой основной код в созданное мной приложение Shiny? Как создать вывод на основе кода R, который я создал с помощью блестящего приложения
library(tidyverse)
library(tidytext)
library(tm)
library(markovchain)
sherlock <- readLines('war.txt')
# Get chapter title
#chapter_title <- sherlock %>%
#filter(text != " ") %>%
#slice(c(4:15)) %>%
#pull(text) %>%
#tolower() %>%
#str_trim()
text_sherlock <- sherlock %>%
strsplit(" ") %>%
unlist()
text_sherlock %>% head(30)
fit_markov <- markovchainFit(text_sherlock)
for (i in 1:10) {
set.seed(i)
markovchainSequence(n = 5,
markovchain = fit_markov$estimate,
t0 = " ", include.t0 = T) %>%
# joint words
paste(collapse = " ") %>%
# create proper sentence form
str_replace_all(pattern = " ,", replacement = ",") %>%
str_replace_all(pattern = " [.]", replacement = ".") %>%
str_replace_all(pattern = " [!]", replacement = "!") %>%
str_to_sentence() %>%
print()
}
ui<- shinyUI(fluidPage(
# Application title
titlePanel("Shiny application to predict the next word"),
fluidRow(HTML(" <strong>Author: x </strong>") ),
fluidRow(HTML(" <strong>Date: 06-29-2020</strong>") ),
fluidRow(
br(),
p("This Shiny application acts as text predictior app ")),
br(),
br(),
fluidRow(HTML("<strong>Enter a word. Press \"Next words\" button to predict the following words</strong>") ),
fluidRow( p("\n") ),
# Sidebar layout
sidebarLayout(
sidebarPanel(
textInput("inputString", "Enter a word here",value = " "),
submitButton("Next words")
),
mainPanel(
h4("Predicted Next Word"),
verbatimTextOutput("prediction"),
textOutput('text1'),
textOutput('text2')
)
)
))
shinyApp(ui,server)
T0 в последовательности markovchain - это место, куда должно войти слово, введенное в приложении Shiny, и дать результат. Пример
markovchainSequence(n = 5,
markovchain = fit_markov$estimate,
t0 = "prince", include.t0 = T)
дал мне результат как:
[1] "Prince answered pierre, asked pierre, looked" [1] "Prince and stamped her father dismissed" [1] "Prince and converse in a momentary" [1] "Prince bowed and looking at four." [1] "Prince and fussily in a low" [1] "Prince bowed again turning to justify.”" [1] "Prince was an inquiring look at" [1] "Prince with a cousin of a" [1] "Prince and the last deciding seriously" [1] "Prince with the very nice, very"
the above output should come up in the final shiny output
1 ответ
Этот ответ будет неполным по двум причинам: (1) у меня нет этих пакетов, поэтому я сосредоточусь на функционировании вашего процесса и одном блестящем серверном компоненте, который будет его использовать, и (2) я не знаю какие еще функции у вас есть в вашем блестящем, поэтому я не знаю, как лучше всего включить их в эту структуру.
library(tidyverse) # dplyr, stringr
library(tidytext) # ?
library(tm) # ?
library(markovchain) # markov* funcs
library(shiny)
# global section, available to both ui/server
sherlock <- readLines('war.txt')
text_sherlock <- unlist(strsplit(sherlock, " "))
fit_markov <- markovchainFit(text_sherlock)
make_sentences <- function(word, n = 10, use.seed = FALSE) {
sapply(seq_len(n), function(i) {
if (use.seed) set.seed(i)
markovchainSequence(n = 5,
markovchain = fit_markov$estimate,
t0 = word, include.t0 = TRUE) %>%
# joint words
paste(collapse = " ") %>%
# create proper sentence form
str_replace_all(pattern = " ([!,.])", replacement = "\\1") %>%
str_to_sentence()
})
}
# ui component (no changes here)
ui <- shinyUI(fluidPage( ... ))
server <- function(input, output, session) {
sentences <- reactive({
make_sentences(input$inputString)
})
output$prediction <- renderText({ sentences() })
}
shinyApp(ui, server)
Я не знаю, какие у вас намерения в отношении input$text1
и 2, и я предполагаю, что многие из них будут использовать if input$inputString
. Надеюсь, я правильно угадаю.
Я решил разделить генератор предложений на его собственные реактивные данные, потому что часто (обычно?) Есть другой компонент HTML, который может использовать эти предложения для чего-то, например, для их подсчета, для поиска в них каких-то других `` мета '', кто знает . Как правило, в приложениях shiny
я предпочитаю, чтобы фактический рендеринг был как можно более простым: один вызов table
, один plot
и т. Д., Но без генерации данных в них если возможно. Обмен данными между реактивными компонентами - очень полезная функция.
Похожие вопросы
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.