HOWTO · Python

在 Python 中計算音節

本教程演示如何在 python 中計算音節

本頁內容

Python 可以計算單字或句子中的母音字母,但這個數字只能粗略估計音節數。以下範例示範四種計算 a、e、i、o 和 u 字母的方法,包括如何統一大小寫,以及查看各母音的個別計數。其中一種方法使用 set() 儲存不重複的母音,以便檢查字元是否屬於母音。這些範例無法判斷人實際唸出多少個音節。

使用迴圈和 if 陳述式計算母音字母

迴圈會逐一檢查字元;如果字元屬於母音字串,if 陳述式就將計數加一。先呼叫 casefold(),就能用同一個成員檢查來處理英文母音的大寫和小寫形式。若只需要總數,這是最直接的方法。

執行以下範例:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

word = "Beautiful"
vowels = "aeiou"
count = 0

for letter in word.casefold():
    if letter in vowels:
        count += 1

print(count)
5

結果是五個符合條件的母音字母。重複出現的 u 會計算兩次,因為這個迴圈計算的是出現次數,而不是不重複字母的數量。

使用字典推導式計算母音

如果要分別計算每個母音出現的次數,可以使用字典。推導式會逐一遍歷母音並建立字典鍵,接著針對每個母音,計算正規化後的單字中符合條件的字元數,作為該鍵的值。比較時使用的變數必須代表單字中的字元;若改用鍵來比較,就無法得到預期的各母音計數。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

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}

這個字典呈現的是字母出現頻率,而非音節數。即使某個母音沒有符合項目,它仍會保留在字典中,值為零。

使用 dict.fromkeys() 計算母音

dict.fromkeys() 會為每個母音建立一個鍵,並將它們設為相同的初始值。此處每個值都從零開始;接著迴圈每遇到一個符合條件的字元,就將對應項目的值加一。如果想分別看清楚初始化與累計的步驟,這種寫法很實用。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

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}

字典的值是整數,因此在此共用初始值是安全的。鍵是五個小寫母音字母,遍歷順序則依照提供的字串排列。

使用集合與函式計算母音字母

集合可用來檢查某個字元是否屬於一組不重複的母音。將邏輯放進函式,就能重複用於其他單字。函式會回傳計數;呼叫端可以自行決定要列印結果,或將它與其他處理流程結合。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

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

集合中的每個母音雖然只會出現一次,但單字中每次符合的字元都會為總數加一。這個版本也會先統一英文大寫字母的大小寫,再檢查集合成員。

了解母音計數能計算與不能計算的內容

這些範例計算的是五個基本英文母音字母的出現次數,並不會將單字拆分成實際唸出的音節:拼字和發音並非一一對應,母音字母可能不發音,也可能與另一個字母組合來表示一個發音。例如,程式碼在 Beautiful 中找到五個母音字母,但這個單字實際有三個口說音節。這個差異說明,計算母音字母並不能可靠地得出音節數。

範例刻意只處理有限的字母集合,因此不包含重音母音、y 或各語言特有的拼字規則。請依照要處理的文字調整字元集合。casefold() 可統一大小寫,但不會移除重音符號,也不會推斷發音。若要快速粗估英文文字的音節數,這些方法簡單且易於理解;若需要可靠的口說音節計數,光靠母音字母計數並不足夠。