使用 spacy 提取令牌的开始和结束索引

Extracting start and end indices of a token using spacy

我正在查看很多句子,并希望提取给定句子中单词的开始和结束索引。

例如输入如下:

“这是一个以英语为母语的人用英语写的句子。”

我想要的是单词 'English' 的跨度,在这种情况下是:(30,37) 和 (50, 57)。

注意:我被指向这个答案 ()

但是这个答案并没有解决我的问题。它可以帮助我获取令牌的起始字符而不是结束索引。

感谢所有帮助

你可以用 re in pure python:

s="This is a sentence written in english by a native English speaker."

import re
[(i.start(), i.end()) for i in re.finditer('ENGLISH', s.upper())]

#output
[(30, 37), (50, 57)]

你也可以在 spacy 中做:

import spacy
nlp=spacy.load("en_core_web_sm")
doc=nlp("This is a sentence written in english by a native English speaker.")
for ent in doc.ents:
    if ent.text.upper()=='ENGLISH':
      print(ent.start_char,ent.end_char)

使用你link答案中的想法,你可以做这样的事情

from spacy.lang.en import English
nlp = English()
s = nlp("This is a sentence written in english by a native English speaker")
boundaries = []
for idx, i in enumerate(s[:-1]):
    if i.text.lower() == "english":
        boundaries.append((i.idx, s[idx+1].idx-1))