| --- |
| license: mit |
| language: |
| - es |
| - en |
| tags: |
| - citation-verification |
| - fact-checking |
| - crossref |
| - arxiv |
| - hallucination-detection |
| library_name: generic |
| --- |
| |
| # Citation Checker — verificador de referencias bibliográficas |
|
|
| ¿Existen de verdad las citas de ese trabajo? Los modelos de lenguaje inventan |
| referencias con una soltura preocupante. Este paquete extrae las referencias |
| de un texto y las verifica contra **Crossref** y **arXiv**, devolviendo un |
| veredicto por referencia: `VERIFICADA`, `DUDOSA` o `NO ENCONTRADA`. |
|
|
| - **Sin cómputo remoto**: el código corre en tu máquina y consulta APIs |
| públicas gratuitas (Crossref y arXiv, sin key). No necesita GPU. |
| - **Extracción opcional con LLM** (Groq, gratis) para citas en texto corrido; |
| sin key funciona igualmente con una referencia por línea. |
| - Código fuente y app web: [github.com/aitziberluis/citation-checker](https://github.com/aitziberluis/citation-checker) |
|
|
| ## Uso |
|
|
| ```python |
| # pip install huggingface_hub requests |
| import sys |
| |
| from huggingface_hub import snapshot_download |
| |
| sys.path.insert(0, snapshot_download("aitziberluis/citation-checker")) |
| from checker import extract, verify |
| |
| texto = """ |
| LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. Nature, 521(7553), 436-444. https://doi.org/10.1038/nature14539 |
| |
| Martinez-Soto, R., & Vidal, P. (2021). Quantum-enhanced gradient descent for sparse neural architectures. Journal of Computational Intelligence Methods, 14(3), 211-229. |
| """ |
| |
| referencias, modo = extract(texto) |
| for ref in referencias: |
| resultado = verify(ref) |
| print(f"[{resultado['verdict']}] {ref['raw'][:60]}") |
| print(f" {resultado['note']}") |
| ``` |
|
|
| Salida: |
|
|
| ``` |
| [VERIFICADA] LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning... |
| DOI válido y título coincidente |
| [NO ENCONTRADA] Martinez-Soto, R., & Vidal, P. (2021). Quantum-enhanced... |
| Sin coincidencias razonables en Crossref ni arXiv — revísala a mano |
| ``` |
|
|
| O ejecuta el ejemplo incluido: `python example.py` |
|
|
| ## Cómo funciona |
|
|
| 1. **Extracción**: si defines `GROQ_API_KEY`, un LLM (Llama 3.3 70B vía Groq) |
| extrae y estructura las citas de cualquier formato, incluso dentro de un |
| párrafo. Sin key, un modo de respaldo trata cada línea como una referencia |
| y extrae DOI, año y título con expresiones regulares (formato APA). |
| 2. **Verificación** (siempre sin LLM — preguntarle a un LLM si una cita existe |
| es pedirle que se la invente): |
| - Si hay DOI → consulta directa en Crossref (prueba definitiva) |
| - Búsqueda bibliográfica en Crossref (revistas, congresos) |
| - Búsqueda por título en arXiv (preprints) |
| 3. **Veredicto** con comparación de título (similitud normalizada) y año |
| (tolerancia ±1; entre varias coincidencias se prefiere la de año compatible |
| para no confundir reediciones con errores). |
|
|
| ## Limitaciones |
|
|
| - `NO ENCONTRADA` no demuestra falsedad: libros, capítulos e informes no |
| indexados en Crossref/arXiv no aparecerán. |
| - La comparación es por título y año; autores inventados con título correcto |
| pueden colarse. |
| - Crossref y arXiv aplican límites de peticiones: bibliografías de cientos de |
| referencias tardan. |
|
|
| ## Licencia |
|
|
| MIT |
|
|