Created
January 27, 2010 12:06
-
-
Save showyou/287783 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/env python | |
| #! -*- coding:utf-8 -*- | |
| #import model | |
| #import simplejson | |
| # 挨拶のやりとりをクラス分けする | |
| """ | |
| def getAuthData(fileName): | |
| file = open(fileName,'r') | |
| a = simplejson.loads(file.read()) | |
| file.close() | |
| return a | |
| """ | |
| class BaseModel(): | |
| def setUp(self): | |
| pass | |
| def getClass(self): | |
| pass | |
| """ | |
| class DBModel(BaseModel): | |
| def setUp(self): | |
| conf = getAuthData("config.json") | |
| self.session = model.startSession(conf) | |
| """ | |
| class ArrayModel(BaseModel): | |
| def __init__(self): | |
| input = [ | |
| [ u"おはよう", u"おはよう"], | |
| [ u"おはよー", u"おはよう"], | |
| [ u"むくり", u"おは"], | |
| [ u"むくり", u"おはよう"], | |
| [ u"つかれた", u"おつかれ"], | |
| [ u"つかれた", u"おつー"], | |
| [ u"つかれ", u"おつかれ"], | |
| [ u"つかれ", u"がんばれ"], | |
| [ u"帰宅", u"おかえり"], | |
| [ u"かえった", u"おかえり"], | |
| #[ u"おはよう", u"おかえり"], | |
| ] | |
| self.input = [] | |
| for i in input: | |
| self.input.append({"now": i[0], "next": i[1], "class": 0}) | |
| def getValue(self, id, name): | |
| return self.input[id][name] | |
| def setValue(self, id, name, value): | |
| self.input[id][name] = value | |
| def getItem(self, id): return self.input[id] | |
| def size(self): | |
| return len(self.input) | |
| def printAll(self): | |
| for i in self.input: | |
| for ii in i: | |
| print i[ii], | |
| print "" | |
| def getClasses(self): | |
| #class(dictのkeyのほう)の一覧を返す | |
| #SQLならselect class from input distinctみたいな感じ? | |
| classes = [] | |
| for i in self.input: | |
| c1 = i["class"] | |
| if c1 not in classes:# もしc1がclassesになかったら | |
| classes.append(c1) | |
| return classes | |
| def getClassItems(self, id): | |
| return [ self.input[i] for i in range(0, len(self.input)) | |
| if self.input[i]["class"] == id] | |
| def classify(): | |
| def matchItem(item1, item2): | |
| if (item1["now"] == item2["now"] or | |
| item1["next"] == item2["next"]): | |
| return True | |
| return False | |
| def secondMatch( m,classNum ): | |
| result = [] | |
| for classItem in m.getClassItems(classNum): | |
| for srcClassNum in classes: | |
| if srcClassNum == classNum: break | |
| for srcClassItem in m.getClassItems(srcClassNum): | |
| if( matchItem( classItem, srcClassItem ) ): | |
| result.append((classNum, srcClassNum)) | |
| return result | |
| return None | |
| # classData[0] を classData[1]に変える | |
| def moveClass( m, classData ): | |
| for classItem in m.getClassItems(classNum): | |
| classItem["class"] = classData[1] | |
| m = ArrayModel() | |
| cls = 1 | |
| #一回目の操作 | |
| #まずはばらばらにクラス付け | |
| for i in range(0, m.size()): | |
| if m.getValue(i,"class") == 0: | |
| flag = False | |
| for j in range(0,i): | |
| if( matchItem( m.getItem(i), m.getItem(j) ) ): | |
| m.setValue(i, "class", m.getValue(j, "class")) | |
| flag = True | |
| break | |
| if flag == False: | |
| m.setValue(i, "class", cls) | |
| cls += 1 | |
| #二回目 | |
| #クラス一覧を取って、2番目以降のクラスがそれ以前のクラスに含まれるかどうか | |
| #調べる | |
| isChanged = True | |
| while( isChanged ): | |
| isChanged = False | |
| classes = m.getClasses() | |
| for classNum in classes[1:]: | |
| moveClasses = secondMatch( m,classNum ) | |
| if moveClasses != None: | |
| print "move class", moveClasses | |
| moveClass(m, moveClasses[0]) | |
| isChanged = True | |
| m.printAll() | |
| classify() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment