python - 如何使标记器识别日期
问题描述
我正在使用 en_core_web_lg ,我遇到了标记器没有正确拆分日期的情况:
self._nlp = spacy.load("en_core_web_lg")
self._nlp.tokenizer = spacy.tokenizer.Tokenizer(self._nlp.vocab)
text='嗨,谢谢你,我是 Chris,1990 年 7 月 6 日'
令牌是:
[('hi', 'hi', 'INTJ', 'UH', 'advmod', 'xx', True, False),
('good', 'good', 'ADJ', 'JJ', 'ROOT', 'xxxx', True, False),
('thank', 'thank', 'VERB', 'VBP', 'ROOT', 'xxxx', True, False),
('you', '-PRON-', 'PRON', 'PRP', 'dobj', 'xxx', True, True),
('I', '-PRON-', 'PRON', 'PRP', 'nsubj', 'X', True, True),
('am', 'be', 'AUX', 'VBP', 'ROOT', 'xx', True, True),
('Chris', 'Chris', 'PROPN', 'NNP', 'compound', 'Xxxx', True, False),
('July', 'July', 'PROPN', 'NNP', 'attr', 'Xxxx', True, False),
('6', '6', 'NUM', 'CD', 'nummod', 'd', False, False),
('1982', '1990', 'NUM', 'CD', 'nummod', 'dddd', False, False)]
有没有办法让标记器做类似的事情:
[('hi', 'hi', 'INTJ', 'UH', 'advmod', 'xx', True, False),
('good', 'good', 'ADJ', 'JJ', 'ROOT', 'xxxx', True, False),
('thank', 'thank', 'VERB', 'VBP', 'ROOT', 'xxxx', True, False),
('you', '-PRON-', 'PRON', 'PRP', 'dobj', 'xxx', True, True),
('I', '-PRON-', 'PRON', 'PRP', 'nsubj', 'X', True, True),
('am', 'be', 'AUX', 'VBP', 'ROOT', 'xx', True, True),
('Chris', 'Chris', 'PROPN', 'NNP', 'compound', 'Xxxx', True, False),
('July 6 1982', 'July 6 1982', '?????', '?????', '?????', '?????', True, False)]
请忽略 ???? 因为我不确定结果会是什么。
或者,有没有一种方法(无需训练模型)NER 将正确识别日期?
谢谢,
尼尔
解决方案
该字符串已被 NER 组件标记为 DATE,即使在小型模型中也是如此。
import spacy
nlp = spacy.load("en_core_web_sm")
text = "hi good thank you I am Chris July 6 1990"
for ent in nlp(text).ents:
print(ent.label_, ent, sep="\t")
输出:
PERSON Chris
DATE July 6 1990
如果您想将实体(如日期)合并为单个标记,则有一个管道功能,因此您可以用一行来完成。
推荐阅读
- css - 如何在 WordPress 中加载 SVG?
- javascript - 踢出角色中的所有用户
- linux - 如何比较包含许多长字符串的两个文件,然后提取具有至少 n 个连续相同字符的行?
- string - 如何在 p5 中使用 key 或 keyCode 函数?
- python - 是否有可能为这个分而治之问题提供递归解决方案?
- java - 如果输入的值大于 int 的范围,如何验证请求 bean 中的整数字段?
- java - 我可以直接使用他们展示中的 PrimeFaces 验证码吗?
- java - 获取嵌套实体数据导致 stackoverflow 错误
- mapping - 如何创建键值对并将其写入我的 badgerDB?
- java - 如何修复我将字符串与 compareTo() 进行比较的代码