OSS · CLI en Python
rhythm-lens
El ritmo del texto se vuelve monótono sin que lo notes. Así que mídelo.
rhythm-lens mide el ritmo de Markdown en japonés, inglés y portugués: burstiness del largo de las frases, variación de sílabas/moras, estructura de párrafos. Ubica tu documento sobre las distribuciones medidas de dos papers publicados y responde en percentiles, sin corazonadas. El idioma se detecta automáticamente (usa --lang para forzarlo).
Ver en GitHub Paper en japonés (DOI) → Paper cross-lingual (DOI) →
Las 4 métricas centrales
Los siete modelos medidos derivan en la misma dirección en estas cuatro. La dirección es universal entre modelos, la magnitud depende del modelo. Los tamaños de efecto vienen del paper.
| Métrica | Dirección de IA | d de Cohen |
|---|---|---|
Burstiness (caracteres) | más bajo = monótono | −0.96 |
Burstiness (moras) | más bajo = monótono | −0.80 |
CV de frases por párrafo | más bajo = uniforme | −0.67 |
CV del largo de frase (caracteres) | más bajo = monótono | −0.56 |
Cross-lingual desde la v0.2.0
Un paper de continuación repitió el diseño en inglés y portugués, con corpus humanos pre-ChatGPT recién recolectados (853 posts de Dev.to, 403 posts de TabNews) contra 7 LLMs cada uno. La dirección de la monotonización se mantuvo en las 70 de 70 celdas modelo×métrica. Por eso rhythm-lens incluye baselines calibrados para tres idiomas, cada uno con su propia distribución congelada.
| Idioma | Baseline humano | d de burstiness (agregado) | Métricas centrales d < 0 |
|---|---|---|---|
| Japonés | 696 artículos de Qiita/Zenn | −0,96 | (por modelo, 3er paper) |
| Inglés | 853 posts de Dev.to (2019–2022) | −1,12 | 7/7 modelos |
| Portugués | 403 posts de TabNews (2022) | −1,03 | 7/7 modelos |
La dirección de las métricas de ritmo se transfiere entre idiomas; solo los umbrales se recalibran por idioma. La excepción es la puntuación: la densidad de comas invierte el signo entre inglés (+) y portugués (−), así que es un dialecto por idioma, no un acento compartido.
De dónde salen los umbrales
Ningún número mágico ajustado a mano. Todos los umbrales, distribuciones y tamaños de efecto se generan de forma congelada desde los datos publicados del paper (Imoto 2026, DOI 10.5281/zenodo.21413035).
- Lado humano: 696 artículos técnicos de Qiita/Zenn escritos entre 2020 y 2022, antes de que la asistencia por LLM fuera común
- Lado IA: 350 documentos generados por 7 LLMs (Claude 3 Haiku / Sonnet 4 / Opus 4 / GPT-3.5 Turbo / GPT-4o / GPT-OSS 20B / Llama 3.2 1B)
- El archivo de baseline se puede regenerar de manera determinística desde los CSVs públicos del repositorio del paper, y el código de medición sigue las mismas definiciones, con los números verificados contra el paper
- La salida muestra, métrica por métrica, en qué percentil de la distribución humana está tu documento
Instalación
pipx install git+https://github.com/kenimo49/rhythm-lens Las dependencias son MeCab (mecab-python3 + unidic-lite, para japonés) y pyphen (aproximación de sílabas para inglés/portugués). Sin LLM, sin clave de API, sin red: totalmente local y determinístico.
Uso
Entra un archivo, sale un veredicto. Con artículos de largo normal la respuesta es inmediata.
rhythm-lens article.md # métricas centrales + veredicto con línea de evidencia
rhythm-lens article.md --all # las 12 métricas completas
rhythm-lens article.md --json # salida legible por máquina para CI / hooks de editor Relación con natural-japanese
La herramienta partió de coji/natural-japanese (MIT). La observación de ese proyecto, que el olor a IA aparece más en el ritmo que en el vocabulario, se volvió el punto de partida del paper, y rhythm-lens sigue sus definiciones de burstiness, aproximación de moras y división de frases. github.com/coji/natural-japanese
| natural-japanese | rhythm-lens | |
|---|---|---|
| Forma | Agent Skill (un LLM lee y corrige) | CLI determinístico (sin LLM) |
| Objetivo principal | Corregir el texto | Medir y mostrar la evidencia |
| Umbrales | Observación de práctica | Distribuciones medidas publicadas (percentiles) |
Capas complementarias, sin rivalidad: mide con rhythm-lens antes y después de corregir con natural-japanese.
Límites
- Tres idiomas tienen baseline (ja/en/pt); otros idiomas, incluido el español, aún no tienen distribución calibrada
- Calibrado en el registro de blog técnico; novelas, poesía y logs de chat siguen otras distribuciones
- Los documentos con menos de 5 frases no se juzgan (el mismo mínimo del paper)
- El frontmatter YAML se elimina antes de medir
- El conteo de moras/sílabas se aproxima (UniDic para japonés, pyphen para en/pt); léelo junto a las métricas por caracteres
Artículos relacionados
Herramientas relacionadas para devs
- claude-shift Multi-account Claude Code manager. Switch the active login, sync the two-file auth Claude Code actually reads (~/.claude/.credentials.json + ~/.claude.json), and watch 5-hour and weekly usage across all accounts. CLI + local API + Chrome extension.
- opencut-mcp Servidor MCP que maneja OpenCut classic desde cualquier cliente MCP. Playwright mantiene la sesión del editor; doce herramientas exponen la línea de tiempo, assets y pipeline de export. Corre contra un fork de OpenCut classic.
- mcp-scorecard Pre-flight checks for MCP servers: passive token footprint, use-case scoping, security, and name safety. LLM-facing quality scorecard.
- 404 Games Ten single-file canvas mini games for your 404 page, inspired by famous error pages. Vanilla JS, zero dependencies, theme-aware. Live on this site's 404.