我想知道是否存在一种优雅的方法来获取实体相对于句子的索引。我知道我可以使用ent.start_char
和ent.end_char
获取字符串中实体的索引,但是该值是相对于整个字符串的。
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp(u"Apple is looking at buying U.K. startup for $1 billion. Apple just launched a new Credit Card.")
for ent in doc.ents:
print(ent.text, ent.start_char, ent.end_char, ent.label_)
我希望两个句子中的实体Apple
分别指向起始索引0和结束索引5。我该怎么办?
答案 0 :(得分:3)
您需要从实体起始位置减去句子起始位置:
for ent in doc.ents:
print(ent.text, ent.start_char-ent.sent.start_char, ent.end_char-ent.sent.start_char, ent.label_)
# ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
输出:
Apple 0 5 ORG
U.K. 27 31 GPE
$1 billion 44 54 MONEY
Apple 0 5 ORG
Credit Card 26 37 ORG