微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 SpaCy 和 python lambda 提取命名实体

如何解决使用 SpaCy 和 python lambda 提取命名实体

我正在使用 following 代码使用 lambda 提取命名实体。

df['Place'] = df['Text'].apply(lambda x: [entity.text for entity in nlp(x).ents if entity.label_ == 'GPE'])

df['Text'].apply(lambda x: ([entity.text for entity in nlp(x).ents if entity.label_ == 'GPE'] or [''])[0])

对于几百条记录,它可以提取结果。但是当涉及到数千条记录时。它几乎需要永远。有人可以帮我优化这行代码吗?

解决方法

您可以通过以下方式改进:

  1. 对整个文档列表调用 nlp.pipe
  2. 禁用不必要的管道。

试试:

import spacy
nlp = spacy.load("en_core_web_md",disable = ["tagger","parser"])

df = pd.DataFrame({"Text":["this is a text about Germany","this is another about Trump"]})

texts = df["Text"].to_list()
ents = []
for doc in nlp.pipe(texts):
    for ent in doc.ents:
        if ent.label_ == "GPE":
            ents.append(ent)
            
print(ents)

[Germany]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。