2011-04-01 22 views
2

到目前爲止,我已經有了下面這段代碼來計算cmudict(CMU發音字典)中單詞的音節數。它計算詞典中所有單詞的音節數。現在我需要用我的輸入文件替換cmudict,並找到打印爲輸出的文件中每個單詞的音節數。只是以讀模式打開輸入文件不起作用,因爲dict()不能作爲文件的屬性提供。用於統計文件中字數的音節數的代碼

 
from curses.ascii import isdigit 
from nltk.corpus import cmudict 

d = cmudict.dict() # get the CMU Pronouncing Dict 

def nsyl(word): 
    """return the max syllable count in the case of multiple pronunciations""" 
    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] 
print worth_abbreviating

任何人都可以請幫我: 的代碼如下?

+1

而這種代碼是逾3音節數印刷的話所以有助於確定基於音節計數複雜的單詞。 – aks 2011-04-01 13:56:02

回答

2

不知道這將解決整個問題,但:

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,所以條件總是爲真。

例如,

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

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

沒有代碼工作正常,並顯示所有單詞(從a到z)以及他們的音節計數。我需要做的是對輸入文件做同樣的事情。 – aks 2011-04-01 12:54:04

+0

在這種情況下,如果w [0] =='a'or'z'],那麼'w_words = dict([(w,nsyl(w))for w.in d.keys()''''可以縮寫爲'w_words = dict([(w,nsyl(w))for d.keys()])'。你能發表一個輸入文件內容的片段嗎? – unutbu 2011-04-01 13:20:40

+0

哦對!它也適用於縮短的形式:)輸入文件是sample.txt,其中包含以下文本:我對你的華麗態度感到驚訝,你拒絕我的要求而屈就於我,而我從來沒有認真對待過你的要求。你的行爲既是難題又是情緒化的。爲了你的下一個任務,你不會在你的手機上打我的手機號碼。 – aks 2011-04-01 13:45:31

相關問題