Contador de bigramas de caracteres
Escriba banana y verá sus cinco pares de letras ordenados: an y na aparecen dos veces cada uno y ba una. Cada par muestra cuántas veces sale y qué parte del total representa, una huella clásica para detectar idiomas o analizar cifrados. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- banana
- Longitud
- 6
- Total de bigramas
- 5
- Bigramas únicos
- 3
Los bigramas de caracteres son cada par de letras que se sitúan una junto a otra en una cadena—ba, an, na, an, na dentro de banana—y sus frecuencias son una huella clásica del idioma, del cifrado y de la disposición del teclado. Lingüistas y estudiantes de NLP usan tablas de bigramas como base para detectar idiomas; los cursos de criptoanálisis grafican dígrafos para localizar estructura similar al inglés en el cifrado; diseñadores tipográficos e investigadores de métodos de entrada observan qué pares dominan para ajustar espaciado y colocación de teclas. Este contador de frecuencia de bigramas de caracteres acepta una cadena de texto, opcionalmente unifica mayúsculas y minúsculas, desliza una ventana de dos caracteres por toda la cadena y devuelve una tabla ordenada de cada par único con recuento absoluto y proporción de todos los pares adyacentes.
Qué son los bigramas de caracteres y por qué importan sus frecuencias
Un bigrama de caracteres es simplemente dos caracteres consecutivos leídos de izquierda a derecha: en la palabra banana los pares sucesivos son ba, an, na, an y na. Contar cuántas veces aparece cada par produce una tabla de frecuencias de multiconjunto mucho más rica que los histogramas de letras sueltas para muchas tareas posteriores.
Los idiomas naturales muestran preferencias fuertes de pares—th y he dominan el inglés corrido, mientras otros pares son raros—así que el perfil de bigramas de una muestra breve suele separar idiomas mejor que el simple conteo de letras. Los manuales clásicos de criptoanálisis enseñan la frecuencia de dígrafos tras el análisis de monogramas: incluso cuando se sustituyen letras, los pares comunes del inglés reaparecen como dígrafos de cifrado repetidos y guían ataques con crib.
La tipografía y el diseño de teclados usan las mismas estadísticas por otro motivo: los pares de alta frecuencia informan candidatos de kerning, ligaduras de dígrafos y modelos de coste de recorrido entre teclas en disposiciones alternativas. Este extremo solo implementa el conteo determinista: para una cadena de longitud n registra n menos una ventanas solapadas, acumula claves idénticas de dos caracteres, ordena por recuento descendente con desempate lexicográfico estable sobre la cadena del bigrama y adjunta a cada fila su proporción del total de ventanas.
No adivina etiquetas de idioma, no descifra ni recomienda fuentes; esos productos consumen la tabla que usted recibe. Espacios, puntuación y dígitos son caracteres como cualquier otro, de modo que Hello world genera un bigrama con espacio entre o y w. Como la ventana se basa en unidades de código UTF-16 de JavaScript, los emoji del plano astral pueden aparecer como mitades sustitutas—útil para diagnósticos tipo byte, no para lingüística de grafemas.
Mantenga las entradas bajo el techo de caracteres publicado y fije las filas ordenadas en las pruebas para que la automatización sea reproducible entre entornos de ejecución.
Qué puede hacer con ella
Experimentos de detección de idioma
Construya perfiles base de dígrafos a partir de párrafos de muestra y compare vectores de proporción de bigramas entre idiomas candidatos sin una biblioteca NLP completa.
Criptoanálisis y CTF de aula
Cuente dígrafos del cifrado para localizar pares de alta frecuencia que puedan corresponder a combinaciones comunes del inglés en ataques de sustitución.
Tipografía y ajuste de teclado
Ordene pares de caracteres adyacentes en fragmentos de corpus para priorizar candidatos de kerning o puntuar teclados alternativos por coste de recorrido entre pares.
Preguntas frecuentes
¿Se cuentan espacios y puntuación?
Sí. Se cuenta cada par adyacente de caracteres, incluidos espacios, dígitos y puntuación. No hay un tokenizador que elimine lo que no son letras.
¿Qué ocurre si mi texto está vacío o tiene un solo carácter?
Los bigramas necesitan dos caracteres consecutivos; la entrada vacía o de un solo carácter no forma un par adyacente y no se factura.
¿Cuántos pares salen de un texto?
Siempre uno menos que su número de caracteres, porque los pares se solapan. Las seis letras de banana dan cinco pares (ba, an, na, an y na), de los cuales solo tres son distintos.
¿Se distinguen las mayúsculas de las minúsculas?
Por defecto, sí: Ab y ab son pares distintos. Si desactiva esa distinción, todo el texto pasa a minúsculas antes de contar, y Hello y hello suman en los mismos pares.
¿Para qué sirve la frecuencia de bigramas?
Para comparar idiomas, porque pares como th y he dominan el inglés; para localizar los pares más repetidos de un cifrado por sustitución, y para elegir pares de interletraje o evaluar distribuciones de teclado.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/str/char-bigram-frequency \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"banana"}'const res = await fetch("https://api.kit.forhosting.com/str/char-bigram-frequency", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "banana"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/char-bigram-frequency",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "banana"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/char-bigram-frequency", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"banana"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"banana"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/char-bigram-frequency", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "banana"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.char_bigram_frequency",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_chars | 100000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
El texto vacío y las cadenas de menos de dos caracteres fallan con invalid_input en lugar de una tabla vacía.
Qué son los bigramas de caracteres y por qué importan sus frecuencias
Por defecto se conserva la capitalización para que Ab y ab permanezcan distintos; fije case_sensitive en false cuando desee un perfil unificado para experimentos de idioma.
Contrato de entrada, forma de la respuesta y comportamiento de errores
Ejemplo: banana produce cinco bigramas en total con an y na contando dos cada uno, ba contando uno, rangos ordenados por frecuencia y luego por cadena del bigrama. Combine la tabla con sus propios modelos de idioma o gráficos si necesita clasificadores o mapas de calor; este extremo solo cuenta y no emite gráficos ni predicciones de modelo. Envíe por POST un cuerpo JSON con un campo obligatorio, text, la cadena no vacía que desea escanear en busca de pares adyacentes. Se aceptan los alias input, string, value, content y s para que los scripts reutilicen nombres habituales. El parámetro opcional case_sensitive vale true por defecto y también puede enviarse como caseSensitive o sensitive; cuando es false toda la cadena se pasa a minúsculas antes de contar, de modo que Hello y hello comparten las mismas claves de dígrafo. El opcional top (alias limit, n) es un entero de uno a diez mil que trunca la tabla ordenada tras la clasificación; omítalo para recibir todos los bigramas únicos. Falta de text, cadenas vacías, objetos y matrices que no son cadenas, y valores que tras unificar mayúsculas siguen con menos de dos caracteres fallan con invalid_input y un mensaje que nombra el problema—esos fallos de validación no se facturan. El texto que supera el límite max_chars declarado también se rechaza. En caso de éxito el cuerpo repite el texto original y su length, informa total_bigrams como length menos uno de la forma escaneada, unique_bigrams como el número de pares distintos, case_sensitive resuelto, top opcional si lo fijó, un array frequencies de objetos con rank, bigram, count y share redondeado a seis decimales, y method igual a char_bigram_frequency.
Dónde una API de frecuencia de bigramas de caracteres aporta valor
Los prototipos de detección de idioma y los laboratorios docentes necesitan un oráculo determinista de dígrafos para que cada cuaderno de estudiante y cada calificador coincidan en los mismos rangos para el mismo párrafo de muestra. Los experimentos tipográficos y de disposición de teclado extraen estadísticas de pares de fragmentos de corpus para priorizar kerning o puntuar el coste de recorrido sin desplegar una pila completa de NLP. La validación fallida no consume saldo. Los cursos de criptoanálisis y los write-ups de CTF usan los recuentos de pares adyacentes como primer filtro antes de herramientas más pesadas, y una API de análisis diminuta evita reimplementar la ordenación y la aritmética de proporciones en cada lenguaje. Como la implementación es parse de nivel A puro, cada llamada exitosa cuesta el precio base publicado $0.002 sin tokens de modelo ni red de salida.
Preguntas técnicas
¿Cómo cuento las frecuencias de bigramas de caracteres en una cadena?
Envíe un cuerpo JSON con text igual a su cadena (al menos dos caracteres). La API desliza una ventana de dos caracteres sobre el texto y devuelve cada par único ordenado por recuento con la proporción de todos los pares adyacentes.
¿Qué hace case_sensitive?
El valor predeterminado true conserva mayúsculas y minúsculas para que Ab y ab sean bigramas distintos. Fije case_sensitive en false para pasar el texto a minúsculas antes de contar, habitual en bases de detección de idioma.
¿Cuánto cuesta el contador de frecuencia de bigramas de caracteres?
La herramienta del navegador es gratuita. Las peticiones API usan saldo prepago KIT a $0.002 por llamada exitosa; la entrada inválida no se factura.