当前位置:   article > 正文

jionlp之自然语言日期识别_jonlp

jonlp

文章目录

前言

一、jionlp是什么?

1.优势分析

二、使用步骤

1.引入库

2.提取时间

3.解析时间

4.封装方法

5.封装为api

总结


前言

随着大模型能力的不断增强,大模型可以干的事情越来越多,利用大模型可以进行语义理解、语义识别。但是大模型也有其局限性,比如不知道时间。当你问大模型时间的时候,他的幻觉就来了。本来接下来将探讨如何解决这个问题。


一、jionlp是什么?

Jionlp 是一个Python库,主要用于处理中文自然语言处理(NLP)任务。它提供了一系列的工具和功能,旨在帮助开发者更方便地处理和分析中文文本数据。Jionlp 可能包括以下功能:

  1. 中文分词:将中文文本分解为有意义的词语单元。
  2. 词性标注:识别文本中每个词语的词性(如名词、动词等)。
  3. 命名实体识别:识别文本中的特定实体,如人名、地名、组织名等。
  4. 情感分析:分析文本的情感倾向,如积极、消极或中性。
  5. 文本分类:将文本分类到预定义的类别中。
  6. 关键词提取:从文本中提取出重要的关键词。
  7. 文本相似度计算:比较两段文本的相似程度。

Jionlp 可能还包括其他与中文文本处理相关的功能,如文本清洗、停用词过滤、词频统计等。这个库的目标是简化中文文本处理的复杂度,提供高效、易用的工具,以便开发者可以专注于他们的核心任务。

1.优势分析

使用大模型识别日期即便可行,但由于大模型运算量巨大,时间基本是秒级

使用jionlp速度则很快,可以说是毫秒级

这样jionlp在性能上、准确性上都是比大模型技高一筹,当然这里主要是说日期识别方面。

二、使用步骤

1.引入库

  1. import time
  2. import datetime
  3. import jionlp as jio

2.提取时间

代码如下(示例):

  1. text = '【新华社报2021-9-9】国家统计局今天发布了2021年8月份全国CPI(居民消费价格指数)和PPI(工业生产者出厂价格指数)数据。'
  2. # 抽取时间实体
  3. res = jio.ner.extract_time(text, time_base={'year': datetime.datetime.now().year})
  4. print(res)

返回结果如下,可见识别到了多个日期信息

这里time_base参数也很重要,即确认基础时间信息,会影响相对日期

  1. [
  2. {
  3. "text": "2021-9-9",
  4. "offset": [
  5. 5,
  6. 13
  7. ],
  8. "type": "time_point",
  9. "detail": {
  10. "type": "time_point",
  11. "definition": "accurate",
  12. "time": [
  13. "2021-09-09 00:00:00",
  14. "2021-09-09 23:59:59"
  15. ]
  16. }
  17. },
  18. {
  19. "text": "今天",
  20. "offset": [
  21. 19,
  22. 21
  23. ],
  24. "type": "time_point",
  25. "detail": {
  26. "type": "time_point",
  27. "definition": "accurate",
  28. "time": [
  29. "2024-01-01 00:00:00",
  30. "2024-01-01 23:59:59"
  31. ]
  32. }
  33. },
  34. {
  35. "text": "2021年8月份",
  36. "offset": [
  37. 24,
  38. 32
  39. ],
  40. "type": "time_point",
  41. "detail": {
  42. "type": "time_point",
  43. "definition": "accurate",
  44. "time": [
  45. "2021-08-01 00:00:00",
  46. "2021-08-31 23:59:59"
  47. ]
  48. }
  49. }
  50. ]

3.解析时间

代码如下(示例):

  1. # 时间解析
  2. res = jio.parse_time('今年9月', time_base=time.time())
  3. res = jio.parse_time('今年9月')
  4. print(res)

返回结果如下,可以看到第一个方法也可以识别出具体时间信息,不一样的地方在于,第一个方法没识别到日期也不会报错,但是第二个方法识别不到日期会报错

  1. {
  2. "type": "time_span",
  3. "definition": "accurate",
  4. "time": [
  5. "2024-09-01 00:00:00",
  6. "2024-09-30 23:59:59"
  7. ]
  8. }

4.封装方法

代码如下(示例):

  1. def getDate(date_Str):
  2. """
  3. 根据文字获取日趋信息
  4. """
  5. date_Str=date_Str.replace("这个月","本月")
  6. date={
  7. "start":"",
  8. "end":""
  9. }
  10. dateObjs = jio.ner.extract_time(date_Str, time_base=time.time())
  11. if len(dateObjs)>0:
  12. # print(dateObjs)
  13. # print(type(dateObjs))
  14. dateObj=dateObjs[0]
  15. # print(dateObj)
  16. # print(type(dateObj))
  17. detailTime=dateObj["detail"]["time"]
  18. if len(detailTime)==2:
  19. date['start']=detailTime[0]
  20. date['end']=detailTime[1]
  21. return date

直接传递包含日期的字符串,即可自动返回日期时间信息

5.封装为api

为了方便其他应用调用,封装为api是一个比较好的方法

使用fastapi+uvicorn是一个比较推荐的方式


总结

本文主要介绍了使用jionlp进行自然语言日期识别的方法过程,希望可以帮助到正好有需要的小伙伴。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/1019511
推荐阅读
相关标签
  

闽ICP备14008679号