HOWTO · 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}
이 딕셔너리가 나타내는 것은 음절 수가 아니라 글자의 빈도입니다. 일치하는 문자가 없는 모음도 딕셔너리에 남으며 값은 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}
딕셔너리 값이 정수이므로 여기서는 초기값을 공유해도 안전합니다. 키는 소문자 모음 다섯 글자이며, 순회 순서는 제공한 문자열을 따릅니다.
집합과 함수로 모음 글자 세기
집합은 중복 없는 모음들을 저장해 포함 여부를 확인하는 데 쓸 수 있습니다. 로직을 함수에 넣으면 다른 단어에도 재사용할 수 있습니다. 함수는 개수를 반환하므로, 반환값을 출력할지 다른 처리와 결합할지는 호출하는 쪽에서 결정합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
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()는 대소문자를 정규화하지만 악센트를 제거하거나 발음을 추론하지는 않습니다. 영어 텍스트에서 대략적인 값을 빠르게 구하려는 경우 이 패턴들은 간단하고 동작을 이해하기 쉽습니다. 실제 발음의 음절 수를 신뢰성 있게 구하려면 모음 글자 세기만으로는 충분하지 않습니다.