-
Notifications
You must be signed in to change notification settings - Fork 0
/
mave.py
52 lines (39 loc) · 1.54 KB
/
mave.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#-*- coding:utf-8 -*-
from Queue import Queue
from janome.tokenizer import Tokenizer
from markov_responder import Markov
import random
class Mave(object):
def __init__(self, name=u'メイ'):
self.name = name
self.msg_que = Queue()
self.tokenizer = Tokenizer()
self.markov = Markov(ngram=2)
def wakeUp(self):
try:
self.markov.load(u'mave_%s.json' % self.name)
except Exception as e:
print 'markov load failure'
print e
self.markov = Markov(ngram=2)
def goToBed(self):
self.markov.save(u'mave_%s.json' % self.name)
def listenTo(self, message, talker):
tokens = self.tokenizer.tokenize(message.decode('utf-8'))
for tok in tokens:
print '%10s (%10s) ... %s' % (tok.surface, tok.reading, tok.part_of_speech)
self.markov.learn(tokens)
meishi_list = [tok.surface for tok in tokens
if u'名詞' in tok.part_of_speech.split(',') and
((u'一般' in tok.part_of_speech.split(',') and not u'あ' <= tok.surface[0] <= u'ん')
or u'固有名詞' in tok.part_of_speech.split(','))]
key = random.choice(meishi_list) if len(meishi_list) != 0 else None
rsp = self.markov.generate(key)
if rsp != None:
self.msg_que.put(rsp)
else:
self.msg_que.put('はいはい > %s' % talker)
def speak(self):
if self.msg_que.empty():
return None
return self.msg_que.get()