首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从具有空格的命名实体中查找左右字符串

如何从具有空格的命名实体中查找左右字符串
EN

Stack Overflow用户
提问于 2019-06-03 21:25:10
回答 2查看 1.2K关注 0票数 3

我是Python和NLP (使用SpaCy)的新手,所以我希望有人能帮我。我想要在我的文本中检测命名实体,并且在我想从NE中获得5个左右的单词之后检测命名实体。

我已经找到了NEs,但我却无法找到“周围的单词”。

代码语言:javascript
运行
复制
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:])
代码语言:javascript
运行
复制
Frodo Beutlin
think

这是我的结果,因为你可以看到我的NE之前的字符串没有显示出来。另外,我对如何获取多个字符串(之前和之后)感到困惑。

EN

回答 2

Stack Overflow用户

发布于 2019-06-04 04:23:14

谢谢你的帮忙!我确实弄错了类型,现在它可以工作了。)

代码语言:javascript
运行
复制
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]
票数 1
EN

Stack Overflow用户

发布于 2019-06-03 23:25:35

doc.ents中的实体属于Span类型。使用方括号,您只需对跨度内的令牌进行索引。该实体具有字段startend,可用于索引原始文档中的标记。

代码语言:javascript
运行
复制
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]}'") 
代码语言:javascript
运行
复制
Token on the left: 'is'
Token on the right: '.'
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56428341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档