聊天机器人
1018 | 智能聊天机器人!期待在语境上做一些突破,为聊天机器人添加:情绪、个性!
1019 | ToDo List
1020 |
1021 | - 记录对话,随机回答(完成)
1022 | - 根据对话,固定回答(完成)
1023 | -
1024 |
学习对话,反问学习(进行中)
1025 | 
1026 | a. 设定新建问题相似度阈值sim_new,若相似度大于sim_new,不创建新问题;反之创建新问题,并要求设定问题类型。
1027 | b. 设定匹配旧问题答案相似度阈值sim_old,若相似度大于sim_old,将匹配到的问题答案关联到新问题上;否则不关联答案。
1028 | c. 给出答案。若答案为模糊答案或者默认答案,要求新增1或n个答案,关联答案到问题;若答案为匹配答案,要求打分,可以新增1或n个答案,关联答案到问题。
1029 | d. 存储问答库
1030 |
1031 | -
1032 |
语料库添加方式优化,支持自动id编号,自动对应
1033 |
1034 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 聊天机器人
2 | 智能聊天机器人!期待在语境上做一些突破,为聊天机器人添加:情绪、个性!
3 |
4 | ## ToDo List
5 | 1. 记录对话,随机回答(完成)
6 | 2. 根据对话,固定回答(完成)
7 | 3. 学习对话,反问学习(完成)
8 | 
9 | a. 设定新建问题相似度阈值sim_new,若相似度大于sim_new,不创建新问题;反之创建新问题,并要求设定问题类型。
10 |
11 | b. 设定匹配旧问题答案相似度阈值sim_old,若相似度大于sim_old,将匹配到的问题答案关联到新问题上;否则不关联答案。
12 |
13 | c. 给出答案。若答案为模糊答案或者默认答案,要求新增1或n个答案,关联答案到问题;若答案为匹配答案,要求打分,可以新增1或n个答案,关联答案到问题。
14 |
15 | d. 存储问答库
16 |
17 | 4. 语料库添加方式优化,支持自动id编号,自动对应(进行中)
--------------------------------------------------------------------------------
/WordSegment/__pycache__/utils.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litterzhang/chatbox/3686f41c9dff623bc51f9d660d8d406ea587f124/WordSegment/__pycache__/utils.cpython-35.pyc
--------------------------------------------------------------------------------
/WordSegment/dict/dict_test.txt:
--------------------------------------------------------------------------------
1 | 计算语言学
2 | 课程
3 | 意思
--------------------------------------------------------------------------------
/WordSegment/segs/__pycache__/bmseg.cpython-35.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/litterzhang/chatbox/3686f41c9dff623bc51f9d660d8d406ea587f124/WordSegment/segs/__pycache__/bmseg.cpython-35.pyc
--------------------------------------------------------------------------------
/WordSegment/segs/bmseg.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | '双向最大匹配算法'
4 |
5 | __author__='litterzhang'
6 |
7 | import os
8 | import re
9 |
10 | import sys
11 | sys.path.append(os.path.join(os.path.dirname(__file__), os.path.pardir))
12 |
13 | from utils import load_dict
14 | from functools import reduce
15 |
16 | # 分词标准流程
17 | def seg(sen_str, dict_load=None, word_max=5):
18 | # 加载词典
19 | if not dict_load:
20 | dict_path = os.path.join(os.path.dirname(__file__), '../dict/dict_small.txt')
21 | dict_load = load_dict(dict_path)
22 |
23 | # 处理标点符号,根据标点符号,将句子分割为多个子句
24 | punc = ' ~!@#$%^&*()_+-=[]{}|\\\'\";:?/.>,<~!@#¥%……&()|【】、‘“”’:;?。》《,'
25 | r = re.compile(r'[\s{}]+'.format(re.escape(punc)))
26 | sen_sub_strs = r.split(sen_str)
27 |
28 | # 词袋
29 | words = list()
30 | sen_proc_len = 0
31 |
32 | # 对每个子句分词
33 | for sen_sub_str in sen_sub_strs:
34 | words_mm = mmseg(sen_sub_str, dict_load=dict_load, word_max=word_max)
35 | words_rmm = rmmseg(sen_sub_str, dict_load=dict_load, word_max=word_max)
36 |
37 | if len(words_mm)>len(words_rmm):
38 | words.extend(words_rmm[::-1])
39 | elif len(words_rmm)>len(words_mm):
40 | words.extend(words_mm)
41 | else:
42 | dis_mm = len(list(filter(lambda x: x[2]=='wz', words_mm)))
43 | dis_rmm = len(list(filter(lambda x: x[2]=='wz', words_rmm)))
44 |
45 | if dis_mm > dis_rmm:
46 | words.extend(words_rmm[::-1])
47 | elif dis_rmm > dis_mm:
48 | words.extend(words_mm)
49 | else:
50 | cnt_mm = reduce(lambda x, y: len(y[2])**2+x, words_mm, 0)
51 | cnt_rmm = reduce(lambda x, y: len(y[2])**2+x, words_rmm, 0)
52 |
53 | if cnt_mm > cnt_rmm:
54 | words.extend(words_mm)
55 | else:
56 | words.extend(words_rmm[::-1])
57 |
58 | # 将标点加入分词结果
59 | sen_proc_len += len(sen_sub_str)
60 | while sen_proc_len