Title: | Interactive Annotation of Text and Images |
---|---|
Description: | Annotate text with entities and the relations between them. Annotate areas of interest in images with your labels. Providing 'htmlwidgets' bindings to the 'recogito' <https://github.com/recogito/recogito-js> and 'annotorious' <https://github.com/recogito/annotorious> libraries. |
Authors: | Jan Wijffels [aut, cre, cph], Vrije Universiteit Brussel - DIGI: Brussels Platform for Digital Humanities [cph], Pelagios Network [cph] (code in inst/htmlwidgets/lib), CodePlex Foundation [cph] (code in inst/htmlwidgets/lib/openseadragon-2.4.2), OpenSeadragon contributors [cph] (code in inst/htmlwidgets/lib/openseadragon-2.4.2) |
Maintainer: | Jan Wijffels <[email protected]> |
License: | BSD_3_clause + file LICENSE |
Version: | 0.2.1 |
Built: | 2024-11-21 03:04:46 UTC |
Source: | https://github.com/digi-vub/recogito |
Functionality to label areas in images
annotorious( inputId = "annotations", src, tags = c(), type = c("annotorious", "openseadragon", "openseadragon-notoolbar"), quickselector = TRUE, width = NULL, height = NULL, elementId = NULL, dependencies = NULL )
annotorious( inputId = "annotations", src, tags = c(), type = c("annotorious", "openseadragon", "openseadragon-notoolbar"), quickselector = TRUE, width = NULL, height = NULL, elementId = NULL, dependencies = NULL )
inputId |
character string with the name to use where annotations will be put into |
src |
character string with the image/url to annotate |
tags |
character vector of possible labels you want to use |
type |
either |
quickselector |
logical indicating if for type |
width |
passed on to |
height |
passed on to |
elementId |
passed on to |
dependencies |
passed on to |
An object of class htmlwidget as returned by createWidget
Output and render functions for using annotorious within Shiny applications.
annotoriousOutput(outputId, width = "100%", height = "400px") renderAnnotorious(expr, env = parent.frame(), quoted = FALSE) openseadragonOutput(outputId, width = "100%", height = "400px") renderOpenSeaDragon(expr, env = parent.frame(), quoted = FALSE) openseadragonOutputNoToolbar(outputId, width = "100%", height = "400px") renderOpenSeaDragonNoToolbar(expr, env = parent.frame(), quoted = FALSE)
annotoriousOutput(outputId, width = "100%", height = "400px") renderAnnotorious(expr, env = parent.frame(), quoted = FALSE) openseadragonOutput(outputId, width = "100%", height = "400px") renderOpenSeaDragon(expr, env = parent.frame(), quoted = FALSE) openseadragonOutputNoToolbar(outputId, width = "100%", height = "400px") renderOpenSeaDragonNoToolbar(expr, env = parent.frame(), quoted = FALSE)
outputId |
output variable to read from |
width , height
|
Must be a valid CSS unit (like |
expr |
An expression that generates a annotorious |
env |
The environment in which to evaluate |
quoted |
Is |
An output element for use in a Shiny user interface.
Consisting of a toggle button to switch between rectangle / polygon mode and
the html-widget (id: outputId
) which contains an image (id: outputId
-img
)
if(interactive() && require(shiny)){ ## ## Annotorious using OpenSeaDragon, allowing to zoom in, ## to select an area, press shift and next select the area ## library(shiny) library(recogito) urls <- paste("https://upload.wikimedia.org/", c("wikipedia/commons/a/a0/Pamphlet_dutch_tulipomania_1637.jpg", "wikipedia/commons/6/64/Cat_and_dog_standoff_%283926784260%29.jpg"), sep = "") ui <- fluidPage(actionButton(inputId = "ui_switch", label = "Sample image"), openseadragonOutput(outputId = "anno"), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { current_image <- reactive({ input$ui_switch list(url = sample(urls, size = 1)) }) output$anno <- renderOpenSeaDragon({ info <- current_image() annotorious("annotations", tags = c("IMAGE", "TEXT"), src = info$url, type = "openseadragon") }) output$annotation_result <- renderPrint({ read_annotorious(input$annotations) }) } shinyApp(ui, server) ## ## Annotorious using OpenSeaDragon, allowing to zoom in, no selection possibilities ## showing how to load a local image ## library(shiny) library(recogito) url <- system.file(package = "recogito", "examples", "Pamphlet_dutch_tulipomania_1637.jpg") addResourcePath(prefix = "img", directoryPath = dirname(url)) ui <- fluidPage(openseadragonOutputNoToolbar(outputId = "anno", width = "100%", height = "250px")) server <- function(input, output) { output$anno <- renderOpenSeaDragonNoToolbar({ annotorious("annotations", src = sprintf("img/%s", basename(url)), type = "openseadragon-notoolbar") }) } shinyApp(ui, server) ## ## Annotorious without openseadragon ## library(shiny) library(recogito) url <- paste("https://upload.wikimedia.org/", "wikipedia/commons/a/a0/Pamphlet_dutch_tulipomania_1637.jpg", sep = "") ui <- fluidPage(annotoriousOutput(outputId = "anno", height = "600px"), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { output$anno <- renderAnnotorious({ annotorious("annotations", tags = c("IMAGE", "TEXT"), src = url, type = "annotorious") }) output$annotation_result <- renderPrint({ read_annotorious(input$annotations) }) } shinyApp(ui, server) ## ## Annotorious, without openseadragon changing the url ## library(shiny) library(recogito) urls <- paste("https://upload.wikimedia.org/", c("wikipedia/commons/a/a0/Pamphlet_dutch_tulipomania_1637.jpg", "wikipedia/commons/6/64/Cat_and_dog_standoff_%283926784260%29.jpg"), sep = "") ui <- fluidPage(actionButton(inputId = "ui_switch", label = "Sample image"), annotoriousOutput(outputId = "anno", height = "600px"), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { current_image <- reactive({ input$ui_switch list(url = sample(urls, size = 1)) }) output$anno <- renderAnnotorious({ info <- current_image() annotorious("annotations", tags = c("IMAGE", "TEXT"), src = info$url, type = "annotorious") }) output$annotation_result <- renderPrint({ read_annotorious(input$annotations) }) } shinyApp(ui, server) }
if(interactive() && require(shiny)){ ## ## Annotorious using OpenSeaDragon, allowing to zoom in, ## to select an area, press shift and next select the area ## library(shiny) library(recogito) urls <- paste("https://upload.wikimedia.org/", c("wikipedia/commons/a/a0/Pamphlet_dutch_tulipomania_1637.jpg", "wikipedia/commons/6/64/Cat_and_dog_standoff_%283926784260%29.jpg"), sep = "") ui <- fluidPage(actionButton(inputId = "ui_switch", label = "Sample image"), openseadragonOutput(outputId = "anno"), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { current_image <- reactive({ input$ui_switch list(url = sample(urls, size = 1)) }) output$anno <- renderOpenSeaDragon({ info <- current_image() annotorious("annotations", tags = c("IMAGE", "TEXT"), src = info$url, type = "openseadragon") }) output$annotation_result <- renderPrint({ read_annotorious(input$annotations) }) } shinyApp(ui, server) ## ## Annotorious using OpenSeaDragon, allowing to zoom in, no selection possibilities ## showing how to load a local image ## library(shiny) library(recogito) url <- system.file(package = "recogito", "examples", "Pamphlet_dutch_tulipomania_1637.jpg") addResourcePath(prefix = "img", directoryPath = dirname(url)) ui <- fluidPage(openseadragonOutputNoToolbar(outputId = "anno", width = "100%", height = "250px")) server <- function(input, output) { output$anno <- renderOpenSeaDragonNoToolbar({ annotorious("annotations", src = sprintf("img/%s", basename(url)), type = "openseadragon-notoolbar") }) } shinyApp(ui, server) ## ## Annotorious without openseadragon ## library(shiny) library(recogito) url <- paste("https://upload.wikimedia.org/", "wikipedia/commons/a/a0/Pamphlet_dutch_tulipomania_1637.jpg", sep = "") ui <- fluidPage(annotoriousOutput(outputId = "anno", height = "600px"), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { output$anno <- renderAnnotorious({ annotorious("annotations", tags = c("IMAGE", "TEXT"), src = url, type = "annotorious") }) output$annotation_result <- renderPrint({ read_annotorious(input$annotations) }) } shinyApp(ui, server) ## ## Annotorious, without openseadragon changing the url ## library(shiny) library(recogito) urls <- paste("https://upload.wikimedia.org/", c("wikipedia/commons/a/a0/Pamphlet_dutch_tulipomania_1637.jpg", "wikipedia/commons/6/64/Cat_and_dog_standoff_%283926784260%29.jpg"), sep = "") ui <- fluidPage(actionButton(inputId = "ui_switch", label = "Sample image"), annotoriousOutput(outputId = "anno", height = "600px"), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { current_image <- reactive({ input$ui_switch list(url = sample(urls, size = 1)) }) output$anno <- renderAnnotorious({ info <- current_image() annotorious("annotations", tags = c("IMAGE", "TEXT"), src = info$url, type = "annotorious") }) output$annotation_result <- renderPrint({ read_annotorious(input$annotations) }) } shinyApp(ui, server) }
Crop annotations to a bounding box
ocv_crop_annotorious(data, bbox)
ocv_crop_annotorious(data, bbox)
data |
an object as returned by |
bbox |
a vector with elements x, y, xmax, ymax |
data
where column polygon
and the rectangle information in x, y, width, height
is limited to the provided bounding box
library(opencv) data(openseadragon_areas) url <- attr(openseadragon_areas, "src") img <- ocv_read(url) bbox <- ocv_info(img) bbox <- c(xmin = 0, ymin = 0, xmax = bbox$width - 1, ymax = bbox$height - 1) x <- ocv_crop_annotorious(data = openseadragon_areas) x <- ocv_crop_annotorious(data = openseadragon_areas, bbox = bbox) img area <- x[2, ] ocv_polygon(img, pts = area$polygon[[1]], crop = TRUE) area <- x[1, ] ocv_rectangle(img, x = area$x, y = area$y, width = area$width, height = area$height) area <- x[3, ] ocv_rectangle(img, x = area$x, y = area$y, width = area$width, height = area$height)
library(opencv) data(openseadragon_areas) url <- attr(openseadragon_areas, "src") img <- ocv_read(url) bbox <- ocv_info(img) bbox <- c(xmin = 0, ymin = 0, xmax = bbox$width - 1, ymax = bbox$height - 1) x <- ocv_crop_annotorious(data = openseadragon_areas) x <- ocv_crop_annotorious(data = openseadragon_areas, bbox = bbox) img area <- x[2, ] ocv_polygon(img, pts = area$polygon[[1]], crop = TRUE) area <- x[1, ] ocv_rectangle(img, x = area$x, y = area$y, width = area$width, height = area$height) area <- x[3, ] ocv_rectangle(img, x = area$x, y = area$y, width = area$width, height = area$height)
Extract the areas of interests of an image
ocv_read_annotorious(data, image)
ocv_read_annotorious(data, image)
data |
an object as returned by |
image |
an ocv image object |
a list of ocv images with the extracted areas of interest
library(opencv) library(magick) data(openseadragon_areas) url <- attr(openseadragon_areas, "src") img <- ocv_read(url) areas <- ocv_read_annotorious(data = openseadragon_areas, image = img) areas[[1]] areas[[2]] img <- lapply(areas, FUN = function(x) image_read(ocv_bitmap(x))) img <- do.call(c, img) img <- image_append(img, stack = FALSE) image_resize(img, "x200")
library(opencv) library(magick) data(openseadragon_areas) url <- attr(openseadragon_areas, "src") img <- ocv_read(url) areas <- ocv_read_annotorious(data = openseadragon_areas, image = img) areas[[1]] areas[[2]] img <- lapply(areas, FUN = function(x) image_read(ocv_bitmap(x))) img <- do.call(c, img) img <- image_append(img, stack = FALSE) image_resize(img, "x200")
A dataset of annotations using openseadragon
data(openseadragon_areas) openseadragon_areas attr(openseadragon_areas, "src")
data(openseadragon_areas) openseadragon_areas attr(openseadragon_areas, "src")
Parse annotorious annotations
read_annotorious(x, src = character())
read_annotorious(x, src = character())
x |
a character string with json as returned by the htmlwidget |
src |
a character string with the image src which was used in |
a data.frame with annotations with columns: id, type, label, comment, x, y, width, height, polygon
and an attribute src
with the provided src
url <- paste("https://upload.wikimedia.org/", "wikipedia/commons/a/a0/Pamphlet_dutch_tulipomania_1637.jpg", sep = "") url <- system.file(package = "recogito", "examples", "Pamphlet_dutch_tulipomania_1637.jpg") x <- '[ { "type":"Annotation", "body":[{"type":"TextualBody","value":"IMAGE","purpose":"tagging"}], "target":{"selector":{ "type":"FragmentSelector", "conformsTo":"http://www.w3.org/TR/media-frags/", "value":"xywh=pixel:41,249.5234375,371,245"}}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#58f0096c-4675-4ea8-9f38-bffce0887ab8" }, { "type":"Annotation", "body":[{"type":"TextualBody","value":"TEXT","purpose":"tagging"}], "target":{"selector":{ "type":"FragmentSelector", "conformsTo":"http://www.w3.org/TR/media-frags/", "value":"xywh=pixel:46,5.523437976837158,371,239.99999952316284"}}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#50035dda-c62b-4f30-bf95-1879d60288a5"}]' anno <- read_annotorious(x, src = url) anno library(magick) img <- image_read(url) area <- head(anno, n = 1) image_crop(img, geometry_area(x = area$x, y = area$y, width = area$width, height = area$height)) area <- subset(anno, type == "RECTANGLE") allrectangles <- Map( x = area$x, y = area$y, width = area$width, height = area$height, f = function(x, y, width, height){ image_crop(img, geometry_area(x = x, y = y, width = width, height = height)) }) allrectangles <- do.call(c, allrectangles) allrectangles x <- '[ { "type":"Annotation", "body":[{"type":"TextualBody","value":"IMAGE","purpose":"tagging"}], "target":{"selector":{ "type":"FragmentSelector", "conformsTo":"http://www.w3.org/TR/media-frags/", "value":"xywh=pixel:43,244.5234375,362,252" }}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#4eaa8788-0c7e-42d2-b004-4d66b57018a1"}, { "type":"Annotation", "body":[{"type":"TextualBody","value":"TEXT","purpose":"tagging"}], "target":{"selector":{ "type":"SvgSelector", "value":"<svg> <polygon points=\\\"75,4 75,58 32,95 32,194 410,195 391,70 373,63 368,3 222,1.5\\\"> </polygon></svg>"}}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#8bf0a557-c847-4a07-91bc-68a98c499615"}]' x <- gsub(x, pattern = "\n", replacement = "") anno <- read_annotorious(x, src = url) anno anno$polygon library(opencv) img <- ocv_read(url) area <- subset(anno, type == "POLYGON") ocv_polygon(img, pts = area$polygon[[1]])
url <- paste("https://upload.wikimedia.org/", "wikipedia/commons/a/a0/Pamphlet_dutch_tulipomania_1637.jpg", sep = "") url <- system.file(package = "recogito", "examples", "Pamphlet_dutch_tulipomania_1637.jpg") x <- '[ { "type":"Annotation", "body":[{"type":"TextualBody","value":"IMAGE","purpose":"tagging"}], "target":{"selector":{ "type":"FragmentSelector", "conformsTo":"http://www.w3.org/TR/media-frags/", "value":"xywh=pixel:41,249.5234375,371,245"}}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#58f0096c-4675-4ea8-9f38-bffce0887ab8" }, { "type":"Annotation", "body":[{"type":"TextualBody","value":"TEXT","purpose":"tagging"}], "target":{"selector":{ "type":"FragmentSelector", "conformsTo":"http://www.w3.org/TR/media-frags/", "value":"xywh=pixel:46,5.523437976837158,371,239.99999952316284"}}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#50035dda-c62b-4f30-bf95-1879d60288a5"}]' anno <- read_annotorious(x, src = url) anno library(magick) img <- image_read(url) area <- head(anno, n = 1) image_crop(img, geometry_area(x = area$x, y = area$y, width = area$width, height = area$height)) area <- subset(anno, type == "RECTANGLE") allrectangles <- Map( x = area$x, y = area$y, width = area$width, height = area$height, f = function(x, y, width, height){ image_crop(img, geometry_area(x = x, y = y, width = width, height = height)) }) allrectangles <- do.call(c, allrectangles) allrectangles x <- '[ { "type":"Annotation", "body":[{"type":"TextualBody","value":"IMAGE","purpose":"tagging"}], "target":{"selector":{ "type":"FragmentSelector", "conformsTo":"http://www.w3.org/TR/media-frags/", "value":"xywh=pixel:43,244.5234375,362,252" }}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#4eaa8788-0c7e-42d2-b004-4d66b57018a1"}, { "type":"Annotation", "body":[{"type":"TextualBody","value":"TEXT","purpose":"tagging"}], "target":{"selector":{ "type":"SvgSelector", "value":"<svg> <polygon points=\\\"75,4 75,58 32,95 32,194 410,195 391,70 373,63 368,3 222,1.5\\\"> </polygon></svg>"}}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#8bf0a557-c847-4a07-91bc-68a98c499615"}]' x <- gsub(x, pattern = "\n", replacement = "") anno <- read_annotorious(x, src = url) anno anno$polygon library(opencv) img <- ocv_read(url) area <- subset(anno, type == "POLYGON") ocv_polygon(img, pts = area$polygon[[1]])
Parse recogito annotations
read_recogito(x, text = character())
read_recogito(x, text = character())
x |
a character string with json as returned by the htmlwidget |
text |
a character string with the text which was used in |
a data.frame with annotations with columns: id, type, label, chunk_text, chunk_start, chunk_end, relation_from, relation_to, chunk_comment
and an attribute text
with the provided text
x <- '[ { "type":"Annotation", "body":[ {"type":"TextualBody","value":"sdfsd","purpose":"commenting"}, {"type":"TextualBody","value":"Person","purpose":"tagging"}], "target":{"selector":[ {"type":"TextQuoteSelector","exact":"ngenious hero"}, {"type":"TextPositionSelector","start":42,"end":55}]}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#a4ea53d4-69f3-4392-a3dd-cbb7e9ad50cb" }, { "type":"Annotation", "body":[{"type":"TextualBody","value":"Person","purpose":"tagging"}, {"type":"TextualBody","value":"Location","purpose":"tagging"}], "target":{"selector":[{"type":"TextQuoteSelector","exact":"far and"}, {"type":"TextPositionSelector","start":70,"end":77}]}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#d7050196-2537-42bf-9d1b-a3f9e4c9fbc6" } ]' read_recogito(x)
x <- '[ { "type":"Annotation", "body":[ {"type":"TextualBody","value":"sdfsd","purpose":"commenting"}, {"type":"TextualBody","value":"Person","purpose":"tagging"}], "target":{"selector":[ {"type":"TextQuoteSelector","exact":"ngenious hero"}, {"type":"TextPositionSelector","start":42,"end":55}]}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#a4ea53d4-69f3-4392-a3dd-cbb7e9ad50cb" }, { "type":"Annotation", "body":[{"type":"TextualBody","value":"Person","purpose":"tagging"}, {"type":"TextualBody","value":"Location","purpose":"tagging"}], "target":{"selector":[{"type":"TextQuoteSelector","exact":"far and"}, {"type":"TextPositionSelector","start":70,"end":77}]}, "@context":"http://www.w3.org/ns/anno.jsonld", "id":"#d7050196-2537-42bf-9d1b-a3f9e4c9fbc6" } ]' read_recogito(x)
Functionality to tag text with entities and relations between these
recogito( inputId = "annotations", text, type = c("relations", "tags"), tags = c("Location", "Person", "Place", "Other"), mode = c("html", "pre"), annotations = "{}", width = NULL, height = NULL, elementId = NULL, dependencies = NULL )
recogito( inputId = "annotations", text, type = c("relations", "tags"), tags = c("Location", "Person", "Place", "Other"), mode = c("html", "pre"), annotations = "{}", width = NULL, height = NULL, elementId = NULL, dependencies = NULL )
inputId |
character string with the name to use where annotations will be put into |
text |
character string with the text to annotate |
type |
either 'relations' or 'tags' in order to label relations between tags or only plain tags |
tags |
character vector of possible tags |
mode |
either 'html' or 'pre' |
annotations |
character string with a predefined set of annotations |
width |
passed on to |
height |
passed on to |
elementId |
passed on to |
dependencies |
passed on to |
An object of class htmlwidget as returned by createWidget
txt <- "Josh went to the bakery in Brussels.\nWhat an adventure!" x <- recogito(inputId = "annotations", txt) x x <- recogito(inputId = "annotations", txt, type = "tags", tags = c("LOCATION", "TIME", "PERSON")) x txt <- "Lorem ipsum dolor sit amet consectetur adipiscing elit Quisque tellus urna placerat in tortor ac imperdiet sollicitudin mi Integer vel dolor mollis feugiat sem eu porttitor elit Sed aliquam urna sed placerat euismod In risus sem ornare nec malesuada eu ornare quis dui Nunc finibus fermentum sollicitudin Fusce vel imperdiet mi ac faucibus leo Cras massa massa ultricies et justo vitae molestie auctor turpis Vestibulum euismod porta risus euismod dapibus Nullam facilisis ipsum sed est tempor et aliquam sapien auctor Aliquam velit ligula convallis a dui id varius bibendum quam Cras malesuada nec justo sed aliquet Fusce urna magna malesuada" x <- recogito(inputId = "annotations", txt) x x <- recogito(inputId = "annotations", txt, type = "tags", tags = c("LOCATION", "TIME", "PERSON", "OTHER")) x ## ## Color the tags by specifying CSS - they should have .tag-{TAGLABEL} ## library(htmltools) cat(readLines(system.file(package = "recogito", "examples", "example.css")), sep = "\n") tagsetcss <- htmlDependency(name = "mytagset", version = "1.0", src = system.file(package = "recogito", "examples"), stylesheet = "example.css") x <- recogito(inputId = "annotations", txt, tags = c("LOCATION", "TIME", "PERSON", "OTHER"), dependencies = tagsetcss) x
txt <- "Josh went to the bakery in Brussels.\nWhat an adventure!" x <- recogito(inputId = "annotations", txt) x x <- recogito(inputId = "annotations", txt, type = "tags", tags = c("LOCATION", "TIME", "PERSON")) x txt <- "Lorem ipsum dolor sit amet consectetur adipiscing elit Quisque tellus urna placerat in tortor ac imperdiet sollicitudin mi Integer vel dolor mollis feugiat sem eu porttitor elit Sed aliquam urna sed placerat euismod In risus sem ornare nec malesuada eu ornare quis dui Nunc finibus fermentum sollicitudin Fusce vel imperdiet mi ac faucibus leo Cras massa massa ultricies et justo vitae molestie auctor turpis Vestibulum euismod porta risus euismod dapibus Nullam facilisis ipsum sed est tempor et aliquam sapien auctor Aliquam velit ligula convallis a dui id varius bibendum quam Cras malesuada nec justo sed aliquet Fusce urna magna malesuada" x <- recogito(inputId = "annotations", txt) x x <- recogito(inputId = "annotations", txt, type = "tags", tags = c("LOCATION", "TIME", "PERSON", "OTHER")) x ## ## Color the tags by specifying CSS - they should have .tag-{TAGLABEL} ## library(htmltools) cat(readLines(system.file(package = "recogito", "examples", "example.css")), sep = "\n") tagsetcss <- htmlDependency(name = "mytagset", version = "1.0", src = system.file(package = "recogito", "examples"), stylesheet = "example.css") x <- recogito(inputId = "annotations", txt, tags = c("LOCATION", "TIME", "PERSON", "OTHER"), dependencies = tagsetcss) x
Output and render functions for using recogito within Shiny applications and interactive Rmd documents.
recogitoOutput(outputId, width = "100%", height = "400px") renderRecogito(expr, env = parent.frame(), quoted = FALSE) recogitotagsonlyOutput(outputId, width = "100%", height = "400px") renderRecogitotagsonly(expr, env = parent.frame(), quoted = FALSE)
recogitoOutput(outputId, width = "100%", height = "400px") renderRecogito(expr, env = parent.frame(), quoted = FALSE) recogitotagsonlyOutput(outputId, width = "100%", height = "400px") renderRecogitotagsonly(expr, env = parent.frame(), quoted = FALSE)
outputId |
output variable to read from |
width , height
|
Must be a valid CSS unit (like |
expr |
An expression that generates a recogito |
env |
The environment in which to evaluate |
quoted |
Is |
An output element for use in a Shiny user interface.
Consisting of a div of class plaintext which contains an optional toggle button to switch
between annotation / relation mode (id: outputId
-toggle
) and
the html-widget (id: outputId
)
if(interactive() && require(shiny)){ ## ## Tagging only, no relations ## library(shiny) library(recogito) txt <- "Josh went to the bakery in Brussels.\nWhat an adventure!" ui <- fluidPage(tags$h3("Provide some text to annotate"), textAreaInput(inputId = "ui_text", label = "Provide some text", value = txt), tags$h3("Annotation area"), recogitotagsonlyOutput(outputId = "annotation_text"), tags$hr(), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { output$annotation_text <- renderRecogitotagsonly({ recogito("annotations", text = input$ui_text, tags = c("LOCATION", "TIME", "PERSON")) }) output$annotation_result <- renderPrint({ read_recogito(input$annotations) }) } shinyApp(ui, server) ## ## Tagging and relations ## library(shiny) library(recogito) txt <- "Josh went to the bakery in Brussels.\nWhat an adventure!" ui <- fluidPage(tags$h3("Provide some text to annotate"), textAreaInput(inputId = "ui_text", label = "Provide some text", value = txt), tags$h3("Annotation area"), recogitoOutput(outputId = "annotation_text"), tags$hr(), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { output$annotation_text <- renderRecogito({ recogito("annotations", text = input$ui_text, tags = c("LOCATION", "TIME", "PERSON")) }) output$annotation_result <- renderPrint({ read_recogito(input$annotations) }) } shinyApp(ui, server) } recogitoOutput(outputId = "annotation_text") recogitotagsonlyOutput(outputId = "annotation_text")
if(interactive() && require(shiny)){ ## ## Tagging only, no relations ## library(shiny) library(recogito) txt <- "Josh went to the bakery in Brussels.\nWhat an adventure!" ui <- fluidPage(tags$h3("Provide some text to annotate"), textAreaInput(inputId = "ui_text", label = "Provide some text", value = txt), tags$h3("Annotation area"), recogitotagsonlyOutput(outputId = "annotation_text"), tags$hr(), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { output$annotation_text <- renderRecogitotagsonly({ recogito("annotations", text = input$ui_text, tags = c("LOCATION", "TIME", "PERSON")) }) output$annotation_result <- renderPrint({ read_recogito(input$annotations) }) } shinyApp(ui, server) ## ## Tagging and relations ## library(shiny) library(recogito) txt <- "Josh went to the bakery in Brussels.\nWhat an adventure!" ui <- fluidPage(tags$h3("Provide some text to annotate"), textAreaInput(inputId = "ui_text", label = "Provide some text", value = txt), tags$h3("Annotation area"), recogitoOutput(outputId = "annotation_text"), tags$hr(), tags$h3("Results"), verbatimTextOutput(outputId = "annotation_result")) server <- function(input, output) { output$annotation_text <- renderRecogito({ recogito("annotations", text = input$ui_text, tags = c("LOCATION", "TIME", "PERSON")) }) output$annotation_result <- renderPrint({ read_recogito(input$annotations) }) } shinyApp(ui, server) } recogitoOutput(outputId = "annotation_text") recogitotagsonlyOutput(outputId = "annotation_text")