Haiku Checker
Проверьте, соответствует ли текст традиционной структуре хайку 5-7-5 слогов с анализом по строкам.
О хайку
Хайку — это форма японской поэзии из трёх строк, следующих образцу 5-7-5 слогов. Счётчик слогов использует эвристику на основе гласных английского языка и может быть неточен на 100% для всех слов.
Об этом инструменте
Проверка хайку — это инструмент, который проверяет, следует ли ваш текст традиционной структуре из 5-7-5 слогов хайку. Хайку — это древняя японская поэтическая форма, известная своей краткостью и элегантностью, а подсчет слогов является фундаментальным элементом её структуры. Этот инструмент анализирует каждую строку независимо, подсчитывает слоги и предоставляет подробную обратную связь, чтобы вы могли точно увидеть, где ваше сочинение соответствует или отклоняется от классического формата.
Чтобы использовать проверку хайку, просто вставьте стихотворение из трёх строк в поле ввода и нажмите кнопку анализировать. Инструмент отобразит количество слогов в каждой строке и укажет, соответствуют ли они шаблону 5-7-5. Это особенно полезно для писателей, изучающих композицию хайку, студентов, изучающих японскую поэзию на уроках литературы, или для любого, кто шлифует свою работу перед её распространением.
Часто задаваемые вопросы
Реализация кода
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.