es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Biblioteca de spaCy para extraer frases nominales: Error de valor: [E866] Se esperaba una cadena o ‘Doc’ como entrada, pero se obtuvo:

Actualmente estoy tratando de extraer frases sustantivas de oraciones.
Las oraciones se almacenaron en una columna en un archivo de Excel.
Aquí está el código usando Python:

import pandas as pd
import spacy

df = pd.read_excel("xxx.xlsx")

nlp = spacy.load("en_core_web_md")
for row in range(len(df)):
    doc = nlp(df.loc[row, "Title"])
    for np in doc.noun_chunks:
        print(np.text)

Pero obtuve este error:

Traceback (most recent call last):
  File "/Users/pusinov/PycharmProjects/textsummarizer/paper_term_extraction.py", line 10, in <module>
    doc = nlp(df.loc[row, "Title"])
  File "/Users/pusinov/PycharmProjects/textsummarizer/venv/lib/python3.9/site-packages/spacy/language.py", line 1002, in __call__
    doc = self._ensure_doc(text)
  File "/Users/pusinov/PycharmProjects/textsummarizer/venv/lib/python3.9/site-packages/spacy/language.py", line 1093, in _ensure_doc
    raise ValueError(Errors.E866.format(type=type(doc_like)))
ValueError: [E866] Se esperaba una cadena o 'Doc' como entrada, pero se obtuvo: <class 'float'="">.

¿Alguien puede ayudarme a mejorar el código?
Muchas gracias.

P.D. Todavía soy nuevo en Python.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás obteniendo un ValueError porque estás intentando pasar un número decimal en lugar de una cadena de texto o un objeto Doc a nlp. Esto puede ser debido a que faltan valores en tu archivo de Excel.

    Para evitar este error, puedes añadir una comprobación de valores faltantes antes de pasar los datos a nlp. Aquí tienes una versión actualizada de tu código:

    import pandas as pd
    import spacy
    
    df = pd.read_excel("xxx.xlsx")
    
    nlp = spacy.load("en_core_web_md")
    for row in range(len(df)):
        title = df.loc[row, "Title"]
        if isinstance(title, str):
            doc = nlp(title)
            for np in doc.noun_chunks:
                print(np.text)
    

    En esta versión, primero comprobamos si el valor en la columna “Title” es una cadena de texto (isinstance(title, str)), y solo si lo es, lo pasamos a nlp. De esta manera, evitamos el ValueError causado por pasar valores que no son cadenas de texto a nlp.

    ¡Espero que esto te ayude!

Comments are closed.