まず読み込んだファイルを先のファイルを使って形態素に分割する。
(漢字ーひらがなーかたかなの字種を使って判別)
読み込んだ「形態素どうしの2-gram」をとる。
(以前やった2-gramのコードを改良。以前の2-gramは「文字」を利用していた)
#! /usr/bin/env python # -*- coding: utf-8 -*- import re import codecs from aparser import Hantei ha = Hantei() class Cutmorph: def cut(self,sent): #sent = raw_input("カットしたい文字列を入力:").decode("utf-8") numarray = [-1] for x in range(len(sent)-1): if ha.hantei(sent[x]) != ha.hantei(sent[x+1]): numarray.append(x) numarray.append(len(sent)) array = [] for y in range(len(numarray)-1): before = int (numarray[y]) + 1 last = int (numarray[y+1] ) + 1 array.append(sent[before:last]) return array cu = Cutmorph() filename = raw_input("作成したい形態素の連鎖辞書の元ファイルを入力:") f = open(filename) fout = codecs.open("markov_dict_"+filename,"w","utf-8") mchain = [] for line in f: line = line.strip().decode("utf-8") array = cu.cut(line) for x in range(len(array)-1): #print array[x]+":"+array[x+1] mchain.append(array[x]+":"+array[x+1]) #for a in array: # print a # fout.write(a+"\n") #comb = [(a,array.count(a)) for a in array] #律速部分 comb = [(m,mchain.count(m)) for m in mchain] #律速部分 #print comb rmved = [] for c in comb: if not c in rmved: rmved.append(c) rmved = sorted(rmved,key=lambda x:int(x[1]),reverse=True) for r in rmved: print r[0],r[1] fout.write(r[0]+str(r[1])+"\n") f.close() fout.close()
(出力の抜粋)
済:む3
:挨拶3
云:うのが3
女:のような3
優:しい3
あとから:聞3
者:だ3
の:説明3
英語:の3
人:は3
。:それ3
食:った3
遊:びに3
アハハハ:と3