---
name: extract_text_from_file
kind: function
lang: py
domain: core
version: "1.0.0"
purity: impure
signature: "extract_text_from_file(file_path: str) -> str"
description: "Extrae texto plano de un archivo. Soporta PDF (PyMuPDF), Markdown y TXT con deteccion automatica de encoding."
tags: [text, pdf, markdown, txt, encoding, extraction, file, io]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["os", "fitz (PyMuPDF)", "charset_normalizer", "chardet"]
params:
  - name: file_path
    desc: "ruta al archivo (PDF, MD o TXT)"
output: "string con texto extraido del archivo"
tested: true
tests:
  - "PDF con texto extrae contenido correctamente"
  - "archivo MD UTF-8 retorna contenido"
  - "archivo TXT latin-1 detecta encoding"
  - "archivo inexistente lanza FileNotFoundError"
  - "extension no soportada lanza ValueError"
test_file_path: "python/functions/core/extract_text_from_file_test.py"
file_path: "python/functions/core/extract_text_from_file.py"
---

## Ejemplo

```python
# PDF
text = extract_text_from_file("report.pdf")

# Markdown
text = extract_text_from_file("README.md")

# TXT con encoding desconocido
text = extract_text_from_file("notes.txt")
```

## Notas

Para PDF usa PyMuPDF (`fitz`) que produce mejor texto que PyPDF2, especialmente en PDFs con columnas o layout complejo. Las paginas se unen con `\n\n`.

La deteccion de encoding para archivos de texto sigue este orden de prioridad:
1. Intenta UTF-8 directamente
2. `charset_normalizer.from_bytes().best().encoding`
3. `chardet.detect(data)["encoding"]`
4. UTF-8 con `errors='replace'` como ultimo recurso

Diferencia con `extract_pdf_text_py_core`: esa funcion usa PyPDF2 y solo soporta PDF. Esta funcion usa PyMuPDF y soporta ademas MD y TXT con deteccion de encoding.
