根据音节数量从文件中过滤单词

时间:2018-08-30 18:10:04

标签: python nltk

我需要从.txt文件中识别复杂的单词。 我正在尝试使用nltk,但是不存在这样的模块。 复杂单词是文本中包含两个以上音节的单词。

1 个答案:

答案 0 :(得分:0)

我会使用Pyphen。这个模块有一个Pyphen类,用于断字。其中一种方法positions()返回单词中可以拆分的位数:

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

如果“感叹号”一词可以分为三个地方,则它有四个音节,因此您只需要过滤所有具有多个分开的地方的单词即可。

。 。

但是我注意到您将其标记为[t:nltk]问题。我本人没有NLTK的经验,但是@Jules建议的the question在这方面有一个不错的建议:使用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']

请注意,vowel phonemes have a number at the end, indicating stress

  

标记有压力的字元(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

。 。 。

不确定哪个是最佳选择,但我想您可以从这里解决问题。