def find_answer(text1): simer = SimTokenVec() client = Mongo().connectDB() col = client["questions_data"] max_similarity=0 max_id="" for question in col.find(): similarity = simer.distance(text1,question["question"]) if similarity > max_similarity: max_similarity=similarity max_id=question["_id"] #print(similarity) question = col.find_one({"_id":max_id}) print(question)
def test(): simer = SimHaming() text1 = "中国的人口是多少" client = Mongo().connectDB() col = client["questions_data"] max_similarity = 0 max_id = "" for question in col.find(): similarity = simer.distance(text1, question["question"]) if similarity > max_similarity: max_similarity = similarity max_id = question["_id"] print(similarity) question = col.find_one({"_id": max_id}) print(question)
def __init__(self): cur = '/'.join(os.path.abspath(__file__).split('/')[:-1]) self.datapath = os.path.join(cur, 'dataset/military_weapon.json') self.conn = Mongo().connectDB() self.collection = self.conn['weapon_data'] self.unit_dict = { '海里': [1852, '米'], '英里': [1610, '米'], '/节': [1852, '米'], 'km/节': [1000, '米'], '吨': [1000, '千克'], '-吨': [1000, '千克'], '公里': [1000, '米'], '公里/节': [1000, '米'], '公里/小时': [1000, '米'], '海里节': [1852, '米'], '海里,节': [1852, '米'], '海里/节': [1852, '米'], '海哩/节': [1852, '米'], '海浬/节': [1852, '米'], '毫米': [0.001, '米'], '节': [1852, '米'], '节/海里': [1852, '米'], '节海里': [1852, '米'], '节行驶英里': [1852, '米'], '节下海里': [1852, '米'], '克': [0.001, '千克'], '里': [1852, '米'], '里/节': [1852, '米'], '米': [1, '米'], '千克': [1, '克'], '千米': [1000, '米'], '千米/节': [1000, '米'], '千米/时': [1000, '米'], '千米/小时': [1000, '米'], '千米每小时': [1000, '米'], '万海里/节': [18520000, '米'], '英里,节': [1610, '米'], '英里/节': [1610, '米'], '余英里': [1610, '米'], '约海里': [1852, '米'], '最大海里': [1852, '米'], '人': [1, '人'], '位': [1, '位'] } return
import json from mongodb_models import Mongo with open("dataset/MilitaryCorpus.json", "r") as f: data = json.load(f) client = Mongo().connectDB() col = client["questions_data"] for news in data: questions = news["questions"] for question in questions: col.insert_one(question) print(question)
def __init__(self): cur = '/'.join(os.path.abspath(__file__).split('/')[:-1]) self.datapath = os.path.join(cur, 'dataset/military_weapon.json') self.conn = Mongo().connectDB() db_name = 'military_qa' col_name = 'data' self.col = self.conn[db_name][col_name] self.attributes ={'同型': ['同型'], '机高': ['机高'], '战斗全重': ['战斗全重'], '水下排水量': ['水下排水量'], '处理器': ['处理器'], '主炮': ['主炮'], '制导系统': ['制导系统'], '全重': ['全重'], '纬度': ['纬度'], '炮口初速': ['炮口初速'], '发射性能': ['发射性能'], '兵装': ['兵装'], '型号': ['型号'], '长度': ['长度', '全长', '多长'], '翼展': ['翼展', '翼长'], '全枪长': ['全枪长', '枪长'], '射程': ['射程'], '前型': ['前型'], '发射地点': ['发射地点', '发射地点'], '首飞时间': ['首飞时间', '首飞', '初次飞行', '首次飞行'], '发动机数量': ['发动机数量', '几个发动机', '多少个发动机', '发动机个数', '发动机数目', '发动机个','发动机数'], '乘员': ['乘员'], '战斗射速': ['战斗射速'], '生产单位': ['生产单位', '产商', '制造商', '厂家', '制造机构'], '最大行程': ['最大行程', '最常距离'], '炮管长度': ['炮管长度', '炮管长', '炮管全长'], '气动布局': ['气动布局'], '武备': ['武备'], '武器装备': ['武器装备'], '引信': ['引信'], '参战情况': ['参战情况'], '动力装置': ['动力装置'], '飞行速度': ['飞行速度'], '服役时间': ['服役时间'], '新造时': ['新造时'], '活动范围': ['活动范围'], '弹匣容弹量': ['弹匣容弹量'], '编制': ['编制'], '高度': ['高度'], '制造厂': ['制造厂'], '口径': ['口径'], '鱼雷': ['鱼雷'], '经度': ['经度'], '研发时间': ['研发时间'], '简介': ['简介'], '首次轨道发射': ['首次轨道发射'], '挂载点': ['挂载点'], '刀锋宽度': ['刀锋宽度'], '续航距离': ['续航距离'], '枪械': ['枪械'], '最大速度': ['最大速度'], '运载火箭': ['运载火箭'], '生产年限': ['生产年限'], '全枪重': ['全枪重'], '空重': ['空重'], '水雷': ['水雷'], '枪炮': ['枪炮'], '水上排水量': ['水上排水量', '排水量'], '诞生时间': ['诞生时间'], '内置武器': ['内置武器'], '机长': ['机长'], '中心直径': ['中心直径', '直径'], '装药类型': ['装药类型'], '最大起飞重量': ['最大起飞重量', '起飞重量'], '有效射程': ['有效射程'], '现状': ['现状'], '研制时间': ['研制时间'], '舰舰导弹': ['舰舰导弹'], '下水时间': ['下水时间', '下水'], '机炮': ['机炮'], '弹长': ['弹长'], '退役时间': ['退役时间', '退役'], '最大射程': ['最大射程'], '改装时': ['改装时'], '刀重': ['刀重'], '自持力': ['自持力'], '产国': ['产国'], '航速': ['航速'], '制造商': ['制造商'], '型宽': ['型宽'], '弹重': ['弹重'], '刀长': ['刀长'], '舰长': ['舰长'], '研发厂商': ['研发厂商'], '旋翼直径': ['旋翼直径'], '导弹': ['导弹'], '满排吨位': ['满排吨位'], '底盘类型': ['底盘类型'], '刀锋长度': ['刀锋长度'], '弹径': ['弹径'], '全长': ['全长'], '竣工时': ['竣工时'], '发射日期': ['发射日期'], '宽度': ['宽度'], '总重': ['总重'], '建造时间': ['建造时间'], '射控装置': ['射控装置'], '图片': ['图片'], '轨道': ['轨道'], '改装前': ['改装前'], '发动机': ['发动机'], '最大航程': ['最大航程'], '研发单位': ['研发单位'], '大类': ['大类'], '关注度': ['关注度'], '最大飞行速度': ['最大飞行速度'], '火炮': ['火炮'], '战地机型': ['战地机型'], '防空兵器': ['防空兵器'], '潜航深度': ['潜航深度'], '轨道卫星': ['轨道卫星'], '尾翼装置': ['尾翼装置'], '乘员与载员': ['乘员与载员'], '名称': ['名称'], '引信装置': ['引信装置'], '次型': ['次型'], '车长': ['车长'], '武装': ['武装'],"航长":['航长'], '反舰导弹': ['反舰导弹'], '满载排水量': ['满载排水量'], '装备': ['装备']} self.big_cates ={'火炮': ['火炮'], '飞行器': ['飞行器'], '舰船舰艇': ['舰船舰艇'], '坦克装甲车辆': ['坦克装甲车辆'], '太空装备': ['太空装备'], '爆炸物': ['爆炸物'], '导弹武器': ['导弹武器'], '枪械与单兵': ['枪械与单兵', '枪械', '枪', '单兵']} self.second_cates = {'榴弹发射器': ['榴弹发射器'], '炸弹': ['炸弹', '炸药'], '手榴弹': ['手榴弹'], '电子战机': ['电子战机'], '机枪': ['机枪'], '宇宙飞船': ['宇宙飞船', '飞船'], '加农炮': ['加农炮'], '救护车': ['救护车'], '攻击机': ['攻击机'], '非自动步枪': ['非自动步枪', '步枪'], '火箭弹': ['火箭弹'], '地雷': ['地雷'], '高射炮': ['高射炮'], '航天飞机': ['航天飞机'], '航天机构': ['航天机构', '航天局', '航天部门'], '舰舰导弹': ['舰舰导弹'], '通用飞机': ['通用飞机'], '岸舰导弹': ['岸舰导弹', '导弹'], '舰炮': ['舰炮'], '巡洋舰': ['巡洋舰'], '气垫艇/气垫船': ['气垫艇/气垫船','气垫艇','气垫船'], '装甲指挥车': ['装甲指挥车', '装甲车', '指挥车'], '无人机': ['无人机'], '氢弹': ['氢弹'], '坦克炮': ['坦克炮'], '干线': ['干线'], '原子弹': ['原子弹'], '冲锋枪': ['冲锋枪'], '导弹艇': ['导弹艇'], '水雷战舰艇': ['水雷战舰艇'], '侦察机': ['侦察机'], '试验机': ['试验机'], '舰地(潜地)导弹': ['舰地(潜地)导弹','舰地导弹','潜地导弹', '导弹'], '支线': ['支线'], '军事卫星': ['军事卫星'], '地空导弹': ['地空导弹'], '航空炮': ['航空炮'], '战列舰': ['战列舰'], '无后坐炮': ['无后坐炮'], '空地导弹': ['空地导弹'], '加农榴弹炮': ['加农榴弹炮'], '运输机': ['运输机'], '自行火炮': ['自行火炮'], '地地导弹': ['地地导弹'], '空舰导弹': ['空舰导弹'], '教练机': ['教练机'], '其他特种装甲车辆': ['其他特种装甲车辆'], '火箭筒': ['火箭筒'], '空间探测器': ['空间探测器', '探测器'], '预警机': ['预警机'], '航空母舰': ['航空母舰', '航母'], '迷彩服': ['迷彩服'],'弹炮结合系统': ['弹炮结合系统'], '科学卫星': ['科学卫星'], '空空导弹': ['空空导弹','导弹'], '迫击炮': ['迫击炮'], '应用卫星': ['应用卫星', '卫星'], '保障辅助舰艇': ['保障辅助舰艇'], '刀具': ['刀具'], '霰弹枪': ['霰弹枪'], '自动步枪': ['自动步枪'], '手枪': ['手枪'], '反弹道导弹': ['反弹道导弹'], '两栖作战舰艇': ['两栖作战舰艇'], '特种坦克': ['特种坦克', '坦克'], '运输直升机': ['运输直升机', '直升机'], '巡逻舰/艇': ['巡逻舰/艇', '巡逻舰', '巡逻舰艇', '巡逻舰艇'], '加油机': ['加油机'], '反坦克炮': ['反坦克炮'], '越野车': ['越野车'], '步兵战车': ['步兵战车'], '战斗机': ['战斗机'], '护卫舰': ['护卫舰'], '工程抢修车': ['工程抢修车'],'反潜机': ['反潜机'], '常规潜艇': ['常规潜艇'], '装甲侦察车': ['装甲侦察车'], '舰空导弹': ['舰空导弹'], '运载火箭': ['运载火箭'], '中子弹': ['中子弹'], '飞艇': ['飞艇'], '航天基地': ['航天基地'], '鱼雷': ['鱼雷'], '轰炸机': ['轰炸机'], '技术试验卫星': ['技术试验卫星', '卫星'], '狙击枪': ['狙击枪'], '水雷': ['水雷'], '装甲车载炮': ['装甲车载炮'], '榴弹炮': ['榴弹炮'], '驱逐舰': ['驱逐舰'], '装甲运兵车': ['装甲运兵车'], '火箭炮': ['火箭炮'], '多用途直升机': ['多用途直升机', '直升机'], '核潜艇': ['核潜艇'], '武装直升机': ['武装直升机', '直升机'], '布/扫雷车': ['布/扫雷车', '扫雷车', '扫雷车'], '潜舰导弹': ['潜舰导弹', '导弹'], '主战坦克': ['主战坦克', '坦克']} self.weapons = self.load_weapons() self.weapon_dict = {i:i for i in self.weapons} self.countries = {'荷兰': ['荷兰'], '阿根廷': ['阿根廷'], '瑞士': ['瑞士'], '伊朗': ['伊朗'], '以色列': ['以色列'], '前南斯拉夫': ['前南斯拉夫'], '越南': ['越南'], '葡萄牙': ['葡萄牙'], '乌克兰': ['乌克兰'], '新西兰': ['新西兰'], '奥地利': ['奥地利'], '希腊': ['希腊'], '塞尔维亚': ['塞尔维亚'], '比利时': ['比利时'], '俄罗斯': ['俄罗斯'], '前捷克斯洛伐克': ['前捷克斯洛伐克'], '捷克': ['捷克'], '土耳其': ['土耳其'], '缅甸': ['缅甸'], '美国': ['美国'], '德国': ['德国'], '巴西': ['巴西'], '印度尼西亚': ['印度尼西亚'], '法国': ['法国'], '瑞典': ['瑞典'], '前苏联': ['前苏联'], '朝鲜': ['朝鲜'], '埃及': ['埃及'], '墨西哥': ['墨西哥'], '巴基斯坦': ['巴基斯坦'], '马来西亚': ['马来西亚'], '澳大利亚': ['澳大利亚'], '泰国': ['泰国'], '欧盟': ['欧盟'], '波兰': ['波兰'], '韩国': ['韩国'], '日本': ['日本'], '罗马尼亚': ['罗马尼亚'], '克罗地亚': ['克罗地亚'], '智利': ['智利'], '匈牙利': ['匈牙利'], '意大利': ['意大利'], '英国': ['英国'], '丹麦': ['丹麦'], '挪威': ['挪威'], '哈萨克斯坦': ['哈萨克斯坦'], '爱尔兰': ['爱尔兰'], '伊拉克': ['伊拉克'], '中国': ['中国','中华人民共和国'], '印度': ['印度'], '保加利亚': ['保加利亚'], '斯洛伐克': ['斯洛伐克'], '西班牙': ['西班牙'], '秘鲁': ['秘鲁'], '阿联酋': ['阿联酋'], '卢森堡': ['卢森堡'], '巴拿马': ['巴拿马'], '新加坡': ['新加坡'], '波黑': ['波黑'], '南非': ['南非'], '苏/俄': ['苏/俄', '苏联', '俄罗斯'], '加拿大': ['加拿大'], '芬兰': ['芬兰']} self.compares = { '$gt': ['高于','大于','长于','高过','大过','长过','多于', '远于', '远过', '之后', '晚于', '后于'], '$lt': ['低于', '小于', '短于', '低过', '短过', '少于', '近于', '近过', '未达到', '没达到', '之前', '先于', '早于'], '$lte': ['不高于','不大于','不长于','不高过','不大过','不长过','不多于', '不远于', '不远过'], '$gte': ['不低于', '不小于', '不短于', '不低过', '不短过', '不少于', '不近于', '不近过', '达到'], '$eq': ['等于', '差不多'], '$ne': ['不等于', '不是']} self.counts = ['多少', '几', '几多'] self.mosts = { -1:['最大', '最远', '最长', '最高', '最久', '最快', '最多', '最强'], 1:['最小', '最短', '最近', '最低', '最矮', '最慢', '最少', '最弱'], } self.unit_dict = { '海里': [1852, '米'], '英里': [1610, '米'], '/节': [1852, '米'], 'km/节': [1000, '米'], '吨': [1000, '千克'], '-吨': [1000, '千克'], '公里': [1000, '米'], '公里/节': [1000, '米'], '公里/小时': [1000, '米'], '海里节': [1852, '米'], '海里,节': [1852, '米'], '海里/节': [1852, '米'], '海哩/节': [1852, '米'], '海浬/节': [1852, '米'], '毫米': [0.001, '米'], '节': [1852, '米'], '节/海里': [1852, '米'], '节海里': [1852, '米'], '节行驶英里': [1852, '米'], '节下海里': [1852, '米'], '克': [0.001, '千克'], '里': [1852, '米'], '里/节': [1852, '米'], '米': [1, '米'], '千克': [1, '克'], '千米': [1000, '米'], '千米/节': [1000, '米'], '千米/时': [1000, '米'], '千米/小时': [1000, '米'], '千米每小时': [1000, '米'], '万海里/节': [18520000, '米'], '英里,节': [1610, '米'], '英里/节': [1610, '米'], '余英里': [1610, '米'], '约海里': [1852, '米'], '最大海里': [1852, '米'], '厘米': [0.01, '米'], '分米': [0.1, '米'], '人': [1, '人'], '位': [1, '位']} unit_dict = {i:len(i) for i in self.unit_dict} unit_wds = [i[0] for i in sorted(unit_dict.items(), key = lambda asd: asd[1], reverse=True)] unit_regex = '([0-9]+.?[0-9]+)(%s)+' % '|'.join(unit_wds) time_regex = '[0-9]{4}年[0-9]{0,4}月?[0-9]{0,4}日?' self.unit_pattern = re.compile(unit_regex) self.time_pattern = re.compile(time_regex) self.country_dict = self.build_dict(self.countries) self.big_dict = self.build_dict(self.big_cates) self.small_dict = self.build_dict(self.second_cates) self.attribute_dict = self.build_dict(self.attributes) self.compare_dict = self.build_dict(self.compares) self.most_dict = self.build_dict(self.mosts) self.add_jieba(self.country_dict, 'n_country') self.add_jieba(self.big_dict, 'n_big') self.add_jieba(self.small_dict, 'n_small') self.add_jieba(self.attribute_dict, 'n_attr') self.add_jieba(self.compare_dict, 'n_compare') self.add_jieba(self.most_dict, 'n_most') self.add_jieba(self.weapons, 'n_weapon') return