【发布时间】:2017-04-04 04:43:58
【问题描述】:
我有一个用于注释文本文件的闪亮小应用程序。
- UI 提供
fileInput来选择.txt文件。其中一个文件是应用程序启动时的默认文件。 -
Next、Previous按钮允许用户一次显示一个句子的文件内容。 - 用户可以选择句子中的任何文本并单击
Add Markup按钮对句子进行注释。操作按钮触发 javascript 函数addMarkup()。 - 句子标记后显示。
我只在这里发布闪亮的应用程序代码。应用程序的完整代码在github repository
library(shiny)
ui <- fluidPage(
tags$head(tags$script(src="textselection.js")),
titlePanel("Corpus Annotation Utility"),
sidebarLayout(
sidebarPanel(
fileInput('fileInput', 'Select Corpus', accept = c('text', 'text','.txt')),
actionButton("Previous", "Previous"),
actionButton("Next", "Next"),
actionButton("mark", "Add Markup")
),
mainPanel(
tags$h1("Sentence: "),
htmlOutput("sentence"),
tags$h1("Sentence marked up: "),
htmlOutput("sentenceMarkedUp")
)
)
)
server <- function(input, output) {
sourceData <- reactive({
corpusFile <- input$fileInput
if(is.null(corpusFile)){
return(readCorpus('data/news.txt'))
}
readCorpus(corpusFile$datapath)
})
corpus <- reactive({sourceData()})
values <- reactiveValues(current = 1)
observeEvent(input$Next,{
if(values$current >=1 & values$current < length(corpus())){
values$current <- values$current + 1
}
})
observeEvent(input$Previous,{
if(values$current > 1 & values$current <= length(corpus())){
values$current <- values$current - 1
}
})
output$sentence <- renderText(corpus()[values$current])
}
shinyApp(ui = ui, server = server)
readCorpus() 函数如下所示:
readCorpus <- function(pathToFile){
con <- file(pathToFile)
sentences <- readLines(con, encoding = "UTF-8")
close(con)
return(sentences)
}
我的问题是如何在句子被注释后将它们保存到文件中?
更新: 我已经浏览了Persistent data storage in Shiny apps,并希望我能够遵循有关持久存储的文档。但是,我仍然不确定如何在标记后捕获句子。
【问题讨论】:
-
1) 在上面的代码和github上,我都找不到“标记代码”;没有使用
input$mark的功能,....我错过了什么,或者它可能在MyUtils.R内没有共享? 2)关于持久化数据存储环节:您正在寻找本地文件系统解决方案? -
@BigDataScientist 1) 用 JS 完成
-
我已更新 github 存储库以包含
MyUtils.R。关于持久数据存储 客户可以将文件保存在自己的机器上是理想的。 -
这里的问题是您的标记只是在模仿用户的选择,因此它没有在句子本身中硬编码,因此很难保存。您应该尝试使用
span,就像我在原始问题here 中建议的那样。这将硬编码字符串中的选择并使其易于保存。 -
你需要为每个句子捕获多个注释吗?