python - 使用spacy在python中使用ML方法(NER)提取日期

标签 python spacy named-entity-recognition

我有以下文字:

方法 1:使用正则表达式的基于规则的方法

text=r" this is one 2012/02/12.This is another 21-09-2021. This is third 08/09/2015 and this is final date 19870901"

import re
import pandas as pd

def extract_date_strings(text):
    extracted=re.findall(r"[0-9]+[\\\-\/\_]+[0-9]+[\\\-\/\_]+[0-9]+",text)
    return extracted    

extracted_dates=extract_date_strings(text)

def date_formatter(date_str_list):
    format_=['%Y/%m/%d','%d-%m-%Y','%d/%m/%Y']
    formatted_date=[]
    for _date, format_ in zip(extracted_dates,format_):
        date_=pd.to_datetime(_date, format=format_)
        formatted_date.append(date_)
    return pd.Series(formatted_date)

date_formatter(extracted_dates)

我得到的正确结果为:

0   2012-02-12
1   2021-09-21
2   2015-09-08
dtype: datetime64[ns]

现在我尝试了,

方法 2:使用 spacy 的基于 ML 的方法

import spacy
nlp = spacy.load('en_core_web_trf')
# nlp = spacy.load('en_core_web_lg')

doc = nlp(text)
for ent in doc.ents:
    print(ent.text, ent.label_)

我得到以下结果:

another 21 DATE
- DATE
09 DATE
- DATE
2021 DATE
third ORDINAL
08/09/2015 DATE
19870901 DATE

结果不符合预期(部分成功)。它无法识别 2012/02/12。它还将 21-09-2021 分解为单独的元素。它成功识别 08/09/201519870901

我如何进行调整,以便 spacy 能够识别文本中的日期字符串。也许需要一些定制。这里需要一些帮助。谢谢!

最佳答案

我广泛地处理过这个问题,你不能直接使用 NER,它只是工作得不够好。

我通过结合两种方法解决了这个问题:

1.使用正则表达式预处理文本(我删除了所有标点符号,所以我将 没有深入研究人们如何选择写他们的日期——我正在处理 与现实生活中的问题)

  • 使用 Spacy 模式识别来检测是否为日期格式

  • 因为就我而言,2000 年 3 月 1 日也有可能我添加了一个新的 NER 输入调用月份

    rulerMonths = EntityRuler( (self._nlp), overwrite_ents=True, after="ner") 以月为单位的月份: RulerMonths.add_patterns([{"label": "MONTH", "pattern": Month.lower()}])

  • 希望对您有所帮助并节省您的时间

    关于python - 使用spacy在python中使用ML方法(NER)提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70285947/

    相关文章:

    php - 命名实体识别算法

    python - 系统主题图标和 PyQt4

    google-colaboratory - 有什么方法可以在 google colab gpu 上训练 spacy?

    python - 用于 Python 的轻量级 NLP 框架

    azure - 将 EntityRecognitionSkill 限制为confidence > .5

    python - 用于识别产品的自定义 NER

    python - 使用python脚本通过telnet在远程主机上执行命令

    Python Auto ARIMA 模型无法正常工作

    没有子进程的Python反向shell

    python - 如何在Spacy中为OOV术语指定词向量?