Saltar al contenido
🛠️ToolsShed

Haiku Checker

Verifica si tu texto sigue la estructura tradicional de haiku 5-7-5 sílabas con análisis por línea.

Acerca del Haiku

Un haiku es una forma de poesía japonesa con tres versos que siguen un patrón de 5-7-5 sílabas. El contador de sílabas usa heurísticas de grupos vocálicos en inglés y puede no ser 100% preciso para todas las palabras.

Acerca de esta herramienta

Un verificador de haiku es una herramienta que valida si tu texto sigue la estructura tradicional de 5-7-5 sílabas del haiku. El haiku es una forma poética japonesa antigua conocida por su brevedad y elegancia, y la cuenta de sílabas es fundamental para su estructura. Esta herramienta analiza cada línea de forma independiente, cuenta las sílabas y proporciona retroalimentación detallada para que puedas ver exactamente dónde tu composición se ajusta o se desvía del formato clásico.

Para usar el verificador de haiku, simplemente pega tu poema de tres líneas en el campo de entrada y haz clic en el botón de análisis. La herramienta mostrará el conteo de sílabas de cada línea e indicará si coinciden con el patrón 5-7-5. Esto es especialmente útil para escritores que aprenden composición de haiku, estudiantes que estudian poesía japonesa en clases de literatura, o cualquiera que refine su trabajo antes de compartirlo con otros.

Preguntas Frecuentes

Implementación de Código

import re

def count_syllables(word: str) -> int:
    """Count syllables in an English word using vowel-group heuristic."""
    word = word.lower().strip()
    word = re.sub(r"[^a-z]", "", word)
    if not word:
        return 0
    # Count vowel groups
    count = len(re.findall(r"[aeiouy]+", word))
    # Adjust for silent-e ending
    if word.endswith("e") and count > 1:
        count -= 1
    return max(1, count)

def count_line_syllables(line: str) -> int:
    words = re.findall(r"[a-zA-Z'-]+", line)
    return sum(count_syllables(w) for w in words)

def check_haiku(text: str) -> dict:
    lines = [l.strip() for l in text.strip().split("\n") if l.strip()]
    if len(lines) != 3:
        return {"valid": False, "error": f"Expected 3 lines, got {len(lines)}"}

    counts = [count_line_syllables(line) for line in lines]
    expected = [5, 7, 5]
    valid = counts == expected

    return {
        "valid": valid,
        "lines": [
            {"text": lines[i], "syllables": counts[i], "expected": expected[i]}
            for i in range(3)
        ],
    }

haiku = """
An old silent pond
A frog jumps into the pond
Splash! Silence again
"""

result = check_haiku(haiku)
print(f"Valid haiku: {result['valid']}")
for line in result["lines"]:
    status = "✓" if line["syllables"] == line["expected"] else "✗"
    print(f"  {status} {line['syllables']}/{line['expected']} syllables: {line['text']}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.