【问题标题】:In spacy: Add a span (doc[a:b]) as entity in a spacy doc (python)在 spacy 中:在 spacy doc (python) 中添加一个 span (doc[a:b]) 作为实体
【发布时间】: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


    【解决方案1】:

    将 span 作为实体添加到 doc 的最灵活方法是使用 Doc.set_ents

    from spacy.tokens import Span
    
    span = doc.char_span(start, end, label="ENT")
    doc.set_ents(entities=[span], default="unmodified")
    

    使用default 选项指定如何设置文档中的所有其他标记。默认情况下,其他令牌设置为O,但您可以使用default="unmodified" 保持它们不变,例如如果您要增量添加实体。

    https://spacy.io/api/doc#set_ents

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      相关资源
      最近更新 更多