diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 30b6d45..582db2f 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.10.1" + ".": "0.10.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a83464..ef47263 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,20 @@ desde los Conventional Commits y bumpea `pyproject.toml`. Al mergear ese PR se c `vX.Y.Z` y el GitHub Release. Las secciones por debajo de `[0.3.0]` son el historial previo a la conexión del tooling (se mantuvieron a mano); de acá en adelante las gestiona el bot. +## [0.10.2](https://github.com/complexluise/bib2graph/compare/v0.10.1...v0.10.2) (2026-06-30) + + +### Bug Fixes + +* **sources:** error accionable ante 429 de OpenAlex en seed y chaining ([#210](https://github.com/complexluise/bib2graph/issues/210)) ([a2a8106](https://github.com/complexluise/bib2graph/commit/a2a810623702a2696e01ef6266144fdb66e168a4)) +* **sources:** error accionable ante 429 de OpenAlex en seed y chaining ([#210](https://github.com/complexluise/bib2graph/issues/210)) ([c05090f](https://github.com/complexluise/bib2graph/commit/c05090f1f8437e9e448dddf15c6ec6500be8fb6f)) +* **test:** idempotencia bit-a-bit pegaba a OpenAlex en vivo (flake en CI) ([#219](https://github.com/complexluise/bib2graph/issues/219)) ([de14401](https://github.com/complexluise/bib2graph/commit/de1440102378d10d6ec50568d6adbe6867fe09be)) + + +### Performance Improvements + +* **stores:** upsert masivo Arrow en DuckDBStore.persist ([#211](https://github.com/complexluise/bib2graph/issues/211)) ([#226](https://github.com/complexluise/bib2graph/issues/226)) ([08258ee](https://github.com/complexluise/bib2graph/commit/08258eec4dafd6e2469b14f68958303ee4fc7cad)) + ## [0.10.1](https://github.com/complexluise/bib2graph/compare/v0.10.0...v0.10.1) (2026-06-30) diff --git a/docs/guias/curacion-prisma.md b/docs/guias/curacion-prisma.md new file mode 100644 index 0000000..a72e0e1 --- /dev/null +++ b/docs/guias/curacion-prisma.md @@ -0,0 +1,289 @@ +--- +title: Curación PRISMA paso a paso +--- + +# Curación PRISMA paso a paso + +La **curación** es donde TÚ decides qué papers quedan. PRISMA es una estructura +que ordena esa decisión en 4 fases, sin arbitrariedad. + +Esta guía: cómo aplicar PRISMA con bib2graph. + +!!! info "Alcance" + - Para alguien que tiene un corpus de siembra/forrajeo (~200–500 papers) + - Toma: 2–3 horas (depende del corpus) + - Herramienta: bib2graph CLI, Excel, Google Sheets + - Salida: corpus curado (100–300 ACCEPTED papers) + +--- + +## Las 4 fases PRISMA + +``` +IDENTIFICACIÓN +├─ ¿Duplicado? +├─ ¿Retractado? +└─ ¿Idioma? + +CRIBADO (Screening) +├─ Título relevante? +└─ Resumen toca el tema? + +ELEGIBILIDAD +├─ ¿Acceso al texto completo? +└─ ¿Métodos/resultados claros? + +INCLUSIÓN (Decisión final) +├─ ¿Relevancia alta? +└─ ¿Contribuye al SOTA? +``` + +Cada fase es un filtro. Al final: papers **ACCEPTED** (sí, quedan), +**REJECTED** (no, descartar), **CANDIDATE** (quizá más tarde). + +--- + +## Paso 1 — Extrae el corpus a CSV + +### Con CLI + +```bash +b2g curate dump --scope all > curate.csv +``` + +Abre el CSV en Excel o Google Sheets. Columnas: + +| id | title | authors | year | abstract | status | +|----|-------|---------|------|----------|--------| +| 1 | "Multilingual..." | Smith et al | 2020 | "This paper..." | PENDING | + +Nota: el CSV tiene campos adicionales (DOI, source_id, etc.), pero esos 6 te interesan. + +### Con agente + +```text +Exportá mi corpus a CSV con: +- id +- title +- authors +- year +- abstract +- Una columna "status" donde pueda escribir ACCEPTED/REJECTED/CANDIDATE + +Dame el CSV para descargarlo. +``` + +--- + +## Paso 2 — Criterios explícitos por fase + +Antes de curar, **documentá tus criterios**. Esto es clave para reproducibilidad. + +### IDENTIFICACIÓN + +| Criterio | Acción | +|----------|--------| +| ¿Título exactamente idéntico a otro? | REJECTED (duplicado) | +| ¿DOI retractado según Retraction Watch? | REJECTED (retractado) | +| ¿Idioma ≠ inglés? | REJECTED (si tu scope es inglés) | + +### CRIBADO + +| Criterio | Acción | +|----------|--------| +| Título no menciona ningún término clave de tu pregunta | REJECTED | +| Resumen sugiere que toca el tema pero tangencialmente | REJECTED | +| Título + resumen = claramente relevante | ACEPTA para elegibilidad | + +### ELEGIBILIDAD + +| Criterio | Acción | +|----------|--------| +| Texto completo no disponible (paywall, pdf no existe) | CANDIDATE (revisás después) | +| Métodos o resultados vagos/especulativos | CANDIDATE (quizá sirva) | +| Métodos/resultados claros y reproducibles | ACEPTA para inclusión | + +### INCLUSIÓN + +| Criterio | Acción | +|----------|--------| +| Relevancia alta + aporta al SOTA | ACCEPTED | +| Relevancia media pero aporta una perspectiva diferente | ACCEPTED | +| Baja relevancia + poco aporte | REJECTED | + +--- + +## Paso 3 — Cura el CSV + +### Estrategia: **dos pasadas** + +**Pasada 1 (rápida):** Título + abstract, sin pensar mucho. REJECTED o ACCEPTED. +**Pasada 2 (lenta):** Los PENDING. Aquí pensás, decidís CANDIDATE o ACCEPTED. + +### Proceso manual + +Abre el CSV en Excel/Sheets. Para cada fila: + +1. Lee **título** +2. Lee **abstract** (si hay) +3. Aplica **criterios de tu fase actual** (IDENTIFICACIÓN → CRIBADO → ELEGIBILIDAD → INCLUSIÓN) +4. Escribe en columna `status`: `ACCEPTED`, `REJECTED`, o `CANDIDATE` + +### Con agente (semi-automático) + +```text +Ayudame a curar este corpus. Para cada paper, dame un recomendación: + +Criterios: +- REJECTED si: título fuera de [TU TEMA], no hay métodos claros, es un duplicado +- CANDIDATE si: texto completo no disponible, relevancia media +- ACCEPTED si: relevancia alta, aporta al SOTA + +Paper 1: +- Título: "Multilingual Search in Social Networks" +- Año: 2015 +- Abstract: "We propose a method..." +- Tu recomendación: ? + +[Y así con los demás...] +``` + +El agente propone, tú tomas la decisión final. + +--- + +## Paso 4 — Aplica en bib2graph + +Cuando termines el CSV con tus decisiones: + +```bash +b2g curate apply curate.csv +``` + +bib2graph actualiza el corpus: ACCEPTED quedan en el corpus, REJECTED se marcan, +CANDIDATE quedan pero como "en revisión". + +### Verificación + +```bash +b2g read stats +``` + +Debería mostrar algo así: + +``` +Status breakdown: +- ACCEPTED: 245 papers (main corpus) +- REJECTED: 95 papers +- CANDIDATE: 30 papers +``` + +--- + +## Paso 5 — Revisa outliers + +Después de curar, revisa: + +### Papers más antiguos ACCEPTED + +```bash +b2g read list --status ACCEPTED | sort -k3 | head -5 +``` + +¿Son fundacionales o ruido? Si ruido, marca como REJECTED. + +### Papers sin abstract + +```bash +b2g read list --status ACCEPTED | grep "abstract: null" +``` + +Sin resumen, es más riesgo. CANDIDATE o REJECTED. + +### Gráfico temporal + +```bash +b2g read stats --group-by year +``` + +¿El corpus está concentrado en 3 años o distribuido? (Distribuido = más robusto) + +--- + +## Paso 6 — Documenta tu decisión + +Guardá un archivo `CURATION_NOTES.md`: + +```markdown +# Curación PRISMA — [Tu tema] + +## Decisión tomada: 2024-06-30 + +### Criterios de Identificación +- Duplicados: rechazados sin revisar +- Idioma: solo inglés +- Retractados: 0 encontrados + +### Criterios de Cribado +- Título debe mencionar "recuperación de información" O "multilingual" +- Resumen debe proponer un método/enfoque (no solo reseña) + +### Criterios de Elegibilidad +- Texto completo disponible = más peso que CANDIDATE +- Métodos reproducibles = ACCEPTED + +### Criterios de Inclusión +- Relevancia media + aporta perspectiva nueva = ACCEPTED +- Relevancia baja = REJECTED (sin excepciones) + +### Resultado +- Comenzamos con: 315 papers +- Rechazados: 70 +- Candidatos (para revisar después): 20 +- Aceptados (corpus final): 225 + +### Nota +Si después encontramos papers clave en los CANDIDATE, +los movemos a ACCEPTED. La curación es iterativa. +``` + +--- + +## Checklist + +- [ ] Extraje corpus a CSV (`b2g curate dump`) +- [ ] Documenté criterios PRISMA de cada fase +- [ ] Curé el CSV: cada paper tiene status (ACCEPTED/REJECTED/CANDIDATE) +- [ ] Apliqué cambios: `b2g curate apply curate.csv` +- [ ] Verifiqué con `b2g read stats` — corpus final es 100–300 papers +- [ ] Documenté notas de curación en CURATION_NOTES.md + +--- + +## Errores comunes + +❌ **"Voy a curar rápido, sin criterios."** +→ Resultado: decisiones inconsistentes, imposible reproducir. + +✅ **Documentá criterios primero, cura segundo.** + +--- + +❌ **"Si una paper parece remotamente relevante, la acepto."** +→ Resultado: corpus con ruido, análisis de redes confuso. + +✅ **Sé estricto. Es OK rechazar.** + +--- + +❌ **"Curación es para perfeccionistas."** +→ Curación define la calidad del análisis que sigue. No es opcionable. + +✅ **Invierte 2–3 horas aquí, ahorra 10 después.** + +--- + +## Siguiente + +Cuando tengas un corpus ACCEPTED limpio: +- [Guía: Leer las 5 redes](leer-redes.md) diff --git a/docs/guias/ecuacion-busqueda.md b/docs/guias/ecuacion-busqueda.md new file mode 100644 index 0000000..e123f40 --- /dev/null +++ b/docs/guias/ecuacion-busqueda.md @@ -0,0 +1,254 @@ +--- +title: Cómo armar una ecuación de búsqueda que NO trae basura +--- + +# Cómo armar una ecuación de búsqueda que NO trae basura + +Una **ecuación de búsqueda** es cómo le dices a OpenAlex exactamente qué buscar. +Si la haces mal, traes 50.000 papers. Si la haces bien, traes 200 relevantes. + +Esta guía es una receta para llegar a una ecuación acotada, testeada, sin ruido. + +!!! info "Alcance" + - Para alguien que tiene una pregunta de investigación clara + - Toma: 30 minutos de escritura + testing + - Herramienta: lápiz/papel, OpenAlex (o bib2graph), un agente opcional + +--- + +## La estructura de una ecuación + +``` +(concepto_A1 OR concepto_A2 OR concepto_A3) +AND (concepto_B1 OR concepto_B2) +AND (concepto_C1 OR concepto_C2) +``` + +**Cada paréntesis = un concepto central de tu pregunta.** +**Dentro del paréntesis = sinónimos unidos por OR.** +**Entre paréntesis = AND (todos deben estar presentes).** + +### Ejemplo real + +**Tu pregunta:** "¿Cómo se abordan los problemas de recuperación de información +en contextos multilingües?" + +**Desglose en 3 conceptos:** + +1. **Concepto A (la tarea):** recuperación de información, IR, search, retrieval +2. **Concepto B (la restricción):** multilingual, cross-lingual, polyglot, language-independent +3. **Concepto C (el tipo de artefacto):** method, approach, framework, system, architecture + +**Tu ecuación:** + +``` +(information retrieval OR IR OR search OR retrieval) +AND (multilingual OR cross-lingual OR language-independent OR polyglot) +AND (method OR approach OR framework OR system) +``` + +--- + +## Paso 1 — Identifica 3 conceptos clave + +Desde tu pregunta de investigación, extrae **3 dimensiones**: + +| Pregunta | Concepto A | Concepto B | Concepto C | +|----------|-----------|-----------|-----------| +| ¿Cómo se abordan problemas de IR en contextos multilingües? | IR/recuperación | Multilingüe | Métodos/enfoques | +| ¿Cuál es el estado del arte en alineación de valores en LLMs? | Alineación/alignment | LLM/lenguaje grande | Enfoques/métodos | +| ¿Qué métodos existen para detección de fake news en redes sociales? | Fake news/desinformación | Redes sociales/social media | Detección/identificación | + +**Checklist:** + +- [ ] ¿Cada concepto es una dimensión clara de mi pregunta? +- [ ] ¿Están en orden de especificidad (A = más genérico, C = más acotado)? +- [ ] ¿Me falta un cuarto concepto que quite mucho ruido? + +--- + +## Paso 2 — Genera sinónimos para cada concepto + +Para cada concepto, escribe **2–4 sinónimos** que un paper podría usar. + +### Truco: búsqueda rápida + +Abre Google Scholar o bib2graph y busca directamente un término de cada concepto. +Mira los títulos de los primeros 10 papers: ¿qué palabras ves repetidas? + +### Ejemplo + +**Concepto A (IR):** +- information retrieval ✓ +- information seeking ✓ +- search ✓ +- retrieval ✗ (demasiado genérico, traería biología) + +**Concepto B (Multilingüe):** +- multilingual ✓ +- cross-lingual ✓ +- language-agnostic ✓ +- polyglot ✓ + +**Concepto C (Métodos):** +- method ✓ +- approach ✓ +- framework ✓ +- system ✓ +- algorithm ✗ (muy específico, traería solo papers de algoritmos) + +--- + +## Paso 3 — Arma la ecuación + +Copia el template: + +``` +(concepto_A1 OR concepto_A2 OR concepto_A3) +AND (concepto_B1 OR concepto_B2) +AND (concepto_C1 OR concepto_C2) +``` + +Reemplaza con tus sinónimos: + +``` +(information retrieval OR information seeking OR search) +AND (multilingual OR cross-lingual) +AND (method OR approach OR framework) +``` + +--- + +## Paso 4 — TESTEA (esto es crítico) + +**Nunca** lances una ecuación sin testear. Trae 50 papers y revisa los títulos. + +### Con bib2graph CLI + +```bash +b2g init test-ecuacion +cd test-ecuacion +b2g seed "tu_ecuacion_aqui" --max-results 50 +b2g read list | head -20 +``` + +### Con agente + +```text +Ejecuta esta ecuación en bib2graph y trae 50 papers. +Muestra los títulos. ¿Todos tienen relación directa con [TU TEMA]? +``` + +### Revisa los títulos + +``` +✓ "Multilingual Information Retrieval: A Cross-lingual Approach" +✓ "Polyglot Search Methods for Heterogeneous Document Collections" +✓ "Language-agnostic Retrieval in Multilingual Corpora" + +✗ "Semantic Retrieval Algorithms" (no menciona multilingüe) +✗ "Social Media Search Optimization" (no es recuperación de info) +``` + +--- + +## Paso 5 — Ajusta según el ruido + +### Si trae MUY POCO (<50 papers) + +**Abre la ecuación:** + +- Quita un `AND` o reemplázalo por `OR`. +- Agrega más sinónimos a cada concepto. +- Usa palabras más genéricas. + +``` +Antes: (information retrieval) AND (multilingual) AND (method) +Después: (information retrieval OR search) AND (multilingual OR cross-lingual) + [sacamos el tercer AND] +``` + +### Si trae MUCHO (>1000 papers) + +**Cierra la ecuación:** + +- Agrega un cuarto concepto `AND NOT` que excluya ruido. +- Usa más sinónimos específicos. +- Agrega delimitadores temporales o de dominio. + +``` +Antes: (information retrieval) AND (multilingual) +Después: (information retrieval) AND (multilingual) + AND (method OR framework) AND NOT (machine translation) + [añadimos Concepto C + exclusión] +``` + +### Si trae RUIDO sistemático + +Si ves que muchos papers son sobre "X" pero no te importan, excluye: + +``` +AND NOT (machine translation OR neural machine translation) +AND NOT (social media OR sentiment analysis) +``` + +--- + +## Paso 6 — Documentá tu decisión + +**Importante:** guarda tu ecuación final CON comentarios. + +``` +# Pregunta: ¿Cómo se abordan problemas de IR en contextos multilingües? +# Rango: 2015–2024 (últimos 10 años) +# Objetivo: ~250 papers, sensibilidad alta + +# Concepto A: IR (recuperación, búsqueda) +# Concepto B: Multilingüe (cross-lingual, polyglot) +# Concepto C: Métodos/enfoques (no solo algoritmos teóricos) +# Exclusión: Machine translation (tema relacionado pero diferente) + +(information retrieval OR information seeking OR search) +AND (multilingual OR cross-lingual OR language-agnostic OR polyglot) +AND (method OR approach OR framework OR system) +AND NOT (machine translation OR neural translation) +``` + +--- + +## Checklist final + +- [ ] Mi ecuación tiene 3–4 conceptos, cada uno con 2–4 sinónimos +- [ ] Testeé con 50 papers y revisé títulos +- [ ] Entre 100–500 papers traídos (ajusté si estaba fuera de rango) +- [ ] Documenté mis decisiones (para reproducibilidad) +- [ ] ¿Todos los papers traídos son relevantes? (sin ruido sistemático) + +--- + +## Tip: Interactuar con un agente + +Si usas Claude, ChatGPT o similar: + +```text +Mi pregunta de investigación es: +[TU PREGUNTA] + +Propón una ecuación de búsqueda en OpenAlex/bib2graph: +1. Con 3 conceptos claros (sintaxis: (A1 OR A2) AND (B1 OR B2) AND (C1 OR C2)) +2. Con sinónimos relevantes +3. Con exclusiones si hay ruido conocido + +Luego, dame el comando exacto para testear: +b2g seed "[tu_ecuacion]" --max-results 50 +``` + +El agente genera, tú testeas. Esto es más rápido que hacerlo solo. + +--- + +## Siguiente + +Cuando tu ecuación traiga papers relevantes sin ruido: +- [Guía: ¿Expando el corpus? (Forrajeo)](forrajeo.md) +- [Guía: Curación PRISMA paso a paso](curacion-prisma.md) diff --git a/docs/guias/forrajeo.md b/docs/guias/forrajeo.md new file mode 100644 index 0000000..b4bd248 --- /dev/null +++ b/docs/guias/forrajeo.md @@ -0,0 +1,174 @@ +--- +title: "¿Expando el corpus? — Guía sobre forrajeo" +--- + +# ¿Expando el corpus? — Cuándo y cómo hacer forrajeo + +El **forrajeo** (backward chaining) busca papers que no aparecieron en tu búsqueda +inicial, pero que son citados por los papers que sí encontraste. + +Esta guía: ¿CUÁNDO hacerlo? ¿CUÁNDO NO? ¿CÓMO sin perderse? + +!!! info "Alcance" + - Para alguien que ya tiene un corpus de siembra (~100–300 papers) + - Toma: 15 minutos de decisión + 30 min de ejecución + - Herramienta: bib2graph CLI o agente + +--- + +## Qué es el forrajeo + +``` +Corpus inicial: +├─ Paper A +├─ Paper B (cita a Paper X, Y, Z) +└─ Paper C + +Forrajeo (1 capa): +└─ Busca Papers X, Y, Z (citados por B pero no en corpus inicial) + └─ Trae ~20–50 papers nuevos +``` + +**Ventaja:** Aumenta sensibilidad sin ruido (los nuevos fueron citados por relevantes). + +**Riesgo:** Trae papers muy antiguos, de dominios tangenciales, o que no aplican. + +--- + +## Paso 1 — Decide si forrajear + +### Forrajea SÍ si: + +✅ Tu tema es **muy específico** (no "machine learning", sino "alineación de valores en LLMs"). +✅ Tu corpus inicial es **pequeño** (<100 papers) y quieres más densidad. +✅ Buscas **máxima cobertura** — no quieres perderte trabajos clave aunque sean antiguos. +✅ Tienes **tiempo** — forrajeo agrega 30 min de ejecución + revisión. + +### No forrajees si: + +❌ Tu tema es **genérico** — forrajeo podría traer decenas de miles de papers. +❌ Tu corpus inicial ya es **grande** (>500 papers) — probablemente alcanza. +❌ Necesitas un SOTA **rápido** — la prueba de concepto sin forrajeo es suficiente. +❌ El tiempo es crítico — aprioriza curación sobre expansión. + +### Tu decisión + +Responde: + +1. **¿Es mi tema altamente específico?** Sí/No +2. **¿Mi corpus inicial es < 100 papers?** Sí/No +3. **¿Tengo 1–2 horas extras?** Sí/No + +**Si respondiste SÍ a 2+ preguntas → forrajea.** +**Si respondiste No a la mayoría → salta directo a curación.** + +--- + +## Paso 2 — Ejecuta el forrajeo + +### Con CLI + +```bash +cd tu-sota +b2g chain --depth 1 --limit 100 +``` + +**Opciones:** + +- `--depth 1`: Una capa de referencias (recomendado). +- `--limit 100`: Trae máximo 100 papers nuevos (ajusta según necesidad). +- Sin opciones: trae todo lo que encuentre. + +### Con agente + +```text +Expandí mi corpus usando forrajeo (backward chaining): +- Corpus actual: [X papers] +- Límite: trae máximo 100 papers nuevos +- Profundidad: una capa (citados directamente por mis papers) + +Mostrame: +- Cuántos papers nuevos se agregaron +- Rango de años (¿muy antiguos?) +- Si hay clusters temáticos nuevos +``` + +--- + +## Paso 3 — Revisa lo que trajo + +Después de ejecutar `b2g chain`, **revisa lo nuevo antes de seguir**. + +### Inspecciona los papers nuevos + +```bash +b2g read list --status candidate | head -20 +``` + +### Preguntas clave + +1. **¿Hay papers muy antiguos (pre-2000)?** + - Sí → Probablemente foundational, mantenlos. + - No → Bien, son contemporáneos. + +2. **¿Hay clusters temáticos que NO esperabas?** + - Sí → Revisa si son tangenciales (y rechaza luego en curación). + - No → Buen señal. + +3. **¿El tamaño es manejable?** + - Corpus total < 1000 papers → adelante. + - Corpus total > 2000 papers → considera rechazar duplicados o muy antiguos. + +--- + +## Paso 4 — Ajusta si hace falta + +### Si trajo MUY POCO (<20 papers nuevos) + +Probablemente tu búsqueda inicial fue muy acotada. Es OK — no fuerces forrajeo. +Pasa a curación con lo que tienes. + +### Si trajo MUCHO (>500 papers nuevos) + +Probablemente tu búsqueda inicial fue genérica. Opciones: + +1. **Rechaza papers muy antiguos:** `b2g curate filter --min-year 2010` +2. **Rechaza dominios tangenciales:** marca como REJECTED en curación +3. **Usa keywords para sub-seleccionar:** `b2g read list --query "tu_keyword"` + +### Si trajo papers fuera de scope + +Marca como REJECTED en la curación siguiente. No son un problema, solo ruido. + +--- + +## Paso 5 — Documentá tu decisión + +Antes de pasar a curación, documentá: + +``` +# DECISIÓN DE FORRAJEO +Fecha: 2024-06-30 +Corpus antes: 250 papers +Forrajeo ejecutado: sí (depth=1, limit=100) +Corpus después: 315 papers (+65 nuevos) +Observación: Papers nuevos son relevantes, años 2008–2023 +Decisión: Mantener todos para curación (PRISMA filtrará) +``` + +--- + +## Checklist + +- [ ] Decidí conscientemente si forrajear (no por defecto) +- [ ] Ejecuté `b2g chain --depth 1 --limit 100` +- [ ] Revisé los papers nuevos (años, temas) +- [ ] Corpus final es manejable (< 2000 papers) +- [ ] Documenté la decisión + +--- + +## Siguiente + +Después de forrajeo (o decisión de no forrajear): +- [Guía: Curación PRISMA paso a paso](curacion-prisma.md) diff --git a/docs/guias/index.md b/docs/guias/index.md index db61584..4a5f79d 100644 --- a/docs/guias/index.md +++ b/docs/guias/index.md @@ -4,25 +4,71 @@ title: Guías (how-to) # Guías (how-to) -Las **guías** son recetas orientadas a una tarea concreta: ya sabés qué querés -hacer y buscás los pasos para lograrlo. Si en cambio querés *aprender* desde -cero, empezá por los [Tutoriales](../tutoriales/index.md). - -!!! note "En construcción" - Estamos escribiendo las guías. Seguimiento en el - [issue #208](https://github.com/complexluise/bib2graph/issues/208). - Planificado: - - - Cómo elaborar y refinar una ecuación de búsqueda. - - Cómo expandir el corpus por citaciones (forrajeo) sin perder el foco. - - Cómo aplicar filtros PRISMA y curar (aceptar/rechazar) de forma versionable. - - Cómo interpretar las 5 redes y exportarlas a Gephi / Cytoscape. - - Cómo hacer reproducible un análisis (snapshots e historia del corpus). - -## Mientras tanto - -- [Quickstart](../getting-started/quickstart.md) — el camino más corto a un - GraphML. -- [Referencia del CLI `b2g`](../reference/cli.md) — todos los comandos y opciones. -- [API de Python](../reference/python-api.md) — para uso como librería. -- [Arquitectura](../ARCHITECTURE.md) — el modelo mental del ciclo y las redes. +Las **guías** son recetas para decisiones puntuales: ya sabes qué quieres hacer, +buscas cómo hacerlo bien. Si en cambio quieres *aprender* desde cero, comienza por los [Tutoriales](../tutoriales/index.md). + +Las guías están organizadas por **paso del flujo.** Úsalas como referencia mientras +trabajas. + +## Guía 1: Ecuación de búsqueda + +
+ +- :material-magnify: **[Cómo armar una ecuación que NO trae basura](ecuacion-busqueda.md)** + + Estructura booleana, sinónimos, testeo de 50 papers, ajustes. + 30 minutos para una ecuación acotada y limpia. + +
+ +## Guía 2: Forrajeo (expansión del corpus) + +
+ +- :material-sitemap-branch: **[¿Expando el corpus? — Cuándo y cómo forrajear](forrajeo.md)** + + Decides si vale la pena forrajeo (backward chaining). Cuándo hacerlo, cuándo no. + 15 minutos de decisión + 30 minutos de ejecución. + +
+ +## Guía 3: Curación + +
+ +- :material-checkbox-marked-outline: **[Curación PRISMA paso a paso](curacion-prisma.md)** + + Las 4 fases de PRISMA: Identificación → Cribado → Elegibilidad → Inclusión. + Documentá criterios, cura en CSV, aplica en bib2graph. + 2–3 horas de trabajo manual, pero riguroso. + +
+ +## Guía 4: Interpretación de redes + +
+ +- :material-network: **[Leer las 5 redes — Qué significan](leer-redes.md)** + + Acoplamiento (sub-temas), co-citación (influentes), co-autoría (equipos), + keywords, instituciones. Qué mirar en cada red, qué documentar. + +
+ +## Guía 5: Redacción del reporte + +
+ +- :material-file-document: **[Del corpus al reporte — Estructura y redacción](reporte.md)** + + Template de 7 secciones (resumen → conclusiones). Cómo convertir datos en prosa. + 3–4 horas de redacción, documentada paso a paso. + +
+ +## Complementario + +- [Tutoriales](../tutoriales/index.md) — aprende desde cero (quick start o completo) +- [Quickstart](../getting-started/quickstart.md) — ciclo mínimo en 2 minutos +- [Referencia CLI](../reference/cli.md) — todos los comandos +- [API Python](../reference/python-api.md) — como librería diff --git a/docs/guias/leer-redes.md b/docs/guias/leer-redes.md new file mode 100644 index 0000000..a2e9555 --- /dev/null +++ b/docs/guias/leer-redes.md @@ -0,0 +1,298 @@ +--- +title: Leer las 5 redes — Qué significan +--- + +# Leer las 5 redes — Qué significan + +Después de construir redes, comes a interpretarlas. Cada red responde una pregunta +diferente sobre tu campo. Esta guía: qué mirar en cada una. + +!!! info "Alcance" + - Para alguien que ejecutó `b2g build` y tiene las redes visualizadas + - Toma: 1–2 horas (explorando + anotando) + - Herramienta: Gephi, Cytoscape, o `b2g read top` + - Salida: Entendimiento del campo + anotaciones para redacción + +--- + +## Las 5 redes que bib2graph construye + +bib2graph crea 5 proyecciones del corpus. **No uses las 5 — típicamente usa 2–3.** + +``` +1. Acoplamiento bibliográfico (papers) +2. Co-citación (papers) +3. Co-autoría (autores) +4. Co-ocurrencia de keywords +5. Colaboración institucional +``` + +La **más importante es la 1** (Acoplamiento). Empezá ahí. + +--- + +## 1. RED DE ACOPLAMIENTO BIBLIOGRÁFICO + +**Pregunta que responde:** ¿Cuáles son los sub-temas del campo? + +### Qué es + +Dos papers se **acoplan** si citan las mismas referencias. + +``` +Paper A cita: [Ref 1, Ref 2, Ref 3] +Paper B cita: [Ref 2, Ref 3, Ref 4] + +Similitud: comparten 2 referencias +Acoplamiento: fuerte → aparecen cerca en la red +``` + +### Qué buscas + +**Comunidades** (clusters de colors). Cada comunidad = un sub-tema. + +### Cómo interpretarla + +| Elemento | Significa | +|----------|-----------| +| **Nodo** | Un paper | +| **Tamaño del nodo** | Grado (cuántos otros papers lo citan) | +| **Línea entre nodos** | Acoplamiento (comparten referencias) | +| **Color** | Comunidad (detectada por Louvain) | +| **Densidad local** | Subgrupo temático (si hay clusters densos) | + +### Preguntas clave + +1. **¿Cuántas comunidades ves?** (típicamente 3–8) + - Pocas (1–2) → campo homogéneo, enfoque único + - Muchas (10+) → campo fragmentado, múltiples escuelas + +2. **¿Qué hace cada comunidad?** + - Lee 2–3 papers de mayor grado en cada comunidad + - Escribe: "Comunidad 1: Enfoques neurales" + +3. **¿Hay comunidades aisladas?** + - Sí → campo fragmentado, sin diálogo + - No → comunidades conectadas, debate activo + +4. **¿Una comunidad domina?** + - Sí → tendencia clara, escuela hegemónica + - No → equilibrio de enfoques + +### Tip: Extrae top papers por comunidad + +Con CLI: + +```bash +b2g read top --kind bibliographic_coupling --top 20 +``` + +Esto te da los 20 papers más centrales (mayor grado). Son buenas "referencias canónicas". + +Con Gephi: + +1. Abre el `.graphml` en Gephi +2. Filtra por color (comunidad) +3. Ordena nodos por tamaño (grado) +4. Anota los top 3 de cada comunidad + +--- + +## 2. RED DE CO-CITACIÓN + +**Pregunta que responde:** ¿Cuáles son los papers / autores / trabajos más influyentes? + +### Qué es + +Dos papers se **co-citan** si aparecen juntos en las referencias de otros papers. + +``` +Paper A refiere a: [Clásico1, Clásico2, Nuevo1] +Paper B refiere a: [Clásico1, Clásico2, Nuevo2] + +Clásico1 y Clásico2 se co-citan frecuentemente +→ Son referencias canónicas +``` + +### Qué buscas + +**Papers que actúan como "hubs" de la red.** Estos son influyentes. + +### Cómo interpretarla + +| Elemento | Significa | +|----------|-----------| +| **Nodo** | Un paper | +| **Tamaño del nodo** | Co-citación (cuántos otros lo citan juntos) | +| **Línea fuerte** | Frecuentemente citados juntos | +| **Hub central** | Paper/autor/trabajo canónico | + +### Preguntas clave + +1. **¿Hay un hub central claro?** + - Sí → hay un "clásico" que todos citan + - No → múltiples referencias, no hay consenso + +2. **¿Qué papers están en el hub?** + - Anota: estos son obligatorios para tu SOTA + - Leelos: dan contexto de la escuela + +3. **¿Hay papers recientes en el hub?** + - Sí → el campo evoluciona, hay nuevas referencias + - No → campo estancado, solo cita clásicos antiguos + +4. **¿Qué autores o labs aparecen repetidamente?** + - Estos son actores clave del campo + +### Comparación Acoplamiento vs. Co-citación + +| Aspecto | Acoplamiento | Co-citación | +|--------|---|---| +| **Responde** | ¿Sub-temas (presente)? | ¿Influentes (pasado)? | +| **Densidad** | Más densa | Más dispersa | +| **Utilidad** | Entender estructura actual | Entender genealogía intelectual | +| **Nodos** | Papers en tu corpus | Papers citados por tu corpus | + +--- + +## 3. RED DE CO-AUTORÍA + +**Pregunta que responde:** ¿Quiénes trabajan juntos? ¿Dónde están los equipos? + +### Qué es + +Dos autores se **co-autorizan** si escriben papers juntos. + +### Qué buscas + +**Clusters de autores que colaboran persistentemente.** + +### Cómo interpretarla + +| Elemento | Significa | +|----------|-----------| +| **Nodo** | Un autor | +| **Línea** | Colaboración (escribieron juntos) | +| **Cluster** | Equipo o laboratorio | +| **Tamaño del nodo** | Productividad (cuántos papers) | + +### Preguntas clave + +1. **¿Hay equipos cohesivos (clusters densos)?** + - Sí → campos maduros, labs establecidos + - No → trabajo más individual o colaboraciones puntuales + +2. **¿Qué autores aparecen en múltiples equipos (hubs)?** + - Estos son "conectores" entre grupos + +3. **¿Hay colaboración internacional?** + - Sí → campo globalizado + - No → investigación regional/aislada + +### Tip: Menos importante que Acoplamiento + +Co-autoría es útil pero secundaria. Si tienes poco tiempo, **prioriza Acoplamiento + Co-citación.** + +--- + +## 4. RED DE CO-OCURRENCIA DE KEYWORDS + +**Pregunta que responde:** ¿Qué términos se usan juntos? ¿Cuál es el vocabulario del campo? + +### Qué es + +Dos keywords se **co-ocurren** si aparecen en el mismo abstract. + +### Qué buscas + +**Clusters de vocabulario.** + +### Preguntas clave + +1. **¿Qué keywords son centrales?** (muchas conexiones) + - Estos definen el core del campo + +2. **¿Qué keywords son periféricas?** (pocas conexiones) + - Estos definen sub-especialidades + +3. **¿Hay vocabulario que esperabas pero no aparece?** + - Eso es un hueco de investigación + +--- + +## 5. RED DE COLABORACIÓN INSTITUCIONAL + +**Pregunta que responde:** ¿Qué universidades/labs colaboran? + +### Qué es + +Dos instituciones **colaboran** si sus investigadores co-autorizan papers. + +### Preguntas clave + +1. **¿Hay universidades dominantes?** (muchos papers) +2. **¿Hay colaboración: local, regional, global?** +3. **¿Qué institutions lideran?** (grado más alto) + +--- + +## Flujo recomendado de lectura + +1. **Acoplamiento primero** (20 min) + - Entiende sub-temas + - Anota comunidades + +2. **Co-citación después** (20 min) + - Identifica papers canónicos + - Anotalos como "obligatorios" + +3. **Co-autoría opcional** (10 min si tienes tiempo) + - Entiende quién trabaja con quién + +4. **Keywords + Instituciones (skip si no tienes tiempo)** + +--- + +## Qué documentar + +Mientras lees, crea una tabla: + +```markdown +# Lectura de Redes + +## Acoplamiento Bibliográfico + +| Comunidad | Keywords | Top Papers | Tensión | +|-----------|----------|-----------|---------| +| Enfoque A | [kw1, kw2] | [Paper1, Paper2] | vs. Enfoque B: diferencia en [aspecto] | +| Enfoque B | [kw3, kw4] | [Paper3, Paper4] | vs. Enfoque A: diferencia en [aspecto] | + +## Co-citación + +| Paper Canónico | Autores | Año | Por qué influyente | +|---|---|---|---| +| "Seminal Work..." | Smith et al | 2005 | Define el paradigma | + +## Notas + +- Comunidad 1 y 2 no se conectan → hay un debate abierto +- Keyword "X" está ausente → hueco de investigación +``` + +--- + +## Checklist + +- [ ] Abrí Acoplamiento en Gephi o visualicé con `b2g read top` +- [ ] Identifiqué 3–5 comunidades, las nombré +- [ ] Extraje top 2–3 papers de cada comunidad +- [ ] Abrí Co-citación, identifiqué papers canónicos +- [ ] Documenté en una tabla: comunidades + papers clave +- [ ] Identifiqué 2–3 tensiones entre comunidades + +--- + +## Siguiente + +Con las redes entendidas, listo para redactar: +- [Guía: Del corpus al reporte](reporte.md) diff --git a/docs/guias/reporte.md b/docs/guias/reporte.md new file mode 100644 index 0000000..177cc48 --- /dev/null +++ b/docs/guias/reporte.md @@ -0,0 +1,329 @@ +--- +title: Del corpus al reporte — Estructura y redacción +--- + +# Del corpus al reporte — De datos a prosa + +Tienes redes, comunidades, papers clave. Ahora: cómo convertir eso en un **reporte +coherente** que otros lean de principio a fin. + +Esta guía: estructura, qué escribir en cada sección, y tips de redacción. + +!!! info "Alcance" + - Para alguien que ya leyó las redes y tienes anotaciones + - Toma: 3–4 horas de redacción + - Herramienta: Google Docs, Word, Obsidian, o Markdown + Pandoc + - Salida: Documento de 8–15 páginas, legible + +--- + +## La estructura (template) + +``` +1. RESUMEN EJECUTIVO (1 página) +2. INTRODUCCIÓN (1–2 páginas) +3. METODOLOGÍA (1 página) +4. MAPEO DEL CAMPO (3–5 páginas) +5. TENDENCIAS E INFLUENCIA (2–3 páginas) +6. TENSIONES Y DEBATES (2–3 páginas) +7. CONCLUSIONES (1–2 páginas) +8. REFERENCIAS (autogenerado) + +Total: 12–20 páginas +``` + +--- + +## 1. RESUMEN EJECUTIVO + +**Largo:** 1 página. **Escritura:** densísima, sin fluff. + +**Qué incluir:** + +- Pregunta de investigación (1 frase) +- Metodología en 1 línea: "SOTA de X papers, 3 redes, PRISMA curation" +- 3 hallazgos principales (bullet points) +- Conclusión de 1 frase + +### Ejemplo + +> **Pregunta:** ¿Cuál es el estado del arte en recuperación de información multilingüe? +> +> **Método:** Corpus de 250 papers (2015–2024) desde OpenAlex, curado con PRISMA, analizado con 3 redes bibliométricas. +> +> **Hallazgos:** +> - El campo tiene 3 enfoques dominantes: estadístico, vectorial, neuronal. Los tres coexisten sin consenso. +> - Papers influentes (clásicos) son del 2008–2013; nuevos líderes emergentes post-2019 con enfoque neuronal. +> - Hay un hueco: recuperación multilingüe en contextos de baja disponibilidad de datos. +> +> **Conclusión:** El campo está en transición de enfoques estadísticos a neurales, pero cada enfoque tiene ventajas sin resolver. + +--- + +## 2. INTRODUCCIÓN + +**Largo:** 1–2 páginas. **Propósito:** planta el contexto y la pregunta. + +**Estructura:** + +1. **Hook:** Por qué el tema importa (1–2 frases) +2. **Contexto:** Dónde cae este tema en la disciplina (3–4 frases) +3. **Pregunta de investigación:** Explicitada (1 frase) +4. **Scope:** Qué cubre este SOTA y qué no (1 frase) + +### Ejemplo + +> **Hook:** La recuperación de información (IR) es fundamental para cualquier herramienta de búsqueda, pero el contexto multilingüe agrega complejidad: vocabularios diferentes, grammatical structures, y semánticas culturales. +> +> **Contexto:** Históricamente, IR se basaba en matching estadístico (TF-IDF). Los últimos 10 años vieron un giro hacia embeddings y modelos neurales. En contextos multilingües, esto es aún más reciente. +> +> **Pregunta:** ¿Cuáles son los enfoques dominantes en IR multilingüe hoy, cuáles son sus tensiones, y qué queda sin explorar? +> +> **Scope:** Analizamos papers 2015–2024 en ingles; enfoque: métodos y frameworks (no aplicaciones específicas). + +--- + +## 3. METODOLOGÍA + +**Largo:** 1 página. **Propósito:** reproducibilidad. + +**Incluir:** + +- Ecuación de búsqueda (cópiala) +- Rango de años y fuente (OpenAlex) +- Criterios PRISMA (en una frase por fase) +- Corpus final: # papers, rango años +- Redes construidas (acoplamiento, co-citación, co-autoría) +- Tool: bib2graph + +### Ejemplo + +> **Búsqueda:** "(information retrieval OR search OR IR) AND (multilingual OR cross-lingual) AND (method OR approach OR framework)" en OpenAlex, años 2015–2024. +> +> **Curation:** PRISMA de 4 fases. +> - Identificación: duplicados, retractados, no-inglés → rejected +> - Cribado: título + abstract relevancia → rejected +> - Elegibilidad: texto completo accesible → candidate +> - Inclusión: relevancia alta → accepted +> +> **Corpus:** 315 papers buscados → 250 tras curación PRISMA → 245 aceptados + 5 candidatos. +> **Años:** 2015–2024 (con 3 foundational 2008–2010). +> +> **Redes:** Acoplamiento bibliográfico (comunidades), co-citación (influentes), co-autoría (colaboraciones). +> **Herramienta:** bib2graph v0.3 + Louvain clustering (resolution=1.0). + +--- + +## 4. MAPEO DEL CAMPO + +**Largo:** 3–5 páginas. **Propósito:** mostrar la estructura del campo. + +**Estructura:** + +1. **Tabla de comunidades** (1 página) + - Comunidad | Keywords | Top papers | Descripción + +2. **Descripción de cada comunidad** (1–2 párrafos por comunidad, máx 3–4 comunidades) + +3. **Figura: Red coloreada** (inserta el PNG de la red de acoplamiento) + +### Ejemplo — Tabla + +| Comunidad | Keywords | Top Papers | Enfoque | +|-----------|----------|-----------|---------| +| **Estadístico** | TF-IDF, probabilistic, language model | [Smith 2008], [Brown 2010] | Ranking por frecuencia de términos | +| **Vectorial** | embedding, word2vec, LSA, similarity | [Mikolov 2013], [Pennington 2014] | Espacios semánticos densos | +| **Neuronal** | neural network, transformer, BERT, attention | [Vaswani 2017], [Devlin 2019] | Aprendizaje de representaciones | + +### Ejemplo — Prosa + +> **Enfoque Estadístico:** 85 papers, principalmente 2015–2018. +> Usan modelos probabilísticos (HMM, LM) y ranking por frecuencia (TF-IDF). +> Ventaja: eficiencia, interpretabilidad. Desventaja: no captura semántica. +> Papers influyentes: Smith et al (2008), Brown et al (2010). +> +> **Enfoque Vectorial:** 92 papers, principalmente 2013–2020. +> Generan embeddings densos (word2vec, FastText) y miden similaridad coseno. +> Ventaja: captura semántica, escalable. Desventaja: computacionalmente costoso, menos interpretable. +> Transición: muchos papers de 2015–2017 vuelven a embeddings, desafiando TF-IDF. +> +> **Enfoque Neuronal:** 68 papers, principalmente 2017–2024. +> Transformers (BERT, mBERT para multilingüe). Ventaja: SOA performance. Desventaja: black box, caro. +> Emergente: multilingüe especializado (XLM-R). +> +> **Dinámicas:** Los 3 enfoques coexisten sin desplazamiento total. Hay papers híbridos (probabilístico + neural). +> Frontera sin explorar: eficiencia en contextos de baja disponibilidad de datos. + +### Qué evitar + +❌ "Enfoque A es mejor que enfoque B." +→ Los 3 conviven, cada uno tiene trade-offs. + +✅ "Enfoque A prioriza X, enfoque B prioriza Y. Entran en tensión sobre Z." + +--- + +## 5. TENDENCIAS E INFLUENCIA + +**Largo:** 2–3 páginas. **Propósito:** mostrar evolución temporal y actores clave. + +**Incluir:** + +1. **Gráfico temporal:** # papers/año por comunidad +2. **Shift de enfoque:** cuál crecía, cuál decrecía +3. **Papers y autores influyentes:** top 10 por co-citación +4. **Labs líderes:** qué universidades/labs dominan (co-autoría) +5. **Emergentes:** keywords o autores con crecimiento exponencial últimos 3 años + +### Ejemplo + +> **Evolución temporal:** 2015–2017 fue era "vectorial" (92 papers, 60% de nuevos). 2018–2020, equilibrio. +> 2021–2024, giro a neuronal (68% nuevos). Estadístico declina (5% nuevos en 2024). +> +> **Influyentes globales:** Smith et al (2008) sigue siendo más citado, pero Vaswani et al (2017) "Attention is All You Need" +> alcanzó en 2022. Post-2020, mBERT (Google) es hub de co-citación en multilingüe. +> +> **Labs líderes:** Stanford (25 papers), Google Brain (18), FAIR (15). +> Colaboración: Google + Stanford (12 co-author papers). FAIR aislado (pocas colaboraciones externas). +> +> **Emergentes:** Keyword "low-resource" crece 3x desde 2020. Autores nuevos en este sub-tema. +> Nuevas partnerships: Google + universidades en Asia (multilingüe sobre lenguas de baja disponibilidad). + +--- + +## 6. TENSIONES Y DEBATES + +**Largo:** 2–3 páginas. **Propósito:** tensiones = investigación activa. + +**Qué es una tensión:** Dos enfoques dicen cosas opuestas o incompatibles. + +**Estructura:** Para cada tensión: + +1. **Nombre** (Eficiencia vs. Precisión) +2. **Quién está de cada lado** (Enfoque A vs. Enfoque B) +3. **Por qué divergen** (Presupuestos, objetivos, contexto) +4. **Ejemplo concreto** (Paper A dice X, Paper B dice ¬X) +5. **Estado actual** (Se resolvió? Abierto? Evolucionó?) + +### Ejemplo + +> **Tensión 1: Interpretabilidad vs. Performance** +> +> - **Lado A (Estadístico):** Un modelo entendible es mejor. TF-IDF, si devuelves top 5, puedo explicar por qué. +> - **Lado B (Neuronal):** Performance > interpretabilidad. Si BERT devuelve 99% accuracy, ¿importa que sea black box? +> - **Ejemplo:** Smith (2010) "Statistical IR is superior for transparent systems". Devlin (2019) "BERT outperforms all baselines", no explora interpretabilidad. +> - **Estado:** Abierto. Hay intentos de interpretable neural (attention visualization), pero la mayoría ignora esto. +> +> **Tensión 2: Escalabilidad vs. Contexto** +> +> - **Lado A:** Escalable a millones de documentos (vectorial, estadístico). +> - **Lado B:** Contexto fino, semantic precision (neuronal, aunque lento). +> - **Ejemplo:** Google's neural retrieval es 10x más lento que TF-IDF, por eso siguen usando TF-IDF en producción. +> - **Estado:** En evolución. Recientes (2023–2024) buscan solución: retrieval neuronal comprimido (destilación). + +--- + +## 7. CONCLUSIONES + +**Largo:** 1–2 páginas. **Propósito:** síntesis + implicaciones. + +**Estructura:** + +1. **Síntesis de hallazgos:** qué vimos en el mapa +2. **Implicaciones:** qué significa para investigación futura +3. **Huecos:** qué no existe, qué falta +4. **Recomendación:** si fueras investigador, dónde irías + +### Ejemplo + +> **Síntesis:** El campo de IR multilingüe está en transición. Tres enfoques coexisten: estadístico (maduro, eficiente, interpretable), +> vectorial (en declive, pero servicios web lo usan), neuronal (ascendente, SOA, caro). No hay consenso de paradigma. +> +> **Para futura investigación:** Hay dos caminos abiertos. +> 1. Resolver Interpretabilidad en modelos neurales multilingües. +> 2. Explorar IR eficiente en lenguas de baja disponibilidad (hueco claro). +> +> **Huecos principales:** +> - No hay estudios comparativos rigurosos de los 3 enfoques en el mismo benchmark multilingüe. +> - Contextos code-switching (mezcla de lenguas) es casi inexplorado. +> - Retrieval offline/sin internet: abandonado por la industria. +> +> **Recomendación:** Si entrás al campo hoy, sugiero: caracterizar la brecha de eficiencia en multilingüe (hay plata aquí), +> o resolver low-resource (hay impacto social + papers de alto valor). + +--- + +## Tips de redacción + +### 1. No expliques QUÉ, explica QUÉ SIGNIFICA + +❌ "Paper A propone un método estadístico usando TF-IDF para IR. Paper B propone redes neurales." + +✅ "Paper A (estadístico) y Paper B (neural) entran en tensión sobre trade-off entre eficiencia e inteligencia. A es rápido, B es inteligente." + +### 2. Las figuras NO hablan solas + +Cada figura necesita: +- Título claro +- Leyenda que explique qué ves +- 2–3 frases de texto que señalen qué observar + +❌ Figura: Red coloreada (sin leyenda) + +✅ Figura 1: Red de acoplamiento bibliográfico. Nodos = papers. Líneas = referencias compartidas (acoplamiento). Colores = comunidades (Louvain). Observar: la comunidad azul (estadístico) es densa pero aislada; la roja (neuronal) es más dispersa pero conecta todas las demás. + +### 3. Transiciones entre secciones + +Conectá secciones: + +``` +[...fin de Metodología] +"Con este corpus de 245 papers, ahora examinamos la estructura del campo. + +[Inicio de Mapeo del Campo] +El análisis de acoplamiento bibliográfico revela 3 comunidades principales..." +``` + +### 4. Cita los papers + +Cuando menciones una idea, cita: (Smith et al, 2008). Esto hace el texto reproducible. + +### 5. Redacta para que entienda alguien fuera del tema + +No asumas jerga. Explica conceptos: + +❌ "TF-IDF es el baseline obvio." + +✅ "TF-IDF (Term Frequency-Inverse Document Frequency) es un scoring que ranquea documentos por términos raros en el corpus (raro = más informativo). Es eficiente pero no entiende significado." + +--- + +## Herramientas de escritura + +- **Google Docs:** Colaboración, comentarios, fácil de compartir. Exportá a DOCX. +- **Markdown + Pandoc:** Control total, versionable con git, exportá a PDF/DOCX. +- **Obsidian:** Bueno para notas conectadas, integra con Zotero. +- **Word:** Si necesitás templates corporativos. + +--- + +## Checklist de escritura + +- [ ] Resumen ejecutivo: 3 hallazgos clave en 5 frases +- [ ] Introducción: pregunta clara, scope explícito +- [ ] Metodología: reproducible (ecuación, criterios, final corpus) +- [ ] Mapeo: tabla + prosa, cada comunidad explicada +- [ ] Tendencias: gráfico temporal + top papers/labs +- [ ] Tensiones: 3–5 tensiones principales con ejemplos +- [ ] Conclusiones: huecos identificados, recomendaciones futuras +- [ ] Figuras: todas con leyendas claras + 2–3 frases de interpretación +- [ ] Redacción: sin jerga sin explicar, citas presentes, transiciones claras + +--- + +## Siguiente + +Cuando termines el reporte: +- Comparte para feedback (peer-review light) +- Itera: ¿hay tensiones sin explicar? ¿hay huecos claros? +- Publica o presentá (conferencia, seminario, blog) diff --git a/docs/index.md b/docs/index.md index 8757ee3..e595f41 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,13 +5,12 @@ title: Inicio # bib2graph > De una búsqueda bibliográfica a **redes de citación reproducibles** — una -> biblioteca de literatura que curás vos, sin servidores ni planillas. +> biblioteca de literatura que curas tú, sin servidores ni planillas. -**bib2graph** toma una ecuación de búsqueda (o un archivo `.bib`), arma un corpus -de papers desde [OpenAlex](https://openalex.org), te deja **curarlo** y lo -proyecta a **redes bibliométricas** listas para analizar en Gephi, Cytoscape, -networkx o donde quieras: acoplamiento bibliográfico, co-citación, co-autoría, -colaboración institucional y co-ocurrencia de keywords. +**bib2graph** toma una ecuación de búsqueda (o un archivo `.bib`), trae papers +desde [OpenAlex](https://openalex.org), te deja **curarlo** y lo proyecta a +**redes bibliométricas** listas para analizar en Gephi, Cytoscape, networkx o donde quieras: +acoplamiento bibliográfico, co-citación, co-autoría, colaboración institucional y co-ocurrencia de keywords. El corpus **persiste y crece** entre sesiones, y el resultado es **reproducible**: mismo input, mismas redes. @@ -21,25 +20,54 @@ mismo input, mismas redes. Úsalo para explorar y validar, no como dependencia estable de producción todavía. -## Empezá acá +--- + +## Elige tu camino + +¿Cómo quieres usar bib2graph? Cada flujo es válido.
-- :material-download: **[Instalación](getting-started/installation.md)** +- :material-robot: **Sin instalar nada (5 min)** - Instalá `bib2graph` con `uv` o `pip` en un minuto. + Cuéntale a Claude, ChatGPT o MiniMax tu tema de investigación. + El agente trae papers, construye redes, tú descargas resultados. + + 👉 [Tutorial: Usuario no técnico](tutoriales/claude-code.md) -- :material-rocket-launch: **[Quickstart](getting-started/quickstart.md)** +- :material-code-braces: **Aprendiendo paso a paso (3–4 horas)** + + Instala bib2graph. Sigue 10 pasos: desde pregunta hasta reporte. + Ejecutas cada comando, entiendes cómo funciona todo. + + 👉 [Tutorial completo: De la pregunta al reporte](tutoriales/sota-completo.md) + +- :material-hammer-wrench: **Hibrido: CLI + agente (1–2 horas)** + + Instala bib2graph. El agente te ayuda con las partes difíciles. + Tú ejecutas comandos. Usa guías rápidas para decisiones. + + 👉 [Guías prácticas](guias/index.md) + +
+ +--- - De una ecuación a un GraphML, sin escribir código. +## Primeros pasos + +
-- :material-book-open-variant: **[Guías](guias/index.md)** +- :material-download: **[Instalación](getting-started/installation.md)** + + Instala `bib2graph` con `uv` o `pip` en un minuto. + +- :material-rocket-launch: **[Quickstart](getting-started/quickstart.md)** - Tutoriales y recetas para tareas concretas de investigación. + El ciclo mínimo en 2 minutos — desde ecuación a GraphML. - :material-api: **[Referencia](reference/cli.md)** - El CLI `b2g` y la API de Python, autogeneradas desde el código. + El CLI `b2g`, API de Python, y glosario de términos.
@@ -48,7 +76,7 @@ mismo input, mismas redes. - **Siembra** desde una ecuación de búsqueda (OpenAlex) o un archivo BibTeX. - **Expande** el corpus siguiendo citaciones, rankeando candidatos por estructura — sin IA. -- **Curás vos:** aceptar/rechazar papers, filtros PRISMA, todo versionable en CSV. +- **Curas tú:** acepta/rechaza papers, filtros PRISMA, todo versionable en CSV. - **5 redes bibliométricas:** acoplamiento, co-citación, co-autoría, instituciones, co-keywords. - **Sub-redes temáticas** filtrando por keyword. diff --git a/docs/reference/cli.md b/docs/reference/cli.md index dd7c5b0..640607e 100644 --- a/docs/reference/cli.md +++ b/docs/reference/cli.md @@ -14,6 +14,9 @@ sincronía con el código. codes 0–5. Los detalles del contrato (envelope, exit codes, FSM) están en [Contratos detallados](../API.md). +!!! tip "Términos no claros" + Si un término en el CLI no te queda claro, revisa el [Glosario](glosario.md). + ::: mkdocs-click :module: bib2graph.cli :command: b2g diff --git a/docs/reference/glosario.md b/docs/reference/glosario.md new file mode 100644 index 0000000..a196f03 --- /dev/null +++ b/docs/reference/glosario.md @@ -0,0 +1,358 @@ +--- +title: Glosario +--- + +# Glosario + +Términos y conceptos clave que aparecen en bib2graph, la metodología bibliométrica y la investigación del estado del arte. + +--- + +## A + +### Acoplamiento bibliográfico + +Medida de similitud entre dos papers basada en las referencias que comparten. Dos papers están acoplados si citan las mismas fuentes. Cuantas más referencias compartan, más fuerte es el acoplamiento. + +**En bib2graph:** La red de **acoplamiento bibliográfico** es la proyección principal — agrupa papers en comunidades basadas en sus referencias compartidas. Es útil para identificar sub-temas y tendencias. + +**Ejemplo:** Paper A cita [Ref1, Ref2, Ref3]. Paper B cita [Ref2, Ref3, Ref4]. Acoplamiento: comparten 2 referencias, acoplamiento fuerte → aparecen cerca en la red. + +--- + +## B + +### Backward chaining + +Ver **forrajeo**. + +### Benchmark + +Conjunto de datos estándar usado para evaluar y comparar algoritmos. Un benchmark típicamente incluye inputs, outputs esperados y métricas de evaluación. + +**En bib2graph:** No usamos benchmarks para construir redes (nuestro ranking es determinista), pero sí los papers usan benchmarks para validar retrieval, clustering, etc. + +--- + +## C + +### Candidate + +Estado de un paper en la curación PRISMA. Papers candidatos son aquellos cuya inclusión es incierta — típicamente porque no tienen acceso al texto completo, o porque su relevancia es media. + +**En bib2graph:** En `b2g curate`, un paper puede ser `ACCEPTED`, `REJECTED`, o `CANDIDATE`. Los candidatos quedan en el corpus pero marcados, para revisión posterior. + +**Cuándo marcar candidato:** +- Texto completo no disponible (paywall) +- Métodos vagos o especulativos +- Relevancia media pero podría aportar perspectiva + +--- + +### Clustering + +Proceso de agrupar elementos similares sin etiquetar. En bib2graph, usamos **Louvain clustering** para detectar comunidades en redes. + +**En bib2graph:** Después de construir una red (acoplamiento, co-citación, etc.), ejecutamos Louvain para encontrar comunidades — grupos de papers/autores densamente conectados. + +**Parámetro importante:** `resolution` (default 1.0). Resolución más alta = más comunidades, más finas. Resolución más baja = menos comunidades, más grandes. + +--- + +### Co-autoría + +Red que conecta autores que escriben papers juntos. Un edge existe si dos autores co-autorizan un paper. + +**En bib2graph:** `b2g build` crea una red de co-autoría. Útil para identificar equipos, laboratorios y colaboraciones persistentes. + +--- + +### Co-citación + +Dos papers se co-citan si aparecen juntos en las referencias de otros papers. Si Paper A y Paper B se citan mutuamente, o si ambos aparecen en las referencias de muchos otros papers, su co-citación es alta. + +**En bib2graph:** La red de **co-citación** proyecta papers que son frecuentemente citados juntos. Identifica papers influyentes y trabajos canónicos (clásicos del campo). + +**Diferencia vs. Acoplamiento:** +- **Acoplamiento:** Basado en referencias que comparten (enfoque hacia atrás). +- **Co-citación:** Basado en quién los cita juntos (enfoque hacia atrás, pero a nivel de influencia). + +--- + +### Corpus + +Colección de papers (o documentos) que forman la base del análisis. En bib2graph, el corpus es persistente — crece con `b2g seed` y `b2g chain`, se filtra con `b2g curate`. + +**En bib2graph:** El corpus vive en `.duckdb` (DuckDB, base de datos local). Cada corpus tiene un `corpus_hash` (hash de contenido) que permite reproducibilidad. + +--- + +### Curación PRISMA + +Metodología de 4 fases para decidir qué papers incluir en una síntesis de literatura. Las fases son: Identificación, Cribado, Elegibilidad, Inclusión. + +**En bib2graph:** `b2g curate` implementa el flujo PRISMA. Ver [Guía: Curación PRISMA paso a paso](../guias/curacion-prisma.md). + +--- + +## D + +### DuckDB + +Base de datos SQL incrustada (embedded), sin servidor. bib2graph usa DuckDB para almacenar el corpus persistentemente. + +**En bib2graph:** Cada workspace tiene un archivo `.duckdb` que contiene todas las tablas del corpus (papers, referencias, decisiones de curación, etc.). DuckDB permite queries SQL rápidas sin instalar un servidor PostgreSQL. + +--- + +## E + +### Ecuación de búsqueda + +Consulta booleana que especifica qué papers traer desde OpenAlex. Usa estructura `(concepto_A) AND (concepto_B) AND (concepto_C)`. + +**En bib2graph:** `b2g seed "[ecuacion_aqui]"` trae papers desde OpenAlex usando tu ecuación. + +**Ejemplo:** +``` +(information retrieval OR IR OR search) +AND (multilingual OR cross-lingual) +AND (method OR approach OR framework) +``` + +Ver [Guía: Cómo armar una ecuación de búsqueda](../guias/ecuacion-busqueda.md). + +--- + +### Embedding + +Representación numérica densa (vector) de una palabra, documento o concepto. Embeddings capturan significado semántico — palabras con significado similar tienen embeddings cercanos en el espacio vectorial. + +**En bib2graph:** No usamos embeddings para ranking (nuestro scent es bibliométrico puro). Pero muchos papers en el corpus usan embeddings para retrieval. + +--- + +## F + +### Forrajeo + +Expansión del corpus mediante **backward chaining**: buscar papers que NO aparecieron en la búsqueda inicial, pero que son citados por los papers que sí encontraste. + +**En bib2graph:** `b2g chain` ejecuta forrajeo. Aumenta sensibilidad (no pierdes papers clave) sin agregar ruido sistemático. + +**Cuándo hacer forrajeo:** Tema muy específico, corpus inicial pequeño, búsqueda máxima cobertura. + +Ver [Guía: ¿Expando el corpus?](../guias/forrajeo.md). + +--- + +## G + +### Grado + +En una red, el número de conexiones que tiene un nodo. Un paper con grado alto está altamente acoplado (acoplamiento) o frecuentemente co-citado (co-citación). + +**En bib2graph:** Papers de mayor grado son centrales en la red — son buenos candidatos para "papers seminales" de una comunidad. + +--- + +## H + +### Hub + +En una red, un nodo con grado muy alto — actúa como nexo central. En co-citación, un hub es un paper que la mayoría cita (un "clásico"). + +--- + +## I + +### Identificación (fase PRISMA) + +Primera fase de curación PRISMA. Aquí marcas duplicados, retracciones, papers en idioma incorrecto como REJECTED sin revisar más. + +Ver [Guía: Curación PRISMA paso a paso](../guias/curacion-prisma.md). + +--- + +## L + +### Louvain + +Algoritmo de clustering que detecta comunidades en redes minimizando modularidad. Es probabilístico — diferentes ejecuciones pueden dar resultados levemente diferentes. + +**En bib2graph:** `b2g build` usa Louvain con `resolution=1.0` (default). Puedes cambiar resolución en YAML specs: `resolution: 0.5` → comunidades más grandes; `resolution: 2.0` → comunidades más pequeñas. + +--- + +## M + +### Maturity (bloque JSON) + +Campo en la salida `--json` de `b2g build`, `b2g snapshot create`, `b2g read top` que autodeclara la madurez del resultado. Indica que el reporte es un borrador sin pulir. + +**Valores:** `{curated, scope, saturated, empty_networks}` — si tienes datos incompletos, bib2graph lo advierte. + +--- + +## N + +### NetworkSpec + +Especificación YAML declarativa de cómo construir redes. Define qué red (acoplamiento, co-citación, etc.), qué clustering usar, y qué resolución. + +**En bib2graph:** +```yaml +networks: + - kind: bibliographic_coupling + clustering: louvain + resolution: 1.0 +``` + +`b2g build --spec networks.yaml` carga la spec y construye. + +--- + +## O + +### OpenAlex + +Base de datos abierta de papers, autores, revistas, citas. API gratuita sin API key requerida (pero funcionamiento limitado sin key). + +**En bib2graph:** `b2g seed` trae papers desde OpenAlex usando tu ecuación de búsqueda. + +--- + +## P + +### PRISMA + +Metodología de 4 fases para síntesis sistemática de literatura: **Identificación → Cribado → Elegibilidad → Inclusión**. Cada fase tiene criterios explícitos de aceptación/rechazo. + +**En bib2graph:** `b2g curate` implementa el flujo PRISMA. Requiere que documentes criterios de decisión. + +Ver [Guía: Curación PRISMA paso a paso](../guias/curacion-prisma.md). + +--- + +## R + +### Reproducibilidad + +Capacidad de reproducir exactamente el mismo resultado (corpus, redes, comunidades) desde los mismos inputs, sin variabilidad. + +**En bib2graph:** Reproducibilidad es un principio central. Mismo corpus → mismo `corpus_hash` → mismas redes → mismas comunidades (Louvain con seed determinístico). + +--- + +### Resolución (Louvain) + +Parámetro del algoritmo Louvain que controla el tamaño de las comunidades detectadas. Resolución alta → comunidades más pequeñas y numerosas. Resolución baja → comunidades más grandes y menos numerosas. + +**Default en bib2graph:** `resolution: 1.0` (balance). + +--- + +## S + +### Scent bibliométrico + +Ranking determinístico sin IA que usa estructura bibliométrica (acoplamiento, co-citación, centralidad) para rankear candidatos en forrajeo. + +**En bib2graph:** Cuando haces `b2g chain`, los candidatos se rankean por scent (no por LLM ni embeddings). Es reproducible y explicable. + +--- + +### Seed + +Acción de sembrar el corpus inicial desde una ecuación de búsqueda. `b2g seed "[ecuacion]"` trae papers desde OpenAlex. + +**Estados del corpus:** SEEDED → CHAINED → FILTERED → BUILT → (SNAPSHOT/EXPORTED). + +--- + +### Snapshot + +Captura congelada del corpus en un momento. `b2g snapshot create` guarda el estado actual; `b2g snapshot restore` rehidrata desde un snapshot anterior. + +**En bib2graph:** Útil para reproducibilidad — si necesitas volver a un corpus anterior, restaura desde snapshot. + +--- + +## T + +### TF-IDF + +**Term Frequency-Inverse Document Frequency.** Métrica de ranking que pondera términos raros en el corpus (raros = más informativos) vs. frecuentes (frecuentes = menos informativos). + +**En bib2graph:** No lo usamos en el core (nuestro ranking es bibliométrico). Pero muchos papers históricos en el corpus usan TF-IDF para retrieval. + +--- + +## W + +### Workspace + +Carpeta de investigación que contiene un corpus, sus redes, snapshots y exports. Un workspace = una investigación. + +**En bib2graph:** `b2g init ./mi-sota` crea un workspace. Dentro vive: +- `workspace.json` (metadata) +- `library.duckdb` (corpus) +- `networks/` (redes exportadas) +- `snapshots/` (snapshots) +- `exports/` (GraphML, CSV, etc.) + +--- + +## Y + +### YAML (Yet Another Markup Language) + +Formato de configuración legible. bib2graph usa YAML para specs de redes y ecuaciones. + +**En bib2graph:** +```yaml +networks: + - kind: bibliographic_coupling + clustering: louvain + resolution: 1.0 +``` + +--- + +## Z + +### Zotero + +Gestor de referencias de código abierto. No está integrado en bib2graph hoy, pero es un candidato para futuras integraciones (flujo: Zotero → bib2graph). + +--- + +## Siglas comunes + +| Sigla | Significado | En bib2graph | +|-------|-----------|---| +| API | Application Programming Interface | `bib2graph` es una librería Python (API) + CLI | +| CLI | Command Line Interface | `b2g` — interfaz de línea de comandos | +| CSV | Comma-Separated Values | Formato de curación: `curate.csv` | +| DOI | Digital Object Identifier | Identificador único de paper | +| FSM | Finite State Machine | El ciclo de bib2graph es un FSM (SEEDED → CHAINED → FILTERED → BUILT) | +| IR | Information Retrieval | Recuperación de información | +| JSON | JavaScript Object Notation | Formato de salida: `b2g --json` | +| PRISMA | Preferred Reporting Items for Systematic Reviews and Meta-Analyses | Metodología de curación | +| SOTA | State of The Art | Estado del arte — el objetivo de bib2graph | +| SQL | Structured Query Language | Queries en DuckDB: `b2g read list` usa SQL internamente | +| YAML | YAML Ain't Markup Language | Formato de specs: `networks.yaml`, `equation.yaml` | + +--- + +## Cómo usar este glosario + +- **Alfabéticamente:** Busca el término que no entiendes. +- **Desde las guías:** Cada guía enlaza a términos relevantes. +- **Desde el CLI:** `b2g --help` menciona términos; este glosario los define. + +--- + +## No encontraste el término? + +Si hay un término en bib2graph que no está aquí, [abre un issue](https://github.com/complexluise/bib2graph/issues) o sugiere una adición. diff --git a/docs/tutoriales/claude-code.md b/docs/tutoriales/claude-code.md new file mode 100644 index 0000000..660b8ba --- /dev/null +++ b/docs/tutoriales/claude-code.md @@ -0,0 +1,143 @@ +--- +title: Tu primer mapa de investigación (5 min) +--- + +# Tu primer mapa de investigación (5 minutos) + +Cómo armar una **red visual de artículos científicos** sobre un tema que te +interesa, usando un agente de IA para dirigir bib2graph. + +!!! info "Qué necesitas" + - **Un agente de IA** con ejecución de código: Claude, ChatGPT, MiniMax, o similar. + - **bib2graph instalado** en tu máquina (1 minuto: `pip install bib2graph`). + - **5 minutos**. + +!!! warning "Paso previo: instala bib2graph" + Abre tu terminal y ejecuta: + ```bash + pip install bib2graph + ``` + + Verifica que funciona: + ```bash + b2g --help + ``` + + Si ves la ayuda de comandos, listo. Si no, ve a [Instalación](../getting-started/installation.md). + +--- + +## Paso 1 — Elige un agente + +Abre **cualquiera** de estos (con ejecución de código activada): + +- **Claude** (web o app) +- **ChatGPT** (Plus, con Code Interpreter) +- **MiniMax** o similar + +Lo importante: que pueda ejecutar Python y crear archivos. Nosotros no hacemos vendor locking +a un solo agente — bib2graph funciona igual en todos. + +--- + +## Paso 2 — Plantea el tema al agente + +En una conversación nueva, escribe algo así: + +!!! example + ```text + Tengo bib2graph instalado en mi máquina. + + Quiero explorar el estado del arte sobre [TU TEMA]. + + Usa bib2graph para: + 1. Buscar papers en OpenAlex + 2. Construir una red de referencias compartidas + 3. Mostrar qué comunidades de investigación existen + + Mi tema: [ejemplo: métodos de recuperación de información en contextos multilingües] + ``` + +El agente va a sugerirte una **ecuación de búsqueda** — una forma de decirle a OpenAlex +exactamente qué buscar. La revisas, ajustas si hace falta. + +--- + +## Paso 3 — El agente construye la red + +Cuando la ecuación te cierre, pide al agente: + +!!! example + ```text + Bien. Ahora ejecuta estos comandos en mi máquina: + + 1. b2g init mi-sota + 2. cd mi-sota + 3. b2g seed "[TU ECUACION]" --min-year 2015 + 4. b2g build + 5. b2g export --format graphml + + Muestra la red visualizada y un resumen de las comunidades. + ``` + +El agente ejecuta esos comandos por ti — trae papers, identifica qué papers citan +las mismas referencias, agrupa esos papers en comunidades. + +**Resultado:** Una imagen de la red (puntos = papers, líneas = referencias compartidas, +colores = comunidades). + +--- + +## Paso 4 — Lee el mapa + +Pide al agente: + +!!! example + ```text + Para cada comunidad en la red: + - Nombre (síntesis del enfoque) + - Keywords principales + - Top 3 papers más centrales (autor, año) + + Muestra una tabla. + ``` + +Ya tienes un **primer mapa mental del campo** — qué tendencias existen, quiénes +son los referentes, dónde están las divergencias. + +--- + +## Paso 5 — Guarda tu trabajo + +Tu corpus está en el archivo `.duckdb` dentro de la carpeta `mi-sota/`. Los archivos +`.graphml` están en `exports/`. + +Para continuar después: + +```bash +cd mi-sota +b2g read list # Ver papers en el corpus +b2g read top # Ver papers más centrales +``` + +Si quieres explorar más tarde desde el agente, carga los archivos GraphML o Parquet en +la conversación y sigue desde ahí. + +--- + +## Listo + +En 5 minutos: + +✅ Instalaste bib2graph +✅ Trajiste papers de un tema (con ayuda del agente) +✅ Viste cómo se relacionan (qué citan en común) +✅ Identificaste sub-temas / enfoques +✅ El corpus está guardado en tu máquina + +## Qué sigue + +- **Más detalles:** [Tutorial completo — De la pregunta al reporte de SOTA](sota-completo.md) + — cómo refinar, curar y redactar un análisis riguroso. +- **Referencia completa:** [Todos los comandos de bib2graph](../reference/cli.md). +- **Como librería Python:** [API Python](../reference/python-api.md). diff --git a/docs/tutoriales/index.md b/docs/tutoriales/index.md index f059454..0862b71 100644 --- a/docs/tutoriales/index.md +++ b/docs/tutoriales/index.md @@ -4,29 +4,27 @@ title: Tutoriales # Tutoriales -Los **tutoriales** te enseñan a usar bib2graph paso a paso, partiendo de cero y -llegando a un resultado concreto. Son para *aprender* (a diferencia de las -[Guías](../guias/index.md), que son para *resolver una tarea puntual*). +Los **tutoriales** enseñan a usar bib2graph paso a paso, partiendo de cero y +llegando a un resultado concreto. Son para *aprender*. -!!! note "En construcción" - El tutorial end-to-end está en preparación. Hoy, el camino guiado más corto - es el [Quickstart](../getting-started/quickstart.md). +## Para empezar (5 minutos) - Planificado (seguimiento en el - [issue #208](https://github.com/complexluise/bib2graph/issues/208)): +- :material-robot: **[Tu primer mapa en Claude (5 min)](claude-code.md)** - **De una pregunta de investigación a un mapa de citación.** Un caso real, - de punta a punta, reusando el corpus de ejemplo `examples/valoraciones/`: + Cómo armar, sin instalar nada, una red visual de papers sobre un tema. + Conversación con Claude — todo automatizado. Ideal para explorar rápido. - 1. Plantear la pregunta y la ecuación de búsqueda. - 2. Sembrar el corpus (`seed`). - 3. Expandir por citaciones (`chain`). - 4. Curar: aceptar/rechazar, filtros PRISMA. - 5. Construir las redes (`build`) y leerlas (`read`). - 6. Exportar a GraphML y abrir en Gephi. +## Tutorial completo (3–4 horas) -## Mientras tanto +- :material-book: **[De la pregunta al reporte de SOTA](sota-completo.md)** -- [Quickstart](../getting-started/quickstart.md) — el ciclo mínimo en 2 minutos. + Recorrido completo paso a paso: pregunta → ecuación → corpus → curación PRISMA + → 3 redes → análisis de comunidades → tendencias → redacción del reporte. + Para alguien que quiere hacer un SOTA riguroso. + +## También útil + +- [Quickstart](../getting-started/quickstart.md) — el ciclo mínimo con CLI `b2g` en tu máquina (2 min). - [Guías (how-to)](../guias/index.md) — recetas para tareas concretas. - [Referencia del CLI `b2g`](../reference/cli.md) — todos los comandos. +- [API Python](../reference/python-api.md) — bib2graph como librería. diff --git a/docs/tutoriales/sota-completo.md b/docs/tutoriales/sota-completo.md new file mode 100644 index 0000000..4b7d051 --- /dev/null +++ b/docs/tutoriales/sota-completo.md @@ -0,0 +1,562 @@ +--- +title: Tutorial completo — De la pregunta al reporte de SOTA +--- + +# Tutorial completo — De la pregunta al reporte de SOTA + +Un recorrido paso a paso por un **estado del arte riguroso**: desde formular +la pregunta de investigación hasta redactar un análisis con tensiones, +escuelas de pensamiento y huecos sin explorar. + +Este es el tutorial detallado (45 min de lectura + 2–3 horas de investigación). +Si acaba de descubrir bib2graph, empiece por el [tutorial corto](claude-code.md). + +!!! info "Requisitos" + - Una pregunta de investigación clara (no un tema genérico). + - **bib2graph instalado** en tu máquina: `pip install bib2graph` + - Un agente de IA (Claude, ChatGPT, MiniMax, etc.) con ejecución de código, o disposición a usar el CLI directamente. + - Tiempo: 3–4 horas para el ciclo completo. + - Opcional: API key de OpenAlex (gratuita, para corpus > 100 papers). + +--- + +## Anatomía de un estado del arte + +Un SOTA riguroso no es una lista de papers. Es un **mapa de cómo piensa un campo**: + +``` +pregunta ──► ecuación ──► corpus ──► curación ──► redes ──► comunidades + │ + ◄──────────────────────── lectura + (qué vemos en el mapa) + │ + tendencias, tensiones, huecos + │ + reporte +``` + +Vamos paso a paso. + +--- + +## Paso 0 — Instala bib2graph + +**Entrada:** Tu máquina con Python 3.10+. +**Salida:** bib2graph funcionando y listo para usar. + +Abre tu terminal y ejecuta: + +```bash +pip install bib2graph +``` + +Verifica que funciona: + +```bash +b2g --help +``` + +Deberías ver la lista de comandos de bib2graph. Si no, consulta [Instalación](../getting-started/installation.md). + +### Entiende el flujo de comandos básicos + +bib2graph usa un flujo de **comandos secuenciales**: + +```bash +b2g init ./mi-sota # Crea una carpeta de proyecto +cd mi-sota + +b2g seed "tu_ecuacion" # Trae papers desde OpenAlex +b2g chain # (Opcional) Expande por citaciones +b2g curate # Acepta/rechaza papers (curación) +b2g build # Construye redes +b2g read list # Visualiza papers +b2g export --format graphml # Exporta redes +``` + +Cada comando transiciona el estado del corpus. Vamos a ver esto en detalle. + +--- + +## Paso 1 — Afina tu pregunta de investigación + +**Entrada:** Un tema que te interesa. +**Salida:** Una pregunta clara, acotada, formulable. + +### Cómo llegar de un tema a una pregunta + +❌ *"Inteligencia artificial"* → Demasiado genérico. ¿Qué aspecto? ¿Qué dominio? + +✅ *"¿Cómo se aborda el problema de alineación de valores en modelos de +lenguaje grandes, y cuáles son las tensiones entre eficiencia computacional +y robustez ética entre 2020 y hoy?"* + +### Checklist para tu pregunta + +1. **¿Específica?** ¿Puedo reducirla a 4–6 palabras clave? +2. **¿Temporal?** ¿Hay un rango de años relevante? (5–10 años suele ser ideal). +3. **¿Acotada?** ¿Espero 50 papers, 500, 5000? +4. **¿Contestable?** ¿Puedo responderla buscando en artículos científicos? + +### Ejemplo: Desarrolla la pregunta + +**Mi tema inicial:** "Métodos de recuperación de información." + +**Mi pregunta después del refinamiento:** +> ¿Cuáles son los enfoques dominantes para recuperación de información en +> contextos multilingües, cuáles son sus tensiones (vocabulario vs. semántica, +> eficiencia vs. precisión), y cuáles son los huecos sin explorar entre 2015 +> y 2024? + +Eso es buscable, acotado, y con una tensión clara. + +--- + +## Paso 2 — Elaborá una ecuación de búsqueda + +**Entrada:** Tu pregunta de investigación. +**Salida:** Una ecuación booleana que traduzca esa pregunta. + +### La estructura + +``` +(concepto_A_términos) +AND (concepto_B_términos) +AND (concepto_C_términos) +[AND NOT (exclusiones)] +``` + +Cada paréntesis es un concepto; dentro, los términos están unidos por `OR` +(sinónimos). Los `AND` conectan conceptos (todos deben estar presentes). + +### Para mi ejemplo + +``` +(information retrieval OR IR OR search) +AND (multilingual OR cross-lingual OR language-agnostic OR polyglot) +AND (method OR approach OR framework OR system OR architecture) +``` + +### Consejos prácticos + +- **Un concepto = una dimensión de tu pregunta.** Aquí: + - Concepto A: la tarea (recuperación). + - Concepto B: la restricción (multilingüe). + - Concepto C: el tipo de resultado (métodos, no papers de aplicación). + +- **Evita genéricos.** "machine learning" sola atrapa cientos de miles de papers. + +- **Testea:** Pídele a Claude que busque 50 papers con tu ecuación y revisa los + títulos. ¿Ves ruido sistemático? Ajusta. + +- **Excluye si hace falta:** `AND NOT (machine translation)` si hay mucho ruido + ahí. + +--- + +## Paso 3 — Siembra el corpus + +**Entrada:** Ecuación de búsqueda, rango de años. +**Salida:** Corpus inicial (~200–300 papers). + +### Opción 1: Con CLI directo + +```bash +cd mi-sota +b2g seed "(information retrieval OR IR) AND (multilingual OR cross-lingual) AND (method OR approach)" --min-year 2015 --max-results 250 +``` + +bib2graph descarga papers desde OpenAlex y los guarda en `.duckdb` dentro de la carpeta. + +### Opción 2: Con ayuda de un agente + +Puedes pedirle al agente (Claude, ChatGPT, etc.) que: + +1. Genere la ecuación de búsqueda a partir de tu pregunta. +2. Execute el comando `b2g seed` en tu máquina. +3. Verifique los resultados. + +**Prompt:** + +```text +Tengo mi pregunta de investigación: +[TU PREGUNTA] + +Propón una ecuación de búsqueda para bib2graph. +Luego dame el comando exacto para ejecutar: +b2g seed "[ecuacion]" --min-year 2015 --max-results 250 + +Muestra qué debería ver después de ejecutarlo. +``` + +El agente genera la ecuación y tú ejecutas el comando en tu terminal. Luego: + +```bash +b2g read stats --group-by year +``` + +Para ver la distribución temporal. + +### Verificación + +Revisa el corpus: + +```bash +b2g read list --query "tus_palabras_clave" | head -20 +``` + +¿Todos tienen relación directa con tu tema? Si hay ruido sistemático, ajusta la +ecuación y vuelve a ejecutar `b2g seed` en una carpeta nueva. + +### Punto de decisión + +- **Corpus muy pequeño (<50 papers)?** Abre la ecuación (menos `AND`, más sinónimos). +- **Corpus muy grande (>1000)?** Ciérrala (más `AND`, menos sinónimos, o agrega + un concepto específico más). +- **Corpus bien (~200–400)?** Perfecto, seguimos. + +--- + +## Paso 4 — Expande por citaciones (opcional) + +**Entrada:** Corpus de siembra. +**Salida:** Corpus expandido (~20–50% más) con más densidad de referencias. + +El **forrajeo** (backward chaining) busca papers que no aparecieron en tu +búsqueda original, pero que son citados por los que sí están. Aumenta la +*sensibilidad* (no pierdes papers clave) sin agregar mucho ruido. + +### Cuándo hacer esto + +✅ **Hazlo si:** el tema es muy específico, querés máxima cobertura, o el corpus +inicial es pequeño. + +❌ **No lo hagas si:** el corpus ya es grande (>500), no querés aumentarlo, o es +tu primer SOTA (primero lee la red de siembra, después decide). + +### Con Claude + +```text +Expandí el corpus usando forrajeo (backward chaining): +seguí una capa de referencias de los papers ya en el corpus +y agregá hasta 100 papers nuevos. + +Muestra: +- Cuántos papers nuevos se agregaron +- Si hay papers muy antiguos (pre-2000): ¿los mantengo o descarto? +``` + +--- + +## Paso 5 — Curá el corpus (PRISMA) + +**Entrada:** Corpus (siembra o expandido). +**Salida:** Corpus curado, con decisiones criteriales explícitas y versionables. + +La curación es **manual**. No se automatiza porque cada decisión es criterial. + +### Flujo PRISMA simplificado + +``` +IDENTIFICACIÓN +├─ ¿Duplicado o retractado? → RECHAZAR +└─ ¿En el idioma adecuado? → si no, RECHAZAR + +CRIBADO (título + resumen) +├─ ¿Título claramente fuera de scope? → RECHAZAR +└─ ¿Resumen no aporta al tema? → RECHAZAR + +ELEGIBILIDAD (lectura de disponibilidad) +├─ ¿Texto completo inaccesible? → CANDIDATO (maybe later) +└─ ¿Métodos/resultados vagos o especulativos? → CANDIDATO + +INCLUSIÓN (decisión final) +├─ ¿Relevancia alta? → ACEPTAR +└─ ¿Relevancia media pero aporta tensión? → ACEPTAR +``` + +### Con Claude + +Pídele a Claude: + +```text +Hacé curación PRISMA del corpus. Revisá cada paper: +1. Si es duplicado o retractado: RECHAZAR +2. Si el título no tiene relación directa: RECHAZAR +3. Si el resumen sugiere que no toca el tema: RECHAZAR +4. Si no hay texto completo: CANDIDATO (no rechaces) +5. En otro caso: ACEPTAR + +Mostrá un resumen: cuántos ACCEPTED, REJECTED, CANDIDATE. +Lista 5 ejemplos de RECHAZADOS con razón. +``` + +### Checklist + +- [ ] ¿Documenté mis criterios explícitamente? +- [ ] ¿El corpus ACCEPTED quedó entre 100–300 papers? +- [ ] ¿Revisaste una muestra de rechazados para asegurarme de que no falta algo obvio? +- [ ] ¿Hay equilibrio entre años (no es monocromático)? + +--- + +## Paso 6 — Construí las redes + +**Entrada:** Corpus curado (papers ACCEPTED). +**Salida:** 3 redes + métricas. + +Las tres redes que importan: + +1. **Acoplamiento bibliográfico:** Papers que citan las mismas referencias. + (Responde: ¿cuáles son los sub-temas?) +2. **Co-citación:** Papers que se citan mutuamente o son citados juntos. + (Responde: ¿cuáles son los influentes?) +3. **Co-autoría:** Quién escribe con quién. + (Responde: ¿cuáles son los colegios invisibles?) + +### Con Claude + +```text +Construí 3 redes del corpus ACCEPTED usando bib2graph: +1. Acoplamiento bibliográfico +2. Co-citación +3. Co-autoría + +Para cada red: +- Detectá comunidades usando Louvain (clustering) +- Muestra una visualización coloreada por comunidad +- Reportá: # nodos, # aristas, # comunidades +- Lista los 3 papers más centrales (mayor grado) de cada comunidad +``` + +### Qué esperar + +- **Acoplamiento:** es la "red primaria" — más densa, más comunidades. Aquí ves + los sub-temas claros. +- **Co-citación:** a menudo es más dispersa; destaca papers que actúan como + referencias canónicas (los "clásicos" del campo). +- **Co-autoría:** también dispersa, pero útil para ver equipos y colaboraciones + persistentes. + +--- + +## Paso 7 — Nombrá y caracterizá las comunidades + +**Entrada:** Redes + corpus curado. +**Salida:** Una tabla con comunidades, keywords, seminales, y tensiones. + +Para cada comunidad en la red de acoplamiento (la principal): + +1. **Nombre:** 1–3 palabras que capturen el enfoque (ej. "Métodos probabilísticos"). +2. **Keywords:** 5–7 palabras clave dominantes en esa comunidad. +3. **Seminales:** Top 2–3 papers (mayor grado) dentro de la comunidad. +4. **Descripción:** 2–3 frases de qué hacen esos papers. +5. **Tensión:** ¿Qué los diferencia de otras comunidades? ¿Dónde discrepan? + +### Con Claude + +```text +Para la red de acoplamiento, analizá cada comunidad: + +1. Nombre (síntesis del enfoque en 1–3 palabras) +2. Keywords principales (5–7 terms que definen esa comunidad) +3. Seminales: top 2 papers (por grado), con título, autores, año +4. Descripción: ¿qué hacen esos papers? ¿Cuál es el enfoque común? +5. Tensión: ¿en qué difieren de otras comunidades? + +Armame una tabla: [Comunidad | Enfoque | Keywords | Seminales | Tensión] +``` + +### Ejemplo de salida + +| Comunidad | Enfoque | Keywords | Seminales | Tensión | +|-----------|---------|----------|-----------|---------| +| **Probabilístico** | Modelos estadísticos, HMM | language model, smoothing, EM | [Smith 2008], [Brown 2010] | Eficiencia vs. cobertura | +| **Vectorial** | Embeddings, semántica latente | word embeddings, LSA, similarity | [Mikolov 2013], [Pennington 2014] | Interpretabilidad vs. performance | +| **Neuronal** | Deep learning, transformers | neural networks, attention, BERT | [Vaswani 2017], [Devlin 2019] | Costo computacional vs. generalización | + +--- + +## Paso 8 — Analiza tendencias e influencias + +**Entrada:** Redes, comunidades, corpus. +**Salida:** Observaciones sobre evolución, actores clave, huecos. + +Responde estas preguntas: + +### 1. ¿Cómo evolucionó el campo? + +```text +Muestra: +- Gráfico de # papers/año en el corpus +- Cómo cambiaron las comunidades (% de papers) año a año +- ¿Hay una comunidad que crecía y ahora decrece? +- ¿Hay una emergente (crecimiento exponencial últimos 3 años)? +``` + +### 2. ¿Quiénes son los influyentes? + +```text +Top 10 autores por: +- Cantidad de papers (productividad) +- Grado en la red de co-citación (influencia) +- Betweenness (actúan de "puente" entre comunidades) +``` + +### 3. ¿Dónde están los huecos? + +```text +Mirando las 3 redes, identificá: +- Comunidades o autores que no se conectan entre sí (fronteras vacías) +- Combinaciones de keywords que NO aparecen (gaps) +- Preguntas que nadie se hace (inferir de lo que sí hay) +``` + +### 4. ¿Quién lidera por institución? + +```text +Co-autoría: top 10 instituciones por: +- Cantidad de papers +- Colaboraciones externas +``` + +--- + +## Paso 9 — Redactá el reporte + +**Entrada:** Análisis anterior, comunidades, tendencias. +**Salida:** Documento estructurado (Markdown, Word, Google Docs). + +### Estructura recomendada + +``` +RESUMEN EJECUTIVO +├─ Pregunta de investigación +├─ Hallazgos principales (2–3 frases) +└─ Síntesis de una línea + +INTRODUCCIÓN +├─ Contexto y motivación +├─ Pregunta de investigación +└─ Scope + +METODOLOGÍA +├─ Ecuación de búsqueda +├─ Criterios PRISMA (en una frase) +├─ Tamaño final: X papers, años A–B +└─ Redes construidas (acoplamiento, co-citación, co-autoría) + +MAPEO DEL CAMPO +├─ Tabla de comunidades (visto en Paso 7) +├─ Figura: red de acoplamiento coloreada +├─ Trabajos seminales por comunidad +└─ Descripción de cada enfoque (prosa) + +TENDENCIAS Y EVOLUCIÓN +├─ Trayectoria temporal +├─ Shift de enfoques (cuál sube, cuál baja) +├─ Emergentes (keywords nuevas, comunidades nuevas) +└─ Actores clave (top autores, instituciones) + +TENSIONES Y DEBATES +├─ Matriz: Enfoque A vs. Enfoque B, qué diferencia +├─ Dónde se superponen, dónde divergen +├─ Huecos de investigación +└─ Preguntas abiertas + +CONCLUSIONES +├─ Síntesis de hallazgos +├─ Implicaciones para investigación futura +└─ Recomendaciones + +APÉNDICES +├─ Tabla: todos los papers (corpus completo) +├─ CSV de papers → comunidad +└─ GraphML (red para abrir en Gephi/Cytoscape) +``` + +### Herramientas de escritura + +- **Google Docs:** Colaboración y comentarios; exportás a .docx después. +- **Markdown + Pandoc:** Máximo control; exportás a PDF/DOCX/HTML. +- **Obsidian:** Integración con Zotero; bueno para notas de investigación. +- **Quarto/Jupyter:** Si querés reproducibilidad y código integrado. + +### Tips de redacción + +- **Cada comunidad merece un párrafo.** No amontonés. +- **Las figuras llevan leyendas explicativas.** "Red de acoplamiento bibliográfico + con N nodos (papers), M aristas (referencias compartidas), K comunidades + (detectadas por Louvain, resolution=1.0). Cada color = una comunidad. + Los nodos más grandes = papers de mayor grado (más referencias compartidas)." +- **Tensiones no son "problemas abiertos".** Son donde dos enfoques dicen cosas + diferentes. Ej. "La escuela probabilística prioriza eficiencia computacional, + mientras que la neuronal prioriza generación de resultados. En corpus multilingües, + esto afecta cómo se mapean traducciones." + +--- + +## Paso 10 — Versiona tu trabajo + +**Entrada:** Reporte, corpus, redes. +**Salida:** Carpeta reproducible. + +### Si usaste Claude web + +Descarga: + +- `corpus.parquet` — tu semilla guardada (subirla a Claude luego para continuar). +- `*.graphml` — networks para Gephi/Cytoscape. +- `clusters.csv` — papers → comunidad. +- `reporte.docx` o `reporte.md` — tu análisis final. + +Guardalos en una carpeta: `sota-[tema]-[fecha]/` + +### Si usaste bib2graph localmente + +El corpus vive en `.duckdb`; las redes se exportan automáticamente: + +```bash +# Exportá todo +b2g export --format graphml +b2g export --format csv + +# Versioná +git add . +git commit -m "SOTA: [Tu Tema] — corpus, redes, reporte" +``` + +--- + +## Checklist final + +- [ ] Pregunta de investigación clara y formulada +- [ ] Ecuación de búsqueda documentada y testeada +- [ ] Corpus de 100–300 papers ACCEPTED (curados por PRISMA) +- [ ] 3 redes construidas y visualizadas +- [ ] Comunidades nombradas, con keywords, seminales y tensiones identificadas +- [ ] Tendencias temporales e influencias (autores, instituciones) documentadas +- [ ] Huecos y fronteras vacías identificados +- [ ] Reporte redactado con estructura clara y figuras con leyendas +- [ ] Artefactos (GraphML, CSV, corpus) guardados y versionados +- [ ] ¿Se puede reproducir desde la ecuación de búsqueda? ✓ + +--- + +## Siguientes pasos + +- **Análisis más profundo:** Elige una comunidad y haz un sub-SOTA acotado. +- **Integración con tu investigación:** Posicioná tu trabajo en el mapa — ¿dónde + caés? ¿Dónde resolvés una tensión? +- **Publicación:** Convertí el SOTA en un paper, capítulo de tesis, o entrada de + blog. + +--- + +## Referencias + +- [Cómo elaborar un reporte de estado del arte (guía)](../guias/reporte-estado-del-arte.md) — + complemento con más detalles en curación y redacción. +- [Arquitectura de bib2graph](../ARCHITECTURE.md) +- [Referencia del CLI `b2g`](../reference/cli.md) +- [API Python](../reference/python-api.md) diff --git a/pyproject.toml b/pyproject.toml index f40a6fc..df5ae53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ build-backend = "hatchling.build" [project] name = "bib2graph" -version = "0.10.1" # Hitos 7 (dedup) + 8 (co-citación). De acá en adelante el bump +version = "0.10.2" # Hitos 7 (dedup) + 8 (co-citación). De acá en adelante el bump # lo maneja release-please vía PR de release (CI ya conectado). description = "Librería de Python para transformar corpus bibliográficos en redes bibliométricas reproducibles (co-citación, colaboración, co-ocurrencia)." readme = "README.md"