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



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

例如,输入如下:

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

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

注意:我被指向这个答案(获取单词在句子中的位置)

但是这个答案并不能解决我的问题。它可以帮助我获得令牌的开始字符,但不是结束索引。

感谢所有的帮助

您可以在纯python中使用re:

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

你也可以在空格中这样做:

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)

使用你链接的答案中的想法,你可以这样做

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

您可以简单地使用SpaCy这样做,它不需要对最后一个令牌进行任何检查(与@giovanni的解决方案不同):

def get_char_span(input_txt):
doc = nlp(input_txt)
for i, token in enumerate(doc):
start_i = token.idx
end_i = start_i + len(token.text)
# token span and the token
print(i, token)
# character span
print((start_i, end_i))
# veryfying it in the original input_text
print(input_txt[start_i:end_i])
inp = "My name is X, what's your name?"
get_char_span(inp)

最新更新