Ejemplo n.º 1
0
    def collect_data(self):
        if self.word_domain is not None and self.flag is not None:
            if self.flag == 'hospital_init':
                for data in self.word_domain:
                    if data['domain'] == '醫院':
                        # self.template['醫院'] = data['word']
                        self.template['醫院拼音'] = pinyin.to_pinyin(data['word'])
                    if data['domain'] == '醫院問題':
                        self.template['醫院問題'] = data['word']
            elif self.flag == 'hospital_ques_get':
                for data in self.word_domain:
                    if data['domain'] == '醫院問題':
                        self.template['醫院問題'] = data['word']
            elif self.flag == 'hospital_phone':
                for data in self.word_domain:
                    if data['domain'] == '是':
                        self.template['打電話'] = data['word']
                    elif data['domain'] == '非':
                        self.template['不打電話'] = data['word']
            elif self.flag == 'hospital_address':
                for data in self.word_domain:
                    if data['domain'] == '是':
                        self.template['導航地址'] = data['word']
                    elif data['domain'] == '非':
                        self.template['不導航地址'] = data['word']

        with open(os.path.join(BASE_DIR,
                               'domain_chatbot/template/hospital.json'),
                  'w',
                  encoding='UTF-8') as output:
            json.dump(self.template, output, indent=4, ensure_ascii=False)
Ejemplo n.º 2
0
    def find_wow_location(self):
        db = client['aiboxdb']
        wow_location_collect = db['wow_location']
        wow_location_cur = wow_location_collect.find({}, {'_id': False})

        magic_location = [
            '老人共餐', '友善餐廳', '長照中心', '餐廳', '旅館', '運動中心', '銀髮友好站', '美術館', '樂齡中心'
        ]

        # 查詢特定地點
        # e.g. 查詢米蘭意廚
        if self.template['區域'] == 'c':
            for cur in wow_location_cur:
                if pinyin.to_pinyin(cur['name']) == pinyin.to_pinyin(
                        self.template['魔術地點']):
                    temp_wow_location_info_collect = db[
                        'temp_wow_location_info']
                    temp_wow_location_info_collect.insert_one(cur)

        # 查詢某地區的魔術地點
        # e.g. 查詢台北市的運動中心
        elif self.template['魔術地點'] in magic_location:
            wow_data = []
            for cur in wow_location_cur:
                if pinyin.to_pinyin(cur['type']) == pinyin.to_pinyin(
                        self.template['魔術地點']) and pinyin.to_pinyin(
                            cur['addr'][:3]) == pinyin.to_pinyin(
                                self.template['區域']):
                    wow_data.append(cur)

            temp_wow_location_info_collect = db['temp_wow_location_info']
            for data in wow_data:
                temp_wow_location_info_collect.insert_one(data)
Ejemplo n.º 3
0
    def response(self):
        content = {}

        if self.template['區域'] == '':
            content['flag'] = 'wow_region'
            content['response'] = self.template['區域回覆']
            self.store_conversation(content['response'])
        else:
            if self.template['打電話'] == 'o':
                # 去wow_location開放資料找到電話存進temp_wow_phone
                db = client['aiboxdb']
                wow_location_collect = db['wow_location']
                wow_location_cur = wow_location_collect.find()
                for cur in wow_location_cur:
                    if pinyin.to_pinyin(cur['name']) == pinyin.to_pinyin(
                            self.template['魔術地點']):
                        # 把電話號碼存進temp_wow_phone
                        temp_wow_phone_collect = db['temp_wow_phone']
                        temp_wow_phone_doc = temp_wow_phone_collect.find_one_and_update(
                            {'_id': 0}, {'$set': {
                                'phone': cur['phone']
                            }},
                            upsert=False)

                content['flag'] = 'wow_phone'
                content['response'] = self.template['打電話回覆']
                self.clean_template()
                self.store_conversation(content['response'])
            else:
                content['flag'] = 'wow_done'
                content['response'] = self.template['完成回覆']
                self.find_wow_location()
                self.store_database()
                self.clean_template()
                self.store_conversation(content['response'])

        return json.dumps(content, ensure_ascii=False)
Ejemplo n.º 4
0
    def collect_data(self):
        if self.word_domain is not None and self.flag is not None:
            if self.flag == 'emergency_init':
                for data in self.word_domain:
                    if data['domain'] == '緊急聯絡人':
                        self.template['緊急聯絡人拼音'] = pinyin.to_pinyin(
                            data['word'])
            elif self.flag == 'emergency_phone':
                for data in self.word_domain:
                    if data['domain'] == '是':
                        self.template['打電話'] = "true"
                    elif data['domain'] == '非':
                        self.template['打電話'] = "false"

        with open(os.path.join(BASE_DIR,
                               'domain_chatbot/template/emergency.json'),
                  'w',
                  encoding='UTF-8') as output:
            json.dump(self.template, output, indent=4, ensure_ascii=False)
Ejemplo n.º 5
0
def set_ECP():
    '''設定使用者的緊急聯絡人
    Params:
        ec_person: 緊急聯絡人的名字
        ec_phone: 緊急聯絡人的電話
    Returns:
        {
            'status': '200'->成功; '404'->失敗
            'result': 設置是否成功
            'msg': 訊息
        }
    '''

    ec_person = request.json['ec_person']
    ec_phone = request.json['ec_phone']

    if (session.get('user_nickname') is not None):
        user_nickname = session.get('user_nickname')
        collect = db['users']
    else:
        resp = {'status': '404', 'result': '未登入', 'msg': '設置緊急聯絡人錯誤'}
        return jsonify(resp)

    contact_info = {
        'person': ec_person,
        'person_pinyin': pinyin.to_pinyin(ec_person),
        'phone': ec_phone,
        'date': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    }

    try:
        # 加進mydict
        with open(os.path.join(BASE_DIR,
                               'domain_matcher/jieba_dict/mydict.txt'),
                  'r',
                  encoding='UTF-8') as f:
            lines = f.readlines()
        with open(os.path.join(BASE_DIR,
                               'domain_matcher/jieba_dict/mydict.txt'),
                  'w',
                  encoding='UTF-8') as f:
            for l in lines:
                l = l.strip()
                if l == '\n' or len(l) == 0 or l == '':
                    continue
                f.write(l)
                f.write('\n')
            f.write(ec_person + " 999999 N")
        jieba_tw.set_dictionary(
            os.path.join(BASE_DIR, 'domain_matcher/jieba_dict/mydict.txt'))

        # 加進domain
        with open(os.path.join(BASE_DIR,
                               'domain_matcher/custom/ec_person.json'),
                  'r',
                  encoding='UTF-8') as f:
            ec_file = json.load(f)
            ec_file['concepts'].append(ec_person)
            ec_file['pinyin_concepts'].append(pinyin.to_pinyin(ec_person))

            with open(os.path.join(BASE_DIR,
                                   'domain_matcher/custom/ec_person.json'),
                      'w',
                      encoding='UTF-8') as output:
                output.write(json.dumps(ec_file, ensure_ascii=False))

        # 存進db
        collect.find_one_and_update(
            {'nickname': user_nickname},
            {'$push': {
                'emergency_contact': contact_info
            }},
            upsert=False)

        resp = {'status': '200', 'result': '設置緊急聯絡人成功', 'msg': ''}
        return jsonify(resp)
    except:
        traceback.print_exc()
        resp = {'status': '404', 'result': '設置緊急聯絡人錯誤', 'msg': '新增至資料庫錯誤'}
        return jsonify(resp)