OSS · CLI em Python
rhythm-lens
O ritmo do texto vira monótono sem você perceber. Então meça.
O rhythm-lens mede o ritmo de Markdown em japonês, inglês e português: burstiness do comprimento das frases, variação de sílabas/moras, estrutura de parágrafos. Ele localiza seu documento nas distribuições medidas de dois papers publicados e responde em percentis, sem achismo. A língua é detectada automaticamente (use --lang para forçar).
Ver no GitHub Paper em japonês (DOI) → Paper cross-lingual (DOI) →
As 4 métricas centrais
Os sete modelos medidos derivam na mesma direção nessas quatro. A direção é universal entre modelos, a magnitude depende do modelo. Os tamanhos de efeito vêm do paper.
| Métrica | Direção de IA | d de Cohen |
|---|---|---|
Burstiness (caracteres) | mais baixo = monótono | −0.96 |
Burstiness (moras) | mais baixo = monótono | −0.80 |
CV de frases por parágrafo | mais baixo = uniforme | −0.67 |
CV do comprimento de frase (caracteres) | mais baixo = monótono | −0.56 |
Cross-lingual desde a v0.2.0
Um paper de continuação repetiu o desenho em inglês e português, com corpora humanos pré-ChatGPT recém-coletados (853 posts do Dev.to, 403 posts do TabNews) contra 7 LLMs cada. A direção da monotonização se manteve nas 70 de 70 células modelo×métrica. Por isso o rhythm-lens traz baselines calibrados para três línguas, cada uma com sua própria distribuição congelada.
| Língua | Baseline humano | d de burstiness (agregado) | Métricas centrais d < 0 |
|---|---|---|---|
| Japonês | 696 artigos Qiita/Zenn | −0,96 | (por modelo, 3º paper) |
| Inglês | 853 posts do Dev.to (2019–2022) | −1,12 | 7/7 modelos |
| Português | 403 posts do TabNews (2022) | −1,03 | 7/7 modelos |
A direção das métricas de ritmo porta entre línguas; só os limiares são recalibrados por língua. A exceção é a pontuação — a densidade de vírgulas inverte o sinal entre inglês (+) e português (−), então ela é um dialeto por língua, não um sotaque compartilhado.
De onde vêm os limiares
Nenhum número mágico ajustado na mão. Todos os limiares, distribuições e tamanhos de efeito são gerados de forma congelada a partir dos dados publicados do paper (Imoto 2026, DOI 10.5281/zenodo.21413035).
- Lado humano: 696 artigos técnicos de Qiita/Zenn escritos entre 2020 e 2022, antes da assistência por LLM se popularizar
- Lado IA: 350 documentos gerados por 7 LLMs (Claude 3 Haiku / Sonnet 4 / Opus 4 / GPT-3.5 Turbo / GPT-4o / GPT-OSS 20B / Llama 3.2 1B)
- O arquivo de baseline pode ser regenerado deterministicamente dos CSVs públicos do repositório do paper, e o código de medição segue as mesmas definições, com os números conferidos contra o paper
- A saída mostra, métrica por métrica, em que percentil da distribuição humana o seu documento está
Instalação
pipx install git+https://github.com/kenimo49/rhythm-lens As dependências são o MeCab (mecab-python3 + unidic-lite, para japonês) e o pyphen (aproximação de sílabas para inglês/português). Sem LLM, sem chave de API, sem rede: totalmente local e determinístico.
Uso
Um arquivo entra, um veredito sai. Em artigos de tamanho comum a resposta é imediata.
rhythm-lens article.md # métricas centrais + veredito com linha de evidência
rhythm-lens article.md --all # todas as 12 métricas
rhythm-lens article.md --json # saída legível por máquina para CI / hooks de editor Relação com o natural-japanese
A ferramenta partiu do coji/natural-japanese (MIT). A observação daquele projeto, de que o cheiro de IA aparece mais no ritmo do que no vocabulário, virou o ponto de partida do paper, e o rhythm-lens segue as definições dele para burstiness, aproximação de moras e divisão de frases. github.com/coji/natural-japanese
| natural-japanese | rhythm-lens | |
|---|---|---|
| Forma | Agent Skill (um LLM lê e corrige) | CLI determinístico (sem LLM) |
| Objetivo principal | Corrigir o texto | Medir e mostrar a evidência |
| Limiares | Observação de prática | Distribuições medidas publicadas (percentis) |
Camadas complementares, sem rivalidade: meça com o rhythm-lens antes e depois de corrigir com o natural-japanese.
Limites
- Três línguas têm baseline (ja/en/pt); outras línguas, incluindo o espanhol, ainda não têm distribuição calibrada
- Calibrado no registro de blog técnico; romances, poesia e logs de chat seguem outras distribuições
- Documentos com menos de 5 frases não são julgados (mesmo mínimo do paper)
- O frontmatter YAML é removido antes da medição
- A contagem de moras/sílabas é aproximada (UniDic para japonês, pyphen para en/pt); leia junto com as métricas por caracteres
Artigos relacionados
Ferramentas 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 controla o OpenCut classic a partir de qualquer cliente MCP. Playwright mantém a sessão do editor; doze ferramentas expõem timeline, assets e pipeline de export. Roda contra um fork do 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.