4.2 KiB
4.2 KiB
# instalar tesseract-ocr
sudo apt update && sudo apt upgrade -y
sudo apt install tesseract-ocr tesseract-ocr-spa poppler-utils
sudo apt install tesseract-ocr-all poppler-utils
function getTxtFromPdf() {
local pdf_path="$1"
local base_name=$(basename "$pdf_path" .pdf)
local tmp_prefix="pagina"
# Limpiar residuos anteriores
rm -f ${tmp_prefix}-*.png ${tmp_prefix}-*.txt salida_${base_name}.txt
# Convertir PDF a PNG por página
pdftoppm "$pdf_path" "$tmp_prefix" -png
# OCR cada imagen y concatenar en un solo archivo de salida
for img in ${tmp_prefix}-*.png; do
echo "Procesando $img..."
tesseract "$img" temp -l spa
cat temp.txt >> salida_${base_name}.txt
echo -e "\n\n---- FIN DE PÁGINA ----\n\n" >> salida_${base_name}.txt
done
rm -f temp.txt
echo "OCR completado. Archivo final: salida_${base_name}.txt"
}
getHighQualityTxtFromPdf() {
# Verificar que se proporcionó al menos un argumento
if [[ $# -lt 1 ]]; then
echo "Error: Debes especificar la ruta del archivo PDF." >&2
return 1
fi
local pdf_path="$1"
local base_name
base_name=$(basename "$pdf_path" .pdf)
local output_file="${2:-salida_hq_${base_name}.txt}" # Permitir archivo de salida opcional
local tmp_prefix="hq_pagina"
local lang="spa"
local dpi=1000
local oem=1
local psm=6
# Verificar existencia del archivo
if [[ ! -f "$pdf_path" ]]; then
echo "Error: El archivo '$pdf_path' no existe." >&2
return 1
fi
# Verificar dependencias
if ! command -v pdftoppm &> /dev/null || ! command -v tesseract &> /dev/null; then
echo "Error: Se requieren 'pdftoppm' y 'tesseract'." >&2
echo "Instala con: sudo apt install poppler-utils tesseract-ocr tesseract-ocr-spa" >&2
return 1
fi
# Limpiar residuos anteriores
rm -f "${tmp_prefix}-"*.png "$output_file" 2>/dev/null
echo "Convirtiendo PDF a imágenes de alta calidad (${dpi} DPI)..."
if ! pdftoppm -png -r "$dpi" -aa yes -aaVector yes "$pdf_path" "$tmp_prefix"; then
echo "Error al convertir PDF a imágenes." >&2
return 1
fi
# Contar número total de páginas generadas
local page_imgs=("${tmp_prefix}-"*.png)
local total_pages=${#page_imgs[@]}
if [[ $total_pages -eq 0 ]]; then
echo "Error: No se generaron imágenes del PDF." >&2
return 1
fi
echo "" > "$output_file"
local page_count=0
for img in "${page_imgs[@]}"; do
((page_count++))
echo "Procesando página $page_count: $img"
# Crear archivo temporal para esta página
local tmp_txt_file
tmp_txt_file=$(mktemp --suffix=.txt)
# OCR con configuraciones avanzadas
if ! tesseract "$img" "$tmp_txt_file" -l "$lang" --dpi "$dpi" --oem "$oem" --psm "$psm" \
-c tessedit_pageseg_mode=$psm \
-c preserve_interword_spaces=1 \
-c textord_debug_tabfind=0 \
-c textord_min_linesize=2.5 2>/dev/null; then
echo "Advertencia: OCR falló en $img. Reintentando con configuración básica..." >&2
tesseract "$img" "$tmp_txt_file" -l "$lang" --dpi "$dpi" 2>/dev/null || continue
fi
# Agregar texto al archivo final
cat "${tmp_txt_file}.txt" >> "$output_file"
# Separador de página
if [[ $page_count -lt $total_pages ]]; then
echo -e "\n\n---- FIN DE PÁGINA $page_count ----\n\n" >> "$output_file"
fi
# Limpieza
rm -f "$img" "${tmp_txt_file}.txt"
done
echo "Realizando post-procesamiento..."
sed -i 's/fi/fi/g; s/fl/fl/g; s/ff/ff/g; s/ffi/ffi/g; s/ffl/ffl/g' "$output_file"
sed -i '/^[[:space:]]*$/d' "$output_file"
sed -i 's/[[:space:]]\+/ /g' "$output_file"
echo -e "\n=============================="
echo " OCR COMPLETADO EXITOSAMENTE "
echo "=============================="
echo "Archivo final: $output_file"
echo "Páginas procesadas: $page_count"
echo "Tamaño final: $(du -h "$output_file" | cut -f1)"
}