我需要从.txt文件中识别复杂的单词。 我正在尝试使用nltk,但是不存在这样的模块。 复杂单词是文本中包含两个以上音节的单词。
答案 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
。 。 。
不确定哪个是最佳选择,但我想您可以从这里解决问题。