Version optimizada de acep_postag que se adapta automaticamente al tamano del input. Implementa procesamiento por lotes (chunking) para grandes volumenes, cache de geocodificacion para evitar consultas repetidas, y estrategias de procesamiento adaptativas segun la cantidad de textos. Puede procesar desde 10 hasta millones de textos de forma eficiente.
Usage
acep_postag(
texto,
core = "es_core_news_lg",
bajar_core = TRUE,
inst_spacy = FALSE,
inst_miniconda = FALSE,
inst_reticulate = FALSE,
chunk_size = 1000,
geocode_cache_file = "geocode_cache.json",
use_cache = TRUE,
show_progress = TRUE
)Arguments
- texto
Vector de caracteres con los textos a procesar.
- core
Idioma del modelo de etiquetado POS del paquete
spacyr. Opciones disponibles: 'es_core_news_sm', 'es_core_news_md', 'es_core_news_lg' (espanol), 'pt_core_news_sm', 'pt_core_news_md', 'pt_core_news_lg' (portugues), 'en_core_web_sm', 'en_core_web_md', 'en_core_web_lg', 'en_core_web_trf' (ingles). Default: "es_core_news_lg".- bajar_core
Parametro booleano que define si descargar o no el modelo de etiquetado POS. Default: TRUE.
- inst_spacy
Parametro booleano que define si instalar o no spacy (Python). Default: FALSE.
- inst_miniconda
Parametro booleano que define si instalar o no miniconda. Default: FALSE.
- inst_reticulate
Parametro booleano que define si instalar o no el paquete
reticulate. Default: FALSE.- chunk_size
Tamano de los lotes para procesamiento chunking. Ajustar segun RAM disponible: 500 para sistemas con 2-4 GB RAM, 1000 para 8 GB RAM (default), 2000-5000 para 16+ GB RAM. Default: 1000.
- geocode_cache_file
Ruta del archivo JSON para guardar cache de geocodificacion. Permite evitar consultas repetidas a la API de Nominatim y compartir cache entre proyectos. Default: "geocode_cache.json".
- use_cache
Parametro booleano que activa/desactiva el sistema de cache de geocodificacion. Desactivar para forzar re-geocodificacion de todas las ubicaciones. Default: TRUE.
- show_progress
Parametro booleano que controla la visualizacion de mensajes de progreso durante el procesamiento. Util para operaciones largas. Default: TRUE.
Value
Lista con seis elementos en formato tabular:
texto_tag: Data frame con tokens etiquetados (POS, lemas, dependencias, etc.)texto_tag_entity: Data frame con entidades nombradas consolidadastexto_only_entity: Data frame con solo las entidades extraidastexto_only_entity_loc: Data frame con entidades de tipo LOC geocodificadas (lat/long)texto_nounphrase: Data frame con frases nominales consolidadastexto_only_nounphrase: Data frame con solo las frases nominales extraidas
Details
La funcion implementa dos estrategias de procesamiento automaticas:
Batch Processing (<= 100 textos): Procesa todos los textos en una sola llamada para maxima velocidad.
Chunking (> 100 textos): Divide los textos en lotes del tamano especificado en
chunk_sizepara controlar el uso de memoria y permitir procesamiento de grandes volumenes.
El sistema de cache de geocodificacion guarda las coordenadas de ubicaciones ya consultadas en formato JSON, evitando consultas repetidas a la API de Nominatim (que tiene limite de 1 req/seg). Esto puede reducir el tiempo de procesamiento en 50-90
Para datasets muy grandes (>100,000 textos), se recomienda procesar en lotes usando la funcion auxiliar proporcionada en los ejemplos y guardar resultados incrementalmente.
Examples
if (FALSE) { # \dontrun{
# Ejemplo basico con pocos textos
textos <- c(
"En Mar del Plata el SOIP declara la huelga en demanda de aumento salarial.",
"La manifestacion se realizo en Buenos Aires el 15 de marzo.",
"El presidente visito Cordoba para inaugurar la nueva planta."
)
resultado <- acep_postag(texto = textos, bajar_core = FALSE)
head(resultado$texto_tag)
# Ejemplo con dataset mediano y configuracion personalizada
resultado <- acep_postag(
texto = mis_1000_textos,
bajar_core = FALSE,
chunk_size = 500,
geocode_cache_file = "cache/ubicaciones_argentina.json",
use_cache = TRUE
)
# Ver ubicaciones geocodificadas
head(resultado$texto_only_entity_loc)
# Procesamiento incremental para datasets muy grandes
procesar_incremental <- function(textos, batch_size = 10000) {
dir.create("resultados", showWarnings = FALSE)
n_batches <- ceiling(length(textos) / batch_size)
for (i in 1:n_batches) {
start_idx <- (i - 1) * batch_size + 1
end_idx <- min(i * batch_size, length(textos))
batch <- textos[start_idx:end_idx]
resultado <- acep_postag(
texto = batch,
bajar_core = FALSE,
chunk_size = 2000,
use_cache = TRUE,
geocode_cache_file = "cache_global.json"
)
saveRDS(resultado, sprintf("resultados/batch_%04d.rds", i))
message(sprintf("Batch %d/%d completado", i, n_batches))
}
}
# Usar funcion incremental
procesar_incremental(mis_millones_de_textos, batch_size = 10000)
# Ver contenido del cache
cache <- jsonlite::read_json("geocode_cache.json", simplifyVector = TRUE)
print(paste("Ubicaciones en cache:", nrow(cache)))
} # }