Haiku Checker
Periksa apakah teks Anda mengikuti struktur suku kata haiku tradisional 5-7-5 dengan analisis per-baris.
Tentang Haiku
Haiku adalah bentuk puisi Jepang dengan tiga baris mengikuti pola suku kata 5-7-5. Penghitung suku kata menggunakan heuristik kelompok vokal bahasa Inggris dan mungkin tidak akurat 100% untuk semua kata.
Tentang alat ini
Pemeriksa haiku adalah alat yang memvalidasi apakah teks Anda mengikuti struktur tradisional 5-7-5 suku kata dari haiku. Haiku adalah bentuk puisi Jepang kuno yang terkenal karena keringkasan dan elegansinya, dan jumlah suku kata adalah dasar dari strukturnya. Alat ini menganalisis setiap baris secara independen, menghitung suku kata, dan memberikan umpan balik terperinci sehingga Anda dapat melihat dengan tepat di mana komposisi Anda sesuai atau menyimpang dari format klasik.
Untuk menggunakan pemeriksa haiku, cukup tempel puisi tiga baris Anda ke dalam bidang input dan klik tombol analisis. Alat ini akan menampilkan jumlah suku kata untuk setiap baris dan menunjukkan apakah mereka cocok dengan pola 5-7-5. Ini sangat berguna bagi penulis yang belajar komposisi haiku, siswa yang mempelajari puisi Jepang di kelas sastra, atau siapa pun yang menyempurnakan pekerjaan mereka sebelum berbagi dengan orang lain.
Pertanyaan yang Sering Diajukan
Implementasi Kode
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.