用HanLP进行时间的提取

前台用户输入一句话,假设用户输入的可能有时间、日期、高血压、低血压。但是这些顺序是打乱的,而且时间可能是重复的。我们需要的数据:用户的时间、日期、低血压值、高血压值

  1. 有2个问题:
    时间问题:用户输入的时间是打乱的并且是重复的而且很可能是不完整的
    血压问题:不能确定会出现关键词例如“血压”、“高”,“低”等词

  2. 举例:时间和日期不是是连在一起的,时间和血压数据混合,而且顺序不一样
    2021年测试高血压是138,时间是2点45,低血压是44
    昨天测试血压是178/89在19点56

  3. 我的想法:将这句话中所有的日期信息提取出来,剩下的数字就是血压的信息了。

  4. 我目前是做了hanlp的单纯的分词和打印词性:
    粗分结果[ /w, 2005/m, 年/qt, 10月/t, 12/m, 日/b, 9/m, :/w, 00/m]。结果并不理想。我们无法获取到日期和时间信息的nt的标注结果

  5. 初次接触nlp,希望个位大佬指导。是要用到什么技术才能实现我说的,是训练模型还是?或者hanlp达不到我说,大佬们还有没有其他的方法

你这个叫Slot-filling

2 Likes

只谈时间词的话,为何不用2.x?比1.x好太多了:https://hanlp.hankcs.com/?sentence=2005年10月12日9%3A00

2 Likes

我看了一下,这个要涉及到RNN之类的,我们现在需要比较急的出结果,我没了解过这方面的,时间来不及了。不过后面需要优化,可以具体的说一下吗?谢谢

大神,目前我们需要处理大量数据,框架用的是kafka+sparkstreaming,我看有些分析帖子说2.x的稳定性不如1.x好。因为我们是用在生产环境的大量数据环境,所以需要考虑这个问题
2. 还有一些时间词【5.1 、劳动节、晚饭后】这种的识别不了,如何才能让他们识别为时间呢?我看书上有模型训练和序列标注和特征提取之类的。我需要怎么做才能达到目的呢?或者说在第几章可以学到 ,因为要的比较急。
3. 我在其他的贴子上看【 对比1.x与2.0对时间词分词结果产生的一点疑惑】好像可以将这些时间识别在一起,但是我的分词结果不行。因为我买了《自然语言处理入门》的书,这个是针对1.x版本的,才看到第2章,不知道怎么做才可以达到这个帖子上的效果?
4. 将所有的时间截取来之后,有没有办法将他们合起来转化为标准的时间

2.x处于alpha阶段,有些版本在试验各种新模型,的确曾经不稳定过。但现在2.1-alpha已经比较稳定了,论坛上有许多用户表示已经生产部署了,官网线上也跑了几个月了。下一个长假应该会整理一下,发布beta版。

你可以看命名实体识别(NER)那章,训练一个针对“2点45、5.1”这样的NER模型。但我认为“劳动节、晚饭后”用统计模型是大材小用。这些词语数量是有限的,基本没有歧义,只要出现了一定代表时间。所以你可以通过自定义词典或AC自动机(第二章)枚举出来,赋予t词性。总之,取决于不同时间词是否存在歧义,具体问题具体分析。

用2.x吧,例子:https://play.hanlp.ml/run/ner-time-dict

剩下的就是写规则了,应该有许多实现。我不知道质量所以不推荐了。任何程序员都能写:

目前没有问题了,谢谢大神