我是Python和NLP (使用SpaCy)的新手,所以我希望有人能帮我。我想要在我的文本中检测命名实体,并且在我想从NE中获得5个左右的单词之后检测命名实体。
我已经找到了NEs,但我却无法找到“周围的单词”。
import spacy
nlp=spacy.load("en_core_web_sm")
doc = nlp(open(path to my text).read())
for index, token in enumerate(doc.ents):
if token.label_ == "PERSON" and token.text == "Frodo" or token.text == "Frodo Beutlin":
print(token[:index])
print(token[index])
print(token[index:])Frodo Beutlin
think这是我的结果,因为你可以看到我的NE之前的字符串没有显示出来。另外,我对如何获取多个字符串(之前和之后)感到困惑。
发布于 2019-06-04 04:23:14
谢谢你的帮忙!我确实弄错了类型,现在它可以工作了。)
for index, token in enumerate(doc.ents):
if token.label_ == "PERSON":
if token.text == "Frodo Beutlin":
span = doc.ents[index]
for i in range(1,6):
wordsBefore = doc[span.start - i]
for i in range(1,6):
wordsAfter = doc[span.start + i]发布于 2019-06-03 23:25:35
doc.ents中的实体属于Span类型。使用方括号,您只需对跨度内的令牌进行索引。该实体具有字段start和end,可用于索引原始文档中的标记。
import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("My name is Frodo Beutlin.")
entity = doc.ents[0]
print(f"Token on the left: '{doc[entity.start - 1]}'")
print(f"Token on the right: '{doc[entity.end]}'") Token on the left: 'is'
Token on the right: '.'https://stackoverflow.com/questions/56428341
复制相似问题