8

我是初学者,我有一个需要帮助的问题。这是家庭作业,因此不胜感激。我看过一些类似的话题,但答案超出了我的所知范围......

作为更大程序的一部分,我需要计算文本文件中的音节数。除了音节,我什么都有。我尝试了几种不同的方法,但并不总是能捕捉到特殊情况。我应该“计算相邻元音组,不包括单词末尾的“e”。我明白这意味着什么,但我无法在我的程序中正确理解它。这是我所拥有的:::

def syllables(word):
    syl = 0
    vowels = 'aeiouy'
    starts = ['ou','ei','ae','ea','eu','oi']
    endings = ['es','ed','e']
    word = word.lower().strip(".:;?!")
    for vowel in vowels:
        syl +=word.count(vowel)
    for ending in endings:
        if word.endswith(ending):
            syl -=1
    for start in starts:
        if word.startswith(start):
            syl -=1
    if word.endswith('le'):
        syl +=1
    if syl == 0:
        syl+=1
    return syl

编辑:新代码

def syllables(word):
    count = 0
    vowels = 'aeiouy'
    word = word.lower().strip(".:;?!")
    if word[0] in vowels:
        count +=1
    for index in range(1,len(word)):
        if word[index] in vowels and word[index-1] not in vowels:
            count +=1
    if word.endswith('e'):
        count -= 1
    if word.endswith('le'):
        count+=1
    if count == 0:
        count +=1
    return count
4

2 回答 2

6

只是一个建议,但不是“寻找”相邻的元音,每次遇到出现在单词开头或辅音之后的初始元音时,您是否可以不增加“计数”,除了“e” ' 在单词的末尾(除非您对该单词的计数为零)。澄清一下,任何时候你遇到相邻的元音,只有第一个元音会增加你的计数。

不肯定它会起作用,但我认为它适用于我刚刚写的所有单词。

祝你好运。

于 2013-01-26T20:43:12.360 回答
1

该主题已在如何获取单词中的音节数?

他们得出的结论是,CMU 发音词典中没有出现的单词应该像这里讨论的那样用一个简短的函数来处理。

另一个建议的解决方案是使用pyphen

更简单:维基百科的文章https://en.wikipedia.org/wiki/Hyphenation_algorithm链接到Francis Mark Liang 的连字算法的 Python 实现。该算法相当古老,但仍在 TeX 中使用。

>>> import hyphenate
>>> hyphenate.hyphenate_word("computer")
['com', 'put', 'er']
于 2020-04-27T22:00:20.547 回答