HOWTO · Python
Python で音節を数える
このチュートリアルでは、Python で音節を数える方法を示します
このページの内容
Python は単語や文に含まれる母音字を数えられますが、その数は音節数の大まかな目安にすぎません。以下では a、e、i、o、u を数える4つの方法を紹介し、大文字と小文字の扱いをそろえる方法や、母音ごとの出現回数を確認する方法も説明します。そのうち1つでは、重複のない母音を所属判定に使うために set() を利用します。これらの例で、人が発音する音節数を判定することはできません。
ループと if 文で母音字を数える
ループで各文字を調べ、if 文でその文字が母音の文字列に含まれていればカウントを1増やします。先に casefold() を呼び出すと、大文字と小文字の英語の母音を同じ方法で判定できます。合計数だけが必要な場合に、最も直接的な方法です。
次の例を実行します。
このセクションのコードと表示されるラベルや出力は英語のままです。
word = "Beautiful"
vowels = "aeiou"
count = 0
for letter in word.casefold():
if letter in vowels:
count += 1
print(count)
5
一致する母音字は5個です。このループが数えるのは異なる文字の種類ではなく出現回数なので、繰り返し出てくる u も2回カウントされます。
辞書内包表記で母音を数える
母音ごとの出現回数を知りたい場合は、辞書を使います。この内包表記は母音を順に調べてキーを作り、正規化した単語の中で一致する文字を合計して、それぞれの値にします。比較に使う変数は単語から取り出した文字でなければなりません。キーと比較すると、意図した母音ごとのカウントになりません。
このセクションのコードと表示されるラベルや出力は英語のままです。
word = "Beautiful".casefold()
vowel_counts = {
vowel: sum(1 for letter in word if letter == vowel)
for vowel in "aeiou"
}
print(vowel_counts)
{'a': 1, 'e': 1, 'i': 1, 'o': 0, 'u': 2}
この辞書が示すのは文字の出現頻度であり、音節数ではありません。一致する文字がない母音も、値が0の項目として残ります。
dict.fromkeys() で母音を数える
dict.fromkeys() は、各母音をキーとして同じ初期値で辞書を作ります。この例では各値を0で初期化し、ループで一致した文字の項目を増やします。初期化と加算の処理を分けて確認したい場合に便利です。
このセクションのコードと表示されるラベルや出力は英語のままです。
word = "Beautiful".casefold()
vowel_counts = dict.fromkeys("aeiou", 0)
for letter in word:
if letter in vowel_counts:
vowel_counts[letter] += 1
print(vowel_counts)
{'a': 1, 'e': 1, 'i': 1, 'o': 0, 'u': 2}
辞書の値は整数なので、この例では初期値を共有しても問題ありません。キーは小文字の母音5文字で、反復時の順序は指定した文字列に従います。
集合と関数で母音字を数える
集合を使うと、重複のない母音の集まりに対して所属判定ができます。処理を関数にまとめれば、ほかの単語にも再利用できます。関数はカウントを返すため、それを表示するか、ほかの処理と組み合わせるかは呼び出し側で決められます。
このセクションのコードと表示されるラベルや出力は英語のままです。
def count_vowel_letters(word):
vowels = set("aeiou")
return sum(1 for letter in word.casefold() if letter in vowels)
print(count_vowel_letters("Beautiful"))
5
集合には各母音が1つずつしか含まれませんが、単語内で一致する文字が現れるたびに合計へ1加算されます。この方法でも、判定の前に英語の大文字を小文字にそろえます。
母音のカウントで分かること、分からないこと
これらの例が数えるのは、基本的な英語の母音字5種類の出現回数です。単語を発音上の音節に分割するわけではありません。つづりと発音は一対一に対応せず、母音字が発音されなかったり、別の文字と組み合わさって1つの音を表したりすることがあります。たとえば、コードは Beautiful に母音字が5個あると数えますが、この単語の発音上の音節は3つです。この違いから、母音字を数えても音節数を正確には求められないことが分かります。
例では、意図的に対象の文字を絞っています。アクセント記号付きの母音、y、言語ごとのつづりの規則は含まれないため、処理するテキストに合わせて対象の文字を調整してください。casefold() は大文字と小文字をそろえますが、アクセント記号を取り除いたり、発音を推定したりはしません。英語の大まかな目安を手早く得るには、これらの方法はシンプルで処理も分かりやすいものです。発音上の音節数を確実に求めるには、母音字のカウントだけでは不十分です。