簡體   English   中英

在 spacy 中:在 spacy doc (python) 中添加一個 span (doc[a:b]) 作為實體

[英]In spacy: Add a span (doc[a:b]) as entity in a spacy doc (python)

我在整個文檔上使用正則表達式來捕獲此類正則表達式發生的跨度:

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")

我想使用 label “法律”從 doc[5,10] 中生成一個空間實體(實體),以便能夠: A)遍歷文本中的所有法律實體 B)使用可視化工具顯示文檔中包含的不同實體

將 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM