【问题标题】:Code for counting the number of syllables in the words in a file计算文件中单词的音节数的代码
【发布时间】:2011-07-27 16:05:02
【问题描述】:

到目前为止,我有以下代码来计算 cmudict(CMU 发音词典)中单词的音节数。它计算字典中所有单词的音节数。现在我需要用我的输入文件替换 cmudict 并找到文件中每个单词的音节数,这些单词打印为输出。仅以读取模式打开输入文件不起作用,因为 dict() 不能作为文件的属性提供。 代码如下:

从 curses.ascii 导入 isdigit 从 nltk.corpus 导入 cmudict d = cmudict.dict() # 获取 CMU 发音字典 定义 nsyl(字): """在多个发音的情况下返回最大音节数""" return max([len([y for y in x if isdigit(y[-1])]) for x in d[word.lower()]]) w_words = dict([(w, nsyl(w)) for w in d.keys() if w[0] == 'a'or'z']) worth_abbreviating = [(k,v) for (k,v) in w_words.iteritems() if v > 3] 打印价值_缩写

谁能帮帮我?

【问题讨论】:

  • 而且这段代码是用来打印音节数大于3的单词,所以它有助于根据音节数确定复杂的单词。

标签: python nltk


【解决方案1】:

不确定这会解决整个问题,但是:

w_words = dict([(w, nsyl(w)) for w in d.keys() if w[0] == 'a'or'z'])

应该是

w_words = dict([(w, nsyl(w)) for w in d.keys() if w[0] == 'a' or w[0] == 'z'])

因为

if w[0] == 'a'or'z' 表示if (w[0] == 'a') or ('z')。字符串'z' 为Truish,因此条件始终为True。

例如,

In [36]: 'x' == 'a'or'z'
Out[36]: 'z'

In [37]: 'x' == 'a' or 'x'=='z'
Out[37]: False

【讨论】:

  • 没有,代码可以正常工作并显示所有单词(从 a 到 z)及其音节数。我需要做的是对输入文件做同样的事情。
  • 在这种情况下,w_words = dict([(w, nsyl(w)) for w in d.keys() if w[0] == 'a'or'z']) 可以缩短为 w_words = dict([(w, nsyl(w)) for w in d.keys()])。你能发布一个输入文件内容的sn-p吗?
  • 哦,对了!它也适用于缩写形式:) 输入文件是 sample.txt,其中包含以下文本:我对你的浮夸感到震惊,你拒绝我的请求是居高临下的,而我从不认真地放弃你的请求。你的行为既令人费解又充满戏剧性。为了你的下一个差事,你不会在你的手机上打我的手机号码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多