如何在SPACYNLP中定义新实体

2024-10-03 15:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在空间中定义一个新实体。你知道吗

我的代码需要实现以下功能:

  • 搜索特定关键字的文本(此处为:“Streitwert”)

  • 如果关键字在文本中,则查找单词出现的句子

  • 在那句话中查找数字

  • 此数字应该是一个带有标签“keyword”的实体

这是我的代码,但不起作用:

def get_keyword_value(token):
    if "Streitwert" in token.doc.text: 
        for sent in token.doc.sents:
            if "Streitwert" in sent.text:
                for token in sent:
                    if token.pos_ == "NUM":
                        return token.text


import spacy
from spacy.tokens import Token
nlp = spacy.load("de_core_news_sm")
Token.set_extension("Streitwert", getter=get_keyword_value, force=True)

text = "Die ist ein langer Text. Der Streitwert wird auf EUR 12.000 EUR festgesetzt"
doc = nlp(text)

[(token.text, token._.Streitwert) for token in doc]

代码工作不正常,有两个问题

  1. 每个令牌都有一个令牌。uu.Streitwert=12.000(但它只能是令牌12.000

  2. 如何定义新的文件标签为“Streitwert”

我真正想要的是,当我这么做的时候,“12000”被贴上了“Streitwert”的标签

[(ent.text, ent.label_) for ent in doc.ents]


Tags: 代码textin实体tokenfordocif
1条回答
网友
1楼 · 发布于 2024-10-03 15:32:09

至于定义一个新的自定义实体,您可以很容易地添加到实体列表中:ents。要了解如何做到这一点,我建议您看看这个相对较短的空间示例,它所做的事情与您想要做的非常相似: https://spacy.io/usage/rule-based-matching#on_match

在本例中,它们匹配一个单词,并基于匹配添加一个自定义实体。在这里,它们使用ORTH属性,但是您可以使用{“POS”:“NUM”}来满足您的需要。另外,您可能会发现使用Rule-based Matcher Explorer在友好的UI中处理matterns很有帮助。在本例中,不需要设置自定义属性。你知道吗

但是,如果您选择使用自定义属性路径,那么您需要使用的是正确的Token.set\u扩展(…)以启用令牌级自定义属性。我可以想象您想要将缺省值设置为False,然后用True覆盖False,如果令牌是“Streitwert”。您可以通过添加一个默认参数来实现这一点。你知道吗

Token.set_extension("Streitwert", default=None, force=True)

另外,我注意到get\u key\u word(…)方法在大多数情况下不会返回任何内容。i、 如果任何一个条件是False,应该返回什么值?你知道吗

相关问题 更多 >