【发布时间】:2022-08-15 14:22:19
【问题描述】:
我在整个文档上使用正则表达式来捕获此类正则表达式发生的跨度:
import spacy
import re
nlp = spacy.load(\"en_core_web_sm\")
doc = nlp(\"The United States of America (USA) are commonly known as the United States (U.S. or US) or America.\")
expression = r\"[Uu](nited|\\.?) ?[Ss](tates|\\.?)\"
for match in re.finditer(expression, doc.text):
start, end = match.span()
span = doc.char_span(start, end)
# This is a Span object or None
# if match doesn\'t map to valid token sequence
if span is not None:
print(\"Found match:\", span.text)
即使正则表达式匹配的边界不对应于标记边界,也有一种方法可以获得与文档上的正则表达式匹配对应的跨度(标记列表)。 看: 如何将匹配扩展为有效的令牌序列?在https://spacy.io/usage/rule-based-matching
到目前为止,一切都很好。
既然我有一系列跨度,我如何将它们转换为实体? 我知道实体统治者: EntityRuler 是一个管道组件(另请参见上面的链接),但该 entityruler 将模式作为输入以在文档中搜索而不是跨越。
如果我想在整个文档上使用正则表达式来获取我想转换为 ents 的集合 os span,下一步是什么?实体统治者?如何?或者是其他东西?
说得更简单:
nlp = spacy.load(\"en_core_web_sm\")
doc = nlp(\"The aplicable law is article 102 section b sentence 6 that deals with robery\")
我想从带有标签“law”的doc[5,10]中生成一个spacy ent(实体),以便能够: A) 遍历文本中的所有法律实体 B) 使用可视化工具显示文档中包含的不同实体
标签: python nlp spacy named-entity-recognition