import codecs
#處理編碼的套件
import operator
##處理字典檔排序的套件

text = codecs.open("text.txt","r","utf-8")
#讀取存成TXT檔的文字,讀入後統一轉成UTF-8格式

text_new =""
for line in text.readlines():
    text_new += "".join(line.split('\n'))
#在這邊先做一個小處理,把不同行的文章串接再一起,如果未來要做一些去除標點符號的處理也會是在這邊。

def ngram(text,n): #第一個參數放處理好的文章,第二個參數放字詞的長度單位

    words=[]     #存放擷取出來的字詞
    words_freq={}#存放字詞:計算個數 
    
    for w in range(len(text)-(n-1)): #要讀取的長度隨字詞長度改變
        words.append(text[w:w+n])    #抓取長度w-(n-1)的字串

    for word in words:
        if word not in words_freq:               #如果這個字詞還沒有被放在字典檔中
            words_freq[word] = words.count(word) #就開一個新的字詞,裡面放入字詞計算的頻次

    words_freq = sorted(words_freq.iteritems(),key=operator.itemgetter(1),reverse=True) #change words_freq from dict to list 
    return words_freq

words_freqs = ngram(text_new,3)

for i in words_freqs:
    print i[0],i[1]
    
'''
道:" 35
笑道: 13
"那僧 9
聽了, 8
"士隱 8
。士隱 7
。"那 7
那僧道 6
....
'''

words_freqs = ngram(text_new,2)

for i in words_freqs:
    print i[0],i[1]
    
'''
:" 45
道: 36
士隱 33
雨村 25
,不 24
。" 22
那僧 17
,便 16
...
'''