def main(): markov = Markov() sep = r'[。??!! ]+' filename = sys.argv[1] dicfile = '{}.dat'.format(filename) if os.path.exists(dicfile): markov.load(dicfile) else: with open(filename, encoding='utf-8') as f: sentences = [] for line in f: sentences.extend(re.split(sep, line.strip())) for sentence in tqdm.tqdm(sentences): if sentence: markov.add_sentence(morph.analyze(sentence)) print('.', end='') sys.stdout.flush() markov.save(dicfile) print('\n') while True: line = input('> ') if not line: break parts = morph.analyze(line) keyword = next( (word for word, part in parts if morph.is_keyword(part)), '') print(markov.generate(keyword))
def dialogue(self, text): """ユーザーからの入力を受け取り、Responderに処理させた結果を返す。 呼び出されるたびにランダムでResponderを切り替える。 入力をDictionaryに学習させる。""" chance = randrange(0, 100) if chance in range(0, 29): self._responder = self._responders['pattern'] elif chance in range(30, 49): self._responder = self._responders['template'] elif chance in range(50, 69): self._responder = self._responders['random'] elif chance in range(70, 89): self._responder = self._responders['markov'] else: self._responder = self._responders['what'] # print(type(self._responder)) 封印 クラスを見るときに必要だったよ。 parts = analyze(text) # 追加 if isinstance(self._responder, TemplateResponder): response = self._responder.response(parts) elif isinstance(self._responder, MarkovResponder): response = self._responder.response(parts) else: response = self._responder.response(text) # response = self._responder.response(text, parts) #これじゃ見れなかったよ? self._dictionary.study(text, parts) # 変更 return response
def create_encoder_input(self, text): tokens = morph.analyze(text, 0) words = [] for word, part in tokens: words.append(word) input_data = np.zeros((1, len(words)), dtype='float32') for t, word in enumerate(words): input_data[0][t] = self.index[word] return input_data
def text2onehot(self, text): input_data = copy.deepcopy(self.encoder_input_data) text = text.strip() i_want_sleep = morph.analyze(text, 1) for t, w in enumerate(i_want_sleep): print(w) # t=time(文字の出た時の要素数) # one-hot表現 input_data[0, t, self.index[w[0]]] = 1. return input_data
def markov_twitter(filename): markov = Markov() sep = r'[.??!! ]+' dicfile = '{}.dat'.format(filename) if os.path.exists(dicfile): markov.load(dicfile) else: with open(filename, encoding='utf-8') as f: sentences = [] for line in f: sentences.extend(re.split(sep, line.strip())) for sentence in tqdm.tqdm(sentences): if sentence: markov.add_sentence(morph.analyze(sentence)) markov.save(dicfile) print('\n') line = '*' parts = morph.analyze(line) keyword = next((word for word, part in parts if morph.is_keyword(part)), '') return markov.generate(keyword)
def dialogue(self, text): chance = randrange(0, 100) if chance in range(0, 39): self._responder = self._responders['pattern'] elif chance in range(40, 69): self._responder = self._responders['template'] elif chance in range(70, 89): self._responder = self._responders['random'] else: self._responders = self._responders['what'] parts = morph.analyze(text) response = self._responder.response(text, parts) self._dictionary.study(text, parts) return response
def dialogue(self, text): """ユーザーからの入力を受け取り、Responderに処理させた結果を返す。 呼び出されるたびにランダムでResponderを切り替える。 入力をDictionaryに学習させる。""" chance = randrange(0, 100) if chance in range(0, 39): self._responder = self._responders['pattern'] elif chance in range(40, 69): self._responder = self._responders['template'] elif chance in range(70, 89): self._responder = self._responders['random'] else: self._responder = self._responders['what'] parts = morph.analyze(text) response = self._responder.response(text, parts) self._dictionary.study(text, parts) return response
def dialogue(self, text): """ユーザーからの入力を受け取り,Responderに処理させた結果を返す. 呼び出されるたびにランダムでResponderを切り替える.""" chance = randrange(0, 100) if chance in range(0, 29): self._responder = self._responders['pattern'] elif chance in range(30, 49): self._responder = self._responders['template'] elif chance in range(50, 69): self._rensponder = self._responders['random'] elif chance in range(70, 89): self._responder = self._responders['markov'] else: self._responder = self._responders['what'] parts = morph.analyze(text) response = self._responder.response(text, parts) self._dictionary.study(text, parts) return response
def dialogue(self, text, markov_training): """ユーザーからの入力を受け取り、Responderに処理させた結果を返す。 呼び出されるたびにランダムでResponderを切り替える。 入力をDictionaryに学習させる。""" chance = randrange(0, 100) chance = 80 if chance in range(0, 29): self._responder = self._responders['pattern'] elif chance in range(30, 49): self._responder = self._responders['template'] elif chance in range(50, 69): self._responder = self._responders['random'] elif (chance in range(70, 89)) or (markov_training==1): self._responder = self._responders['markov'] else: self._responder = self._responders['what'] parts = analyze(text) response = self._responder.response(text, parts) self._dictionary.study(text, parts) return response
def study(self, text, parts): """ランダム辞書、パターン辞書をメモリに保存する。""" self.study_random(text) self.study_pattern(text, morph.analyze(text)) self.study_template(parts)