Skip to content

Instantly share code, notes, and snippets.

@showyou
Created January 27, 2010 12:06
Show Gist options
  • Select an option

  • Save showyou/287783 to your computer and use it in GitHub Desktop.

Select an option

Save showyou/287783 to your computer and use it in GitHub Desktop.
#!/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