Я работаю над проектом обработки естественного языка и застрял на разбиении слов на слоги (используя 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
?