разделение слов по слогам с помощью словаря произношения CMU, NLTK и Python3 - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю над проектом обработки естественного языка и застрял на разбиении слов на слоги (используя nltk и cmudict.dict() в python 3).

В настоящее время я считаю слоги, просматривая слова в мой корпус в словаре произношения CMU и подсчета количества ударений в его списке фонем. Кажется, это работает очень хорошо.

Я застрял на том, как использовать эту информацию для разделения сопутствующей графемы после подсчета, поскольку я не понимаю, как переводить фонемы обратно в графемы (кажется, ошибка или использовать список фонем, чтобы как-то разбить графему.

Вот функция, которую я написал для этого (слово токенизация происходит в другом месте):

def getSyllables(self):
    pronunciation = cmudict.dict() # get the pronunciation dictionary
    syllableThreshold = 1 # we dont care about 1 syllable words right now
    for word in self.tokens:
        for grapheme, phonemes in pronunciation.items():
            if grapheme == word.lower(): # all graphemes are lowercase, we have to word.lower() to match
                syllableCounter = 0
                for x in phonemes[0]:
                    for y in x:
                        if y[-1].isdigit(): # an item ending in a number is a stress (syllable)
                            syllableCounter += 1
                if syllableCounter > syllableThreshold:
                    output = ' '.join([word, "=", str(syllableCounter)])
                    print(output)
                    print(phonemes)
                else:
                    print(word)

Просто в качестве примера, мой текущий вывод:

Once
an
angry = 2
[['AE1', 'NG', 'G', 'R', 'IY0']]
man

Как я могу разбить слово angry, например, на an - gry?

...