Отфильтруйте слова из файла по количеству слогов - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно определить сложные слова из файла .txt. Я пытаюсь использовать nltk, но такой модуль не существует. Сложные слова - это слова в тексте, который содержит более двух слогов.

1 Ответ

0 голосов
/ 30 августа 2018

Я бы использовал Пифен . Этот модуль имеет класс Pyphen, используемый для переноса слов. Один из его методов, positions(), возвращает количество мест в слове, где оно может быть разделено:

>>> from pyphen import Pyphen
>>> p = Pyphen(lang='en_US')
>>> p.positions('exclamation')
[2, 5, 7]

Если слово «восклицательный знак» можно разделить на три части, оно состоит из четырех слогов, поэтому вам просто нужно отфильтровать все слова по нескольким разделенным местам.

. , .

Но я заметил, что вы отметили его как вопрос [t: nltk]. Я не имел опыта работы с NLTK, но вопрос , предложенный @Jules, имеет хорошее предложение в этом аспекте: использовать модуль cmudict. Он дает вам список произношения слова в американском английском:

>>> from nltk.corpus import cmudict
>>> d = cmudict.dict()
>>> pronounciations = d['exasperation']
>>> pronounciations
[['EH2', 'K', 'S', 'AE2', 'S', 'P', 'ER0', 'EY1', 'SH', 'AH0', 'N']]

К счастью, у нашего первого слова есть только одно произношение. Он представлен в виде списка строк, каждая из которых представляет фонему:

>>> phonemes = pronounciations[0]
>>> phonemes
['EH2', 'K', 'S', 'AE2', 'S', 'P', 'ER0', 'EY1', 'SH', 'AH0', 'N']

Обратите внимание, что гласные фонемы имеют номер в конце, обозначающий ударение :

Гласные отмечены для ударения (1 = основной, 2 = вторичный, 0 = без стресса). Например: ЕСТЕСТВЕННЫЙ 1 N AE1 CH ER0 AH0 L

Итак, нам просто нужно посчитать количество фонем с цифрами в конце:

>>> vowels = [ph for ph in phonemes if ph[-1].isdigit()]
>>> vowels
['EH2', 'AE2', 'ER0', 'EY1', 'AH0']
>>> len(vowels)
5

. , ,

Не уверен, что это лучший вариант, но я думаю, что вы можете решить вашу проблему отсюда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...