2015-02-06 121 views
-1

我正在與bigrams合作,我有一個問題。我有正確的答案,但在錯誤格式奇怪的Bigram問題

import nltk 
import collections 
import collections 
from collections import defaultdict 

cnt = collections.Counter() 

tokens = [['a','b','c','d'],['b','c','a','b','c']] 

def bigram(tokens, n): 
    for toks in tokens: 
     cnt.update(nltk.bigrams(toks)) 

    return cnt.most_common(n) 

print bigram(tokens, 2) 

我能得到正確的輸出:[(('b', 'c'), 3), (('a', 'b'), 2)] 但我需要它是[(('b c'), 3), (('a b'), 2)]。我問教授我是否可以重新排列參數,但他堅持要求輸入必須是bigram(tokens, n)才能獲得完整的學分。

回答

0

只需使用

return [(" ".join(tup), count) for tup, count in cnt.most_common(n)] 

讓人印象深刻,與列表內涵,優雅的處理元組和長度昧加入的元組的教授:d

順便說一句,我總是建議是誠實 - - 所以你可能想說「互聯網上的某個人給了我這個提示,但我可以理解爲什麼這會起作用」 - 這樣你就永遠不會對抄襲負責,並且會爲可能的考試做好準備。

+0

不要寫作業。他不會學到任何東西。 – user38034 2015-02-06 20:11:13

+1

@ user38034:他的教授將足夠聰明,可以在他的幾行代碼中使用谷歌,並且會在這裏結束;谷歌真的不是剽竊者的朋友。我相信Datguyovrder足夠聰明,可以真正理解我寫的東西 - 否則,他的教授就會被注意到,因爲很明顯,如果有人一直在試圖讓他的不合規解決方案通過,但是突然出現了正確的一個,你開始提問像「這是如何工作的?」。 – 2015-02-06 20:14:31

+0

我認爲教授有更重要的事情要做,而不是谷歌他的學生的代碼。 – user38034 2015-02-06 20:21:25