【问题标题】:Extract entity from dataframe using spacy使用 spacy 从数据框中提取实体
【发布时间】:2021-08-19 02:24:40
【问题描述】:

我使用 pandas 从 excel 文件中读取内容::

import pandas as pd
df = pd.read_excel("FAM_template_Update 1911274_JS.xlsx" )
df

在尝试使用 spacy:: 提取实体时

import spacy
nlp = spacy.load("en_core_web_sm")
doc = nlp(df)
for enitity in doc.ents:
     print((entity.text))

出现错误:: TypeError: 参数“字符串”的类型不正确(预期为 str,得到了 DataFrame)

        On line(3)-----> doc = nlp(df)

【问题讨论】:

    标签: python pandas spacy


    【解决方案1】:

    这是意料之中的,因为Spacy 不准备按原样处理数据帧。在能够打印实体之前,您需要做一些工作。首先确定包含要在其上使用nlp 的文本的列。之后,将其值提取为列表,现在您可以开始了。假设包含文本的列名为Text

    for i in df['Question'].tolist():
        doc = nlp(i)
        for entity in doc.ents:
             print((entity.text))
    

    这将遍历数据框中的每个文本(行)并打印实体。

    【讨论】:

      【解决方案2】:

      您需要遍历数据框中的各个字符串。 NLP 解析器和实体提取需要一个字符串。

      例如:

      for row in range(len(df)):
          doc = nlp(df.loc[row, "text_column"])
          for enitity in doc.ents:
               print((entity.text))
      

      【讨论】:

      • 它给我错误 :: ValueError: cymem.cymem.Pool 的大小错误,尝试重新编译。预期 64,得到 48 代码:: import spacy nlp = spacy.load("en_core_web_sm") for row in range(len(df)): doc = nlp(df.loc[row,"Question"]) for entity in doc .ents: 打印((entity.text))
      • @ajax 该循环适用于我的数据集。看起来你有一个次要问题。 github.com/huggingface/neuralcoref/issues/102。尝试重新安装 Spacy。
      • 是的,所以降级 spacy 对我有用。因此,它根据提供的图像为我提供了问题列的实体。但它并没有给我所有的文字。它给了我wikipage,但上面是它没有提供的wikisphere。
      • 它可以识别的内容取决于它所构建的库。它还与很多事情有关,例如讲话的位置、大小写等。它检测到:Wikipedia, USA, Canada, Apple for "I used Wikipedia to get answers about USA and then also Canada and how they like Apple" 但仅检测 USA Canada for "wikipedia USA Canada Apple"
      • 说如果 spacy 无法识别存在的实体,我想按原样打印问题。我可以使用 if 语句并打印如果实体不存在打印问题吗?如何解决这个问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2017-11-14
      • 2020-06-22
      • 1970-01-01
      • 2022-06-26
      • 2017-05-03
      • 1970-01-01
      相关资源
      最近更新 更多