python - 在 Spacy 中,如何匹配一个特定的实体类型,就在一个特定的单词之后,不管它们之间有什么关系?
问题描述
我想用以下模式匹配 Spacy 中的文本:
- 如果有单词“dénomination”或“denomination”,我想匹配下一个“MISC”实体(来自 Spacy 的实体名称),无论两者之间有什么。
例如在:
text=" Some texte about a company, company number: 254455, Dénomination\n (entire name): NAME_OF_THE_COMPANY , \n, some other informations of the... "
我想提取 Spacy 识别为实体 MISC 的“NAME_OF_COMPANY”
为了获得 Spacy 的实体,我这样做:
for txt in text_file:
doc = nlp(txt)
for token_french in doc_french:
for ent in doc.ents:
print(ent.label_, ent.text)
但是后来我尝试了许多模式,如下所示,但没有任何成功:
matcher=Matcher(nlp.vocab)
pattern = [{"REGEX" : "[D|d][é|e]nomination\s{0,}"},{"REGEX" : "[A-Za-z\n\r\s:)]{1,}"},{"ENT_TYPE" : "MISC"}]
matcher.add('company_name', None, pattern)
matches = matcher(doc)
解决方案
要记住几件事:
模式中的每个 dict 对应一个不带空格的标记。
您可以将任意数量的中间标记与
{"OP": "*"}
.validate=True
在处理新模式时,使用withMatcher()
获得更多反馈很有用。
我认为您的模式可能看起来更像:
pattern = [{"LOWER": {"REGEX" : "d[é|e]nomination"}}, {"OP": "*"}, {"ENT_TYPE": "MISC"}]
Matcher 会查看整个文档,因此如果您的文档很长,它不仅会提供下一个 MISC,还会提供一个匹配“面额”的匹配项,然后是每个后续 MISC。您必须分别从结果中选择最短的匹配项。
推荐阅读
- python - 如何单击网站上的任意位置以关闭选项(Selenium)
- javascript - 如何从输入文本区域显示 JSON 到 HTML 表
- javascript - 如何在javascript中添加多值数组作为对象数组的子元素
- tensorflow2.0 - Jetson Tx2 破坏连体网络缓慢
- sql-server - Py4JJavaError:使用 PySpark 从 SQL Server 加载数据库
- api - 使用 Curl 将多个网站添加到 Cloudflare
- java - 无法在 Spring Boot Security 中使用基本身份验证登录
- azure - 使用用户流时如何在 B2C 中关闭注册本地帐户链接?
- python - 检查元素直到找到并单击该元素
- ios - React Native iOS:仅在冷启动时(在执行 JavaScript 之前)在 iOS 中将初始方向锁定为原生横向