核心技术与算法学习笔记:词性标注与命名实体识别(日期识别) 您所在的位置:网站首页 笔记词性 核心技术与算法学习笔记:词性标注与命名实体识别(日期识别)

核心技术与算法学习笔记:词性标注与命名实体识别(日期识别)

2024-01-05 10:30| 来源: 网络整理| 查看: 265

结构化数据,可以在数据入库时予以类型约束,在需要时能够通过解析还原读取到对应的日期 非结构化数据日期多与文本结合,日期识别与具体要求有关

背景: 现有一个基于语音问答的酒店预订系统,其根据用户的每句语音进行解析, 识别出用户的酒店预订需求,如房间型号、入住时间等; 用户的语音在发送给后台进行请求时已经转换成中文文本, 然而由于语音转换工具的识别问题,许多日期类的数据并不是严格的数字, 会出现诸如"六月 12" “2016 年八月” “20160812” “后天下午” 等形式。 这里不关注问答系统的具体过程,主要目的是识别出每个请求文本中可能的日期信息,并将其转换成统一的格式进行输出。

主要通过正则表达式和Jieba 分词

import re from datetime import datetime,timedelta from dateutil.parser import parse import jieba.posseg as psg # 通过Jieba分词将带有时间信息的词进行切分,然后记录连续时间信息的词 # time extract:对句子进行解析,提取其中所有能表示 日期时间的词,并进行上下文拼接 def time_extract(text): time_res = [] word = '' keydate = {'今天':0, '明天':1, '后天':2} for k,v in psg.cut(text): if k in keydate: if word != '': time_res.append(word) word = (datetime.today() + timedelta(days=keydate.get(k,0))).strftime('%Y年%m月%d日') elif word != '': if v in ['m', 't']: word = word + k else: time_res.append(word) word = '' elif v in ['m', 't']: word = k if word != '': time_res.append(word) result = list(filter(lambda x:x is not None, [check_time_valid(w) for w in time_res])) final_res = [parse_datetime(w) for w in result] return [x for x in final_res if x is not None] # time extract中有个 check time valid 函数,用来对提取的拼接日期串进行进一步处理,以进行有效性判断的。 def check_time_valid(word): m = re.match('\d+$',word) if m: if len(word)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有