Necesitaras tener o una instalación local en tu computador de CouchDB o una cuenta (gratis) en Cloudant para repetir los ejemplos aquí abajo.
Hay mucho mas que decir sobre CouchDB por supuesto. Por suerte la documentación es excelente.
Hay dos paquetes disponible en CRAN para conectar con CouchDB, y uno en Github que aun no esta publicado. El que escojí es preferencia personal, si ves una razón para mover el proyecto a otro paquete nos cuentas.
library(couchDB) # usa la version en mi rama en https://github.com/fvd/RcouchDB
conn <- couch_http_connection(host = "localhost")
couch_ping(conn)
## Response [http://localhost:5984/]
## Date: 2016-06-28 20:52
## Status: 200
## Content-Type: application/json
## Size: 151 B
## {"couchdb":"Welcome","uuid":"ac10c6c0eea8caf2a3dfcaabb42d46b9","version"...
Listo, si puedes hacer un ping a tu base de datos significa que tienes todo funcionando localmente. Lo que nos lleva a una herramienta nueva escrita por David Leonardo Gutierrez.
Para trabajar de una forma sensata con los PDF’s vamos a tener que separarlos en texto e imágenes. David Leonardo escribió una herramienta en .net para hacerlo la cual llamamos PDFCurdler. En el momento necesitarás usarlo en Windows y correrlo desde Visual Studio. Si necesitas más instrucciones avisanos para expandir el “leeme” del proyecto en github.
PDFcurdler lee un documento PDF y crea una carpeta con el nombre del documento y dos sub-carpetas “texto” y “Imagenes”. Para cada uno queremos crear un documento en Couchdb con el texto y con las imagenes como “attachment” binario. Esto nos rinde una carpeta con todos los documentos, que ahora podemos cargar uno por uno a CouchDB.
Despues de pasar los PDF con PDFCurdler vas a tener una carpeta con el contenido de acuerdo a la siguiente estructura (esto va a cambiar, mira los tiquetes abiertos en github):
nombre-documento
|_ Imagenes
|_ 1.jpg
|_ n.jpg
|_ Texto
|_ text.txt
Esa estructra la vamos a usar para el siguiente paso.
Ya probaste arriba que tu CouchDB arranco localmente. Obviamente también puedes crear una cuenta en Cloudant y usar un servicio en linea. Y con eso estas listo para crear una base de datos donde vas a guardar las actas:
couch_create_database(conn, "actas_dev")
## Response [http://localhost:5984/actas_dev]
## Date: 2016-06-28 20:52
## Status: 412
## Content-Type: application/json
## Size: 95 B
## {"error":"file_exists","reason":"The database could not be created, the ...
Y ahora pasamos el texto y las figuras a un documento en CouchDB con el nombre del archivo.
library(stringr)
# Puse las actas convertidas en una carpeta aparte
# (WD = Workding directory)
setwd("~/Documents/ActasTransparentes_WD/")
actas_convertidas <- list.dirs(full.names = TRUE)
texto_convertido <- str_subset(actas_convertidas, "Texto")
imagen_convertida <- str_subset(actas_convertidas, "Imagenes")
# Tenemos toda la informacion para subir el texto y las imagenes
sube_texto <- sapply(texto_convertido, function(x) {
#file <- list.files(x, full.names = TRUE)
#message(readLines(file))
doc_nombre <- str_split(x, "/")[[1]][3]
doc_texto <- readLines(paste(x, "/text.txt", sep=""), encoding="UTF-8")
# Ahora unimos todos las reglas en el vector doc_texto
doc_texto <- paste(doc_texto, collapse="")
doc_couchdb <- couch_new_object(list("texto"=doc_texto), database="actas_dev", key=doc_nombre)
couch_store(conn, doc_couchdb)
print(x)
})
sube_imagenes <- sapply(texto_convertido, function(x) {
# TODO:
# obten URL del documento (acta)
# por cada imagen, subelo como attachment
})
El diseño ideal del documento esta aún abierto a discusion y empezamos con la forma mas simple para hacer una prueba de concepto. El resultado de arriba es un documento con un ID y un campo “texto” que contiene todo el texto del acta.
Te funcionó hasta aquí? Encontraste errores? Visto como hacerlo mejor? Cuéntanos en la siguiente reunión.