"""
该模块功能:获取用户的输入文本,通过输入文本和数据库中的关键主题文本相比较,
获取最佳的回答内容
"""
import xlrd
import jieba
import nltk # 读取excel表格内的数据
def read_excel(filepath):
# 定义一个字典,动态建立一个字典
map_dict = {}
data = xlrd.open_workbook(filepath)
table = data.sheets()[0]
# 获取表格行数和列数
nrows = table.nrows
ncols = table.ncols
# 获取表格第1列的内容,内容是一个list
s = table.col_values(1)[1:]
# 获取长度
length = len(s)
# 迭代每一个元素进行处理
for each in range(length):
each_string = s[each]
# 分离出title和对应的解释
word_key, word_value = each_string.split(':')
# 把数据放入一个字典中,以键值对的形式存在
map_dict[word_key] = word_value print(map_dict)
return map_dict
# 已经将数据放入到字典里,接下来是使用数据了
# 通过语音输入一个关键字,这个关键字对应字典的键,采用什么样的模型实现这两个的映射,找到对应的键值就可以找到需要的答案,这就是思路 # 假设已经获得了一个输入字符
# input_string = "货币型基金"
# 获取字典的键
# title_key = list(map_dict.keys())
# print(title_key) # 中间环节,实现input_string和title_key 的映射,相似度匹配 # 最后,根据键获取值
# content_value = map_dict.get(input_string)
# print(content_value) # 统计key中各个词频
def solve_word(word_key):
seg_list = [] for each in word_key:
temp_string = list(jieba.cut(each))
seg_list.extend(temp_string)
print(len(seg_list))
# 得到结果列表
seg_list = set(seg_list)
print(seg_list) # 计算两句话的相似程度模板
#   句子A:我喜欢看电视,不喜欢看电影。
#   句子B:我不喜欢看电视,也不喜欢看电影。
def calc_sentence_similarity(sentence_A, sentence_B):
# sentence_A = "我喜欢看电视,不喜欢看电影"
# sentence_B = "我不喜欢看电视,计算两句话的相似程度模板" # 第一步,分词
segment_A = list(jieba.cut(sentence_A))
segment_B = list(jieba.cut(sentence_B))
# print(segment_A)
# print(segment_B) # 第二步,列出所有的词
all_words = set(segment_A + segment_B)
# print(all_words) # 第三步,统计词频。放到字典里面,遍历all_words,看句子A和句子B都是各有多少
#   句子A:我 1,喜欢 2,看 2,电视 1,电影 1,不 1,也 0。
#   句子B:我 1,喜欢 2,看 2,电视 1,电影 1,不 2,也 1。
frequency_dict_A = {}
frequency_dict_B = {}
if all_words is not None:
for t in all_words:
frequency_dict_A[t] = segment_A.count(t)
frequency_dict_B[t] = segment_B.count(t)
# print(frequency_dict_A)
# print(frequency_dict_B) # 第四步,写出词频向量
word_frequency_vector_A = list(frequency_dict_A.values())
word_frequency_vector_B = list(frequency_dict_B.values())
# print(word_frequency_vector_A)
# print(word_frequency_vector_B) # 第五步,计算两个向量的相似度,夹角的余弦
return cos_vector(word_frequency_vector_A, word_frequency_vector_B) def cos_vector(x, y):
if(len(x) != len(y)):
print('输入错误,两个向量不在一个向量空间')
return
result1 = 0.0
result2 = 0.0
result3 = 0.0
for i in range(len(x)):
result1 += x[i]*y[i] #sum(X*Y)
result2 += x[i]**2 #sum(X*X)
result3 += y[i]**2 #sum(Y*Y)
# print("两个向量的夹角的余弦值:"+str(result1/((result2*result3)**0.5))) #结果显示
return result1/((result2*result3)**0.5) # 问句匹配,找出问题的结果
def find_result(input_string, word_dict):
# 获取用户的输入,将其和数据库中的每一个数据进行对比,计算相似度
# input_string = "票汇汇款"
temp_dict = {}
for temp_string in word_dict.keys():
# 计算相似度,key:要查找的字符串;value:相似度的值。max(d.items(),key=lambda x:x[1])[0]
temp_dict[temp_string] = calc_sentence_similarity(input_string, temp_string) max_value_key = max(temp_dict, key=temp_dict.get)
# 得到对应的文本
text_result = word_dict.get(max_value_key)
print(max_value_key)
print(text_result) # 调用主程序
def read_get_answer(file_path, input_string):
# 数据源, file_path = "./data/word_instruction.xls"
# 获取用户文本, input_string = "我想知道什么是止付卡"
# 读入数据,返回字典
word_dict = read_excel(file_path)
# 计算相似度
find_result(input_string, word_dict) if __name__ == '__main__':
# 数据源
file_path = "./data/word_instruction.xls"
# 获取用户文本
input_string = "我想知道什么是止付卡"
# 读入数据,返回字典
word_dict = read_excel(file_path)
# 计算相似度
find_result(input_string, word_dict)
"""
该模块功能:获取用户的输入文本,通过输入文本和数据库中的关键主题文本相比较,
获取最佳的回答内容
"""
import xlrd
import jieba
import nltk # 读取excel表格内的数据
def read_excel(filepath):
# 定义一个字典,动态建立一个字典
map_dict = {}
data = xlrd.open_workbook(filepath)
table = data.sheets()[]
# 获取表格行数和列数
nrows = table.nrows
ncols = table.ncols
# 获取表格第1列的内容,内容是一个list
s = table.col_values()[:]
# 获取长度
length = len(s)
# 迭代每一个元素进行处理
for each in range(length):
each_string = s[each]
# 分离出title和对应的解释
word_key, word_value = each_string.split(':')
# 把数据放入一个字典中,以键值对的形式存在
map_dict[word_key] = word_value print(map_dict)
return map_dict
# 已经将数据放入到字典里,接下来是使用数据了
# 通过语音输入一个关键字,这个关键字对应字典的键,采用什么样的模型实现这两个的映射,找到对应的键值就可以找到需要的答案,这就是思路 # 假设已经获得了一个输入字符
# input_string = "货币型基金"
# 获取字典的键
# title_key = list(map_dict.keys())
# print(title_key) # 中间环节,实现input_string和title_key 的映射,相似度匹配 # 最后,根据键获取值
# content_value = map_dict.get(input_string)
# print(content_value) # 统计key中各个词频
def solve_word(word_key):
seg_list = [] for each in word_key:
temp_string = list(jieba.cut(each))
seg_list.extend(temp_string)
print(len(seg_list))
# 得到结果列表
seg_list = set(seg_list)
print(seg_list) # 计算两句话的相似程度模板
#   句子A:我喜欢看电视,不喜欢看电影。
#   句子B:我不喜欢看电视,也不喜欢看电影。
def calc_sentence_similarity(sentence_A, sentence_B):
# sentence_A = "我喜欢看电视,不喜欢看电影"
# sentence_B = "我不喜欢看电视,计算两句话的相似程度模板" # 第一步,分词
segment_A = list(jieba.cut(sentence_A))
segment_B = list(jieba.cut(sentence_B))
# print(segment_A)
# print(segment_B) # 第二步,列出所有的词
all_words = set(segment_A + segment_B)
# print(all_words) # 第三步,统计词频。放到字典里面,遍历all_words,看句子A和句子B都是各有多少
#   句子A:我 1,喜欢 2,看 2,电视 1,电影 1,不 1,也 0。
#   句子B:我 1,喜欢 2,看 2,电视 1,电影 1,不 2,也 1。
frequency_dict_A = {}
frequency_dict_B = {}
if all_words is not None:
for t in all_words:
frequency_dict_A[t] = segment_A.count(t)
frequency_dict_B[t] = segment_B.count(t)
# print(frequency_dict_A)
# print(frequency_dict_B) # 第四步,写出词频向量
word_frequency_vector_A = list(frequency_dict_A.values())
word_frequency_vector_B = list(frequency_dict_B.values())
# print(word_frequency_vector_A)
# print(word_frequency_vector_B) # 第五步,计算两个向量的相似度,夹角的余弦
return cos_vector(word_frequency_vector_A, word_frequency_vector_B) def cos_vector(x, y):
if(len(x) != len(y)):
print('输入错误,两个向量不在一个向量空间')
return
result1 = 0.0
result2 = 0.0
result3 = 0.0
for i in range(len(x)):
result1 += x[i]*y[i] #sum(X*Y)
result2 += x[i]**2 #sum(X*X)
result3 += y[i]**2 #sum(Y*Y)
# print("两个向量的夹角的余弦值:"+str(result1/((result2*result3)**0.5))) #结果显示
return result1/((result2*result3)**0.5) # 问句匹配,找出问题的结果
def find_result(input_string, word_dict):
# 获取用户的输入,将其和数据库中的每一个数据进行对比,计算相似度
# input_string = "票汇汇款"
temp_dict = {}
for temp_string in word_dict.keys():
# 计算相似度,key:要查找的字符串;value:相似度的值。max(d.items(),key=lambda x:x[1])[0]
temp_dict[temp_string] = calc_sentence_similarity(input_string, temp_string) max_value_key = max(temp_dict, key=temp_dict.get)
# 得到对应的文本
text_result = word_dict.get(max_value_key)
print(max_value_key)
print(text_result) # 调用主程序
def read_get_answer(file_path, input_string):
# 数据源, file_path = "./data/word_instruction.xls"
# 获取用户文本, input_string = "我想知道什么是止付卡"
# 读入数据,返回字典
word_dict = read_excel(file_path)
# 计算相似度
find_result(input_string, word_dict) if __name__ == '__main__':
# 数据源
file_path = "./data/word_instruction.xls"
# 获取用户文本
input_string = "我想知道什么是止付卡"
# 读入数据,返回字典
word_dict = read_excel(file_path)
# 计算相似度
find_result(input_string, word_dict)

python问答模块的更多相关文章

  1. Python MySQLdb模块连接操作mysql数据库实例_python

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  2. Python标准模块--threading

    1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

  3. Python的模块引用和查找路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

  4. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

  5. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  6. python基础-模块

    一.模块介绍                                                                                              ...

  7. python 安装模块

    python安装模块的方法很多,在此仅介绍一种,不需要安装其他附带的pip等,python安装完之后,配置环境变量,我由于中英文分号原因,环境变量始终没能配置成功汗. 1:下载模块的压缩文件解压到任意 ...

  8. python Queue模块

    先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...

  9. python logging模块可能会令人困惑的地方

    python logging模块主要是python提供的通用日志系统,使用的方法其实挺简单的,这块就不多介绍.下面主要会讲到在使用python logging模块的时候,涉及到多个python文件的调 ...

随机推荐

  1. (转)YUV420存储格式

    YUV格式有两大类:planar和packed.对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V.对于packed的YUV格式,每个像素点的Y,U ...

  2. mysql 从sql存储文件恢复数据库乱码

    场景一: 一台电脑上导出的sql文件到另一台电脑上恢复数据库,汉字全部是乱码,然后可能还有部分数据提示超长. 场景二: 拿到的sql文件不是原始的导出sql文件,只有表结构和表数据,出现的问题和场景一 ...

  3. MySQL索引覆盖

    什么是“索引覆盖”? 简单来的说,就是让查询的字段(包括where子句中的字段),都是索引字段.索引覆盖的好处是什么?好处是极大的.极大的.极大的提高查询的效率!重要的说三遍! 特别说明: 1.whe ...

  4. 【python】多进程多线程

    import threading import multiprocessing class MultiThread(threading.Thread): def __init__(self,func, ...

  5. python2.7中关于编码,json格式的中文输出显示

    当我们用requests请求一个返回json的接口时候, 语法是 result=requests.post(url,data).content print type(result),result 得到 ...

  6. Effective C++ Item 19 Treat class design as type design

    Too high class topic for me now ................... ................... ................... fill the ...

  7. EF的代码优先设计

    CodeFirst 用中文说是代码优先,此技术可以让我们先写代码,然后由Entity Framework根据我们的代码建立数据库 接下来用学生这个例子来演示,有学生表,课程表,和成绩表三张表 首先是M ...

  8. ios iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) 转自容芳志大神的博客:http://www.cnblogs.com/stoic/archive/2013/02/27/2940 ...

  9. android素材资源

    这里先给大家 推荐两个 找图标的 搜索引擎    http://findicons.com/ 这个我也在用 大家也可以试试 找个图标还是很easy的.   http://www.iconfinder. ...

  10. 浅谈ITIL

    本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infra ...