Spacy:命名实体识别日期未按预期工作
Spacy : Named entity Recognition on dates not working as expected
我不确定我是否准确理解 spacy 如何识别文本中的命名实体,在我的例子中尤其是日期。
我正在尝试提取文本文档中的教育背景 + 相应日期。我有这样的东西
text = 'University of A 2019 - 2020
University of B 2016 - 2019
College A 2013 - 2016
College B 2008 - 2013'
doc = nlp(text)
for ent in doc.ents:
print(ent.text, ent.label_)
这给我输出:
University of A ORG
University of B ORG
2016 - 2019 DATE
2013 - 2016 DATE
2008 - 2013 DATE
正如预期的那样,大学被认为是组织,我预计 spacy 不会识别大学,因为它不如大学名称那么明显。但是我不明白为什么我错过了第一次约会,但其他的都很好。
我试过另一个类似这样的文本:
1997 : any text
1998 : any text
1999 : any text
...
2018 : any text
此处除了 2013 年和 2018 年之外的所有日期都被识别,尽管行的格式与其他所有行的格式相同。
有没有办法训练 spacy 以更好地识别日期,或者我应该使用其他工具?我已经在同一程序的其他部分使用 spacy。我现在不使用正则表达式,因为日期可以有多种不同的格式(只有年份、开始年份 - 结束年份,有时还有月份和日期,等等)
您需要一种功能更丰富的模型类型,带有 _md
或 _lg
后缀的 spacy 2.x 和 _trf
带有 spacy 3.x .
例如,您可以安装
python -m spacy download en_core_web_trf
那么,您可以使用
import spacy
nlp = spacy.load('en_core_web_trf')
text = '''University of A 2019 - 2020
University of B 2016 - 2019
College A 2013 - 2016
College B 2008 - 2013'''
doc = nlp(text)
for ent in doc.ents:
print(ent.text, ent.label_)
输出:
2019 - 2020 DATE
2016 - 2019 DATE
2013 - 2016 DATE
2008 - 2013 DATE
我不确定我是否准确理解 spacy 如何识别文本中的命名实体,在我的例子中尤其是日期。
我正在尝试提取文本文档中的教育背景 + 相应日期。我有这样的东西
text = 'University of A 2019 - 2020
University of B 2016 - 2019
College A 2013 - 2016
College B 2008 - 2013'
doc = nlp(text)
for ent in doc.ents:
print(ent.text, ent.label_)
这给我输出:
University of A ORG
University of B ORG
2016 - 2019 DATE
2013 - 2016 DATE
2008 - 2013 DATE
正如预期的那样,大学被认为是组织,我预计 spacy 不会识别大学,因为它不如大学名称那么明显。但是我不明白为什么我错过了第一次约会,但其他的都很好。
我试过另一个类似这样的文本:
1997 : any text
1998 : any text
1999 : any text
...
2018 : any text
此处除了 2013 年和 2018 年之外的所有日期都被识别,尽管行的格式与其他所有行的格式相同。
有没有办法训练 spacy 以更好地识别日期,或者我应该使用其他工具?我已经在同一程序的其他部分使用 spacy。我现在不使用正则表达式,因为日期可以有多种不同的格式(只有年份、开始年份 - 结束年份,有时还有月份和日期,等等)
您需要一种功能更丰富的模型类型,带有 _md
或 _lg
后缀的 spacy 2.x 和 _trf
带有 spacy 3.x .
例如,您可以安装
python -m spacy download en_core_web_trf
那么,您可以使用
import spacy
nlp = spacy.load('en_core_web_trf')
text = '''University of A 2019 - 2020
University of B 2016 - 2019
College A 2013 - 2016
College B 2008 - 2013'''
doc = nlp(text)
for ent in doc.ents:
print(ent.text, ent.label_)
输出:
2019 - 2020 DATE
2016 - 2019 DATE
2013 - 2016 DATE
2008 - 2013 DATE