Reconhecimento de entidade nomeada (BAIXA) em Python com Spacy

Conteúdo

O processamento de linguagem natural lida com dados de texto. A quantidade de dados de texto gerados atualmente é enorme. E esses dados, se usado corretamente, pode trazer muitos resultados frutíferos. Alguns dos aplicativos de processamento de linguagem natural mais importantes são a análise de texto, as partes da marcação de voz, análise de sentimento e reconhecimento de entidade nomeada.

26119ner1-9906021

A grande quantidade de dados de texto contém uma grande quantidade de informações. Um aspecto importante da análise dos dados deste texto é a identificação das Entidades Nomeadas.

O que é uma entidade nomeada?

Uma entidade nomeada é basicamente um objeto da vida real que tem uma identificação adequada e pode ser denotado com um nome próprio. Entidades nomeadas podem ser um lugar, uma pessoa, Uma organização, um tempo, um objeto geográfico ou entidade.

Por exemplo, as entidades nomeadas seriam Roger Federer, Honda City, Samsung Galaxy S10. Entidades nomeadas são geralmente instâncias de instâncias de entidade. Por exemplo, Roger Federer é uma instância de um jogador de tênis / pessoa, Honda City é uma instância de um carro e o Samsung Galaxy S10 é uma instância de um telefone móvel.

Reconhecimento de entidade nomeada:

O reconhecimento de entidades nomeadas é o processo de PNL que lida com a identificação e classificação de entidades nomeadas. Texto simples e estruturado é usado e entidades nomeadas são classificadas em pessoas, organizações, locais, dinheiro, clima, etc. Basicamente, entidades nomeadas são identificadas e segmentadas em várias classes predefinidas.

Os sistemas NER são desenvolvidos com várias abordagens linguísticas, bem como métodos estatísticos e de aprendizado de máquina. O NER tem muitas aplicações para projetos ou fins comerciais.

O modelo NER primeiro identifica uma entidade e, em seguida, a categoriza na classe mais apropriada. Alguns dos tipos comuns de Entidades Nomeadas serão:

1. Organizações:

NASA, CERN, ISRO, etc.

2 locais:

Mumbai, Nova York, Calcutá.

3. Dinheiro:

Bilhões de dólares, 50 Libras esterlinas.

4. Encontro:

15 agosto 2020

5. Pessoa:

Elon Musk, Richard Feynman, Subhas Chandra Bose.

Uma coisa importante sobre os modelos NER é que sua capacidade de entender as Entidades Nomeadas depende dos dados nos quais foram treinados.. Existem muitas aplicações de NER.

NER pode ser usado para classificação de conteúdo, as várias entidades nomeadas de um texto podem ser compiladas e, com base nesses dados, tópicos de conteúdo podem ser compreendidos. Nos campos acadêmico e de pesquisa, O NER pode ser usado para recuperar dados e informações mais rapidamente de uma ampla variedade de informações textuais. NER ajuda muito no caso de extrair informações de grandes conjuntos de dados de texto.

NER usando Spacy:

Spacy é uma biblioteca de processamento de linguagem natural de código aberto que pode ser usada para várias tarefas. Possui métodos integrados para reconhecimento de entidade nomeada. Spacy tem um sistema rápido de reconhecimento estatístico de entidades.

Podemos usar espacy muito facilmente para tarefas NER. Embora muitas vezes precisemos treinar nossos próprios dados para necessidades específicas da empresa, o modelo espacial em geral funciona bem para todos os tipos de dados de texto.

Vamos começar com o código, primeiro importamos espacidade e continuar.

import spacy
from spacy import displacy

NER = spacy.load("en_core_web_sm")

Agora, entramos em nosso texto amostral que estaremos testando. O texto foi retirado da página da Wikipédia isro.

raw_text="A Organização de Pesquisa Espacial Indiana ou é a agência espacial nacional da Índia, sediada em Bengaluru. Opera sob o Departamento de Espaço, que é diretamente supervisionado pelo Primeiro Ministro da Índia, enquanto o Presidente da ISRO atua também como executivo do DOS."
text1 = DOWN(raw_text)

Agora, imprimimos os dados sobre os NEs encontrados nesta amostra de texto.

por palavra em text1.ents:
    imprimir(word.text,word.label_)

A saída:

The Indian Space Research Organisation ORG
the national space agency ORG
India GPE
Bengaluru GPE
Department of Space ORG
India GPE
ISRO ORG
DOS ORG

Então, agora podemos ver que todas as Entidades nomeadas neste texto em particular são extraídos. Se estamos enfrentando qualquer problema em relação ao tipo de NE em particular, podemos usar o seguinte método.

espacy.explicar("ORG")

Produção: 'Empresas, Agências, Instituições, etc.’

espacy.explicar("GPE")

Produção: Países, cidades, Estado’

Agora, testamos uma imagem interessante, mostrando as NEs diretamente no texto.

displacy.render(texto1, estilo ="ent",jupyter = True)

Produção:

45514ner2-1751415

Vou deixar o Kaggle Link no final, para que os leitores possam testar o código por si próprios. Quanto ao visual, Entidades nomeadas são mencionadas corretamente no texto, com cores contrastantes, o que torna a visualização de dados muito fácil e simples. Existe outro tipo de visual, que explora todo o conjunto de dados como um todo. Veja o link do Kaggle no final.

Vamos tentar as mesmas tarefas com alguns testes que contêm mais entidades nomeadas.

raw_text2 = "A Missão Orbitador de Marte (MÃE), informalmente conhecido como Mangalyaan, foi lançado em órbita da Terra em 5 novembro 2013 pela Organização Indiana de Pesquisa Espacial (ISRO) e entrou na órbita de Marte em 24 setembro 2014. Assim, a Índia tornou-se o primeiro país a entrar em órbita de Marte em sua primeira tentativa.. Foi concluído a um custo recorde de 74 milhões de dólares “.

text2= NER(raw_text2)
para palavra em text2.ents:
    imprimir(word.text,word.label_)

Produção:

The Mars Orbiter Mission PRODUCT
MOM ORG
Mangalyaan GPE
Earth LOC
5 Novembro 2013 DATE
the Indian Space Research Organisation ORG
ISRO ORG
Mars LOC
24 Setembro 2014 DATE
India GPE
first ORDINAL
Mars LOC
first ORDINAL
$74 milhões de dinheiro

Aqui, temos mais tipos de entidades nomeadas. Vamos identificar que tipo eles são.

espacy.explicar("PRODUTO")

Produção: 'Objetos, Veículos, Alimentos, etc. (sem serviços)’

espacy.explicar("LOC")

Produção: 'Sites não-GPE, Serras, corpos de água’

espacy.explicar("DATA")

Produção: 'Datas ou períodos absolutos ou relativos’

espacy.explicar("ORDINAL")

Produção: "Primeiro", "segundo", etc.’

espacy.explicar("DINHEIRO")

Produção: Valores monetários, incluindo a unidade’

Agora, analisamos o texto como um todo na forma de um visual.

displacy.render(text2,style="ent",jupyter = True)

Produção:

68260ner3-3209580

Aqui, as várias Entidades Nomeadas em cores contrastantes, então entendemos a natureza geral do texto.

NER de um artigo de notícias

Extrairemos dados de um artigo de notícias e realizaremos um NER sobre os dados de texto coletados a partir daí..

Usaremos Sopa Bonita para fins de raspagem da web.

from bs4 import BeautifulSoup
import requests
import re

Agora, vamos usar a URL do artigo de notícias.

URL="https://www.zeebiz.com/markets/currency/news-cryptocurrency-news-today-june-12-bitcoin-dogecoin-shiba-inu-and-other-top-coins-prices-and-all-latest-updates-158490"
html_content = requests.get(URL).texto
sopa = BeautifulSoup(html_content, "lxml")

Agora, nós temos o conteúdo do corpo.

body = soup.body.text

Agora, usamos expressões regulares para limpar o texto.

body = body.replace('n', '')
body = body.replace('t', '')
body = body.replace('r', '')
body = body.replace('xa0', '')
body = re.sub(r '[^ ws]', '', corpo)

Vamos agora dar uma olhada no texto.

corpo[1000:1500]
'Ver no aplicativo Bitcoin diminuiu em 6 e estava negociando a Rs 2728815 depois de atingir dias de alta de Rs 2900208 Fonte Reuters relatado por ZeeBiz WebTeam Escrito por Ravi Kant Kumar Atualizado sábado junho 12 20210646 pm Patna ZeeBiz WebDesk NOTÍCIAS RELACIONADAS Criptomoeda Últimas notícias de hoje junho 14 Bitcoin lidera rally criptográfico 12 após ELON MUSK TWEET Verifique Ethereum Polka Dot Dogecoin Shiba Inu e outras moedas principais Preço INR Atualizações da Índia mundial A lei de Bitcoin é apenas '

Agora, vamos prosseguir com o reconhecimento de entidades nomeadas.

text3 = DOWN(corpo)
displacy.render(text3, style ="ent",jupyter = True)

Nós vamos, a forma visual é muito grande, mas há algumas partes interessantes que desejo cobrir.

81153ner4-8773793

Agora, chegando a algumas observações.

O bitcoin é supostamente uma localização geográfica. Patna é uma organização. Deixando de lado alguns casos, a maior parte do texto foi classificada corretamente em suas respectivas entidades nomeadas. Por tanto, podemos entender que o reconhecimento da entidade foi realizado de forma correta.

O NER tem muitos desafios e muitos desenvolvimentos a serem feitos. A implementação adequada do NER ainda é um grande problema. Além de Spacy, outras plataformas de PNL incluem PORTÃO e OpenNLP.

Para ver o código completo, veja este link em Kaggle.

Então, podemos concluir que NER é uma aplicação importante da PNL e tem usos difundidos.

Sobre mim:

Prateek Majumder

Ciência e análise de dados | Especialista em marketing digital | SEO | Criação de conteúdo

Conecte-se comigo no Linkedin.

Obrigado.

A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.