【发布时间】:2018-01-08 11:35:05
【问题描述】:
我想从我的系统中上传 Shiny App 中的文本文件文件夹,以便从 Corpus 中获取其 Document Term Matrix 以应用 K-means。
我尝试了各种方法来做到这一点,但我无法在所有上传的文件之间建立连接以创建语料库。
我可以通过在全球环境中创建语料库来应用 K-means,但我想通过 ShinyApp 通过上传 文件夹 或选择 多个文件 来做到这一点。
以下是我到目前为止所做的代码:
library(shiny)
library(shinydashboard)
library(shinythemes)
library(shinyFiles)
library(tm)
ui <- dashboardPage(
dashboardHeader(title = "Document_Clustering"),
dashboardSidebar(
sidebarMenu(
menuItem("Data Processing", tabName = "DP", icon = icon("info-circle")),
menuItem("K-Means", tabName = "KMeans", icon = icon("th"))
)),
dashboardBody(
tabItems(
tabItem(tabName = "DP",
fluidRow(
box(fileInput('file1', 'Choose Files',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv'), multiple = TRUE)
, solidHeader = TRUE))
,fluidRow(
box(title = "Pre-processing", width = 15 ,tableOutput('proc'))
)
),
tabItem(tabName = "KMeans",
fluidRow(
box(
title = "Enter Number of Clusters:",
selectInput("C", choices =c(seq(1 , 15, 1)),label = NULL ,selected = 1), solidHeader = TRUE
)),
fluidRow(box(title = "Cluster", width = 9, textOutput("cluster1"))),
fluidRow(box(title = "Cluster Size", width = 9, textOutput("size1"))),
fluidRow(box(title= "Between Cluster Hetrogeneity" , width=9, textOutput("hetro1")))
)
)))
server <- shinyServer(function(input, output, session){
myData <- reactive({
inFile <- input$file1
if (is.null(inFile)) return(NULL)
con<- file(inFile$datapath, open="rt", encoding = "UTF-8")
text<-readLines(con)
msg<- paste(text, collapse = "\n")
close(con)
msg<- msg
myCorpus <- Corpus(VectorSource(msg))
myCorpus <- tm_map(myCorpus, tolower)
myCorpus <- tm_map(myCorpus, PlainTextDocument)
myCorpus<- tm_map(myCorpus,removePunctuation)
myCorpus <- tm_map(myCorpus, removeNumbers)
myCorpus <- tm_map(myCorpus, removeWords,stopwords("english"))
myCorpus <- tm_map(myCorpus, stripWhitespace)
dtm <- DocumentTermMatrix(myCorpus,control = list(minWordLength = 1))
dtm_tfxidf <- weightTfIdf(dtm)
m11 <- as.matrix(dtm_tfxidf)
ri <- m11
set.seed(1234)
### Only kmeans
n2 <- input$C
clusk <- kmeans(as.data.frame(ri), n2) #, nstart = 9)
T3<- list(Name= m11, Cluster_K=clusk$cluster, Size_K= clusk$size, Hetro_K=clusk$betweenss/clusk$totss*100)
})
output$proc <- renderTable({
myData()$Name
})
output$cluster1 <- renderText({
myData()$Cluster_K
})
output$size1 <- renderText({
myData()$Size_K
})
output$hetro1 <- renderText({
myData()$Hetro_K
})
})
shinyApp(ui= ui, server = server)
使用上述代码,我可以上传多个文件,但在进一步处理时出现错误。 错误:无效的“描述”参数,我无法解决。
此外,当我只上传单个文件时,一切似乎都可以正常工作,但 我不明白为什么单个文件的 kmeans 中的集群大小为 2 的原因。
非常感谢任何形式的帮助。
提前致谢!
【问题讨论】:
标签: r shiny k-means shiny-server shinydashboard