Cómo extraer entidades con Google Cloud Natural Language API

Una de las tareas más comunes en NLP es la extracción de entidades, donde el objetivo es identificar y clasificar elementos mencionados en el texto, como personas, organizaciones, ubicaciones, eventos, entre otros. En esta ocasión te comparto un script en Python que utiliza la API de Google Cloud Natural Language para extraer entidades del contenido de una página web.

Librerías necesarias

Para ejecutar el script, es necesario instalar las siguientes librerías:

  • google-cloud-language: Proporciona acceso a la API de Google Cloud Natural Language.
  • googletrans: Utilizado para traducción de textos (aunque no se emplea directamente en este script).
  • pandas: Utilizado para manipulación y análisis de datos.
  • beautifulsoup4: Utilizado para extraer contenido HTML de las páginas web.
  • requests: Utilizado para realizar solicitudes HTTP.

Puedes ejecutar el siguiente comando para instalar todas de una vez:

pip install google-cloud-language googletrans pandas beautifulsoup4 requests

Explicación del código

from tabnanny import verbose
from google.cloud import language_v1
from google.cloud.language_v1 import Entity, EntityMention
from google.cloud.language_v1 import types
from googletrans import Translator
from bs4 import BeautifulSoup
import requests
import json
import pandas as pd

Estas líneas importan las librerías necesarias.

translator = Translator()
client = language_v1.LanguageServiceClient.from_service_account_json(filename="./tu_archivo.json")

Se inicializa el traductor de Google y se configura el cliente con el que te conectarás a la API de Google Cloud Natural Language (Tendrás que tener el archivo con tus credenciales de la cuenta de servicio en formato JSON e indicar la ruta en la que se encuentra)

url = input("Introduce una URL para extraer su contenido: ")
req = requests.get(url)
soup = BeautifulSoup(req.content, 'html.parser')
text = str(soup.get_text().strip())

Se solicita una URL, se obtiene el contenido de la página y se extrae el texto.

document = language_v1.Document(content=text, type_=language_v1.Document.Type.PLAIN_TEXT)
entities = client.analyze_entities(request={'document':document}).entities

Se crea un documento de tipo PLAIN_TEXT y se analizan las entidades presentes en el texto.

entidades_list = []
tipo_entidad_list = []
wiki_url_list = []
url_con_mid_list = []
prominencia_list = []

Se crean listas vacías para almacenar los datos de las entidades.

for entidad in entities:
    entidades_list.append(entidad.name)
    tipo_entidad_list.append(language_v1.Entity.Type(entidad.type_).name)
    wiki_url_list.append(entidad.metadata.get('wikipedia_url', 'Sin datos'))
    url_con_mid_list.append(f"https://www.google.com/search?q={entidad.name}&kponly&kgmid={entidad.metadata.get('mid', 'No existe id')}")
    prominencia_list.append(entidad.salience)

Se recorre cada entidad y se agregan los datos a las listas.

data = {
    'Entidad': entidades_list,
    'Tipo Entidad': tipo_entidad_list,
    'Wiki URL': wiki_url_list,
    'URL con MID': url_con_mid_list,
    'Prominencia en el texto': prominencia_list
}
df = pd.DataFrame(data)

Se crea un diccionario con los datos y se convierte en un DataFrame de pandas.

print(df)
csv_filename = "entidades_analizadas.csv"
df.to_csv(csv_filename, index=False)
print(f"Se ha guardado el archivo CSV como '{csv_filename}'.")

Se imprime el DataFrame y se guarda como un archivo CSV.

Deja un comentario