Compartilhar via


Tutorial: Análise de Texto com os serviços de IA do Azure

Análise de Texto é um Serviço de IA do Azure que permite executar a mineração e a análise de texto com recursos de Processamento de Linguagem Natural (NLP). Neste tutorial, você aprenderá a usar a Análise de Texto para analisar texto não estruturado no Azure Synapse Analytics.

Este tutorial demonstra como usar a Análise de Texto com o SynapseML para:

  • Detectar rótulos de sentimento no nível da frase ou do documento
  • Identificar o idioma de uma determinada entrada de texto
  • Reconhecer entidades de um texto com links para uma base de dados de conhecimento conhecida
  • Extrair frases-chave de um texto
  • Identificar entidades diferentes no texto e categorizá-las em classes ou tipos pré-definidos
  • Identificar e remover entidades confidenciais em um determinado texto

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

Introdução

Abra o Synapse Studio e crie um notebook. Para começar, importe o SynapseML.

import synapse.ml
from synapse.ml.cognitive import *
from pyspark.sql.functions import col

Configurar a Análise de Texto

Use a Análise de Texto vinculada configurada nas etapas de pré-configuração.

ai_service_name = "<Your linked service for text analytics>"

Sentimento do texto

A Análise de Sentimento do Texto permite detectar os rótulos de sentimento (como "negativo", "neutro" e "positivo") e pontuações de confiança no nível da frase e do documento. Confira Idiomas compatíveis na API de Análise de Texto para obter a lista dos idiomas habilitados.


# Create a dataframe that's tied to it's column names
df = spark.createDataFrame([
  ("I am so happy today, its sunny!", "en-US"),
  ("I am frustrated by this rush hour traffic", "en-US"),
  ("The Azure AI services on spark aint bad", "en-US"),
], ["text", "language"])

# Run the Text Analytics service with options
sentiment = (TextSentiment()
    .setLinkedService(linked_service_name)
    .setTextCol("text")
    .setOutputCol("sentiment")
    .setErrorCol("error")
    .setLanguageCol("language"))

# Show the results of your text query in a table format
results = sentiment.transform(df)

display(results
    .withColumn("sentiment", col("sentiment").getItem("document").getItem("sentences")[0].getItem("sentiment"))
    .select("text", "sentiment"))

Resultados esperados

text sentimento
Estou tão feliz hoje, está ensolarado! positivo
Estou frustrado com esse trânsito da horas do rush negativo
Os serviços de IA do Azure no Spark funcionam bem positivo

Detector de Idioma

O Detector de Idioma avalia o texto de entrada para cada documento e retorna os identificadores de idioma com uma pontuação que indica a intensidade da análise. Esse recurso é útil para conteúdo armazena esse texto arbitrário de coleção, onde o idioma é desconhecido. Confira Idiomas compatíveis na API de Análise de Texto para obter a lista dos idiomas habilitados.

# Create a dataframe that's tied to it's column names
df = spark.createDataFrame([
  ("Hello World",),
  ("Bonjour tout le monde",),
  ("La carretera estaba atascada. Había mucho tráfico el día de ayer.",),
  ("你好",),
  ("こんにちは",),
  (":) :( :D",)
], ["text",])

# Run the Text Analytics service with options
language = (LanguageDetector()
    .setLinkedService(linked_service_name)
    .setTextCol("text")
    .setOutputCol("language")
    .setErrorCol("error"))

# Show the results of your text query in a table format
display(language.transform(df))

Resultados esperados

Resultados esperados para o detector de idiomas v3.1

Detector de Entidade

O Detector de Entidade retorna uma lista de entidades reconhecidas com links para uma base de conhecimento bem conhecida. Confira Idiomas compatíveis na API de Análise de Texto para obter a lista dos idiomas habilitados.

df = spark.createDataFrame([
    ("1", "Microsoft released Windows 10"),
    ("2", "In 1975, Bill Gates III and Paul Allen founded the company.")
], ["if", "text"])

entity = (EntityDetector()
    .setLinkedService(linked_service_name)
    .setLanguage("en")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(entity.transform(df).select("if", "text", col("replies").getItem("document").getItem("entities").alias("entities")))

Resultados esperados

Resultados esperados para o detector de entidade v3.1


Extrator de Frases-chave

A Extração de Frases-chave avalia o texto não estruturado e retorna uma lista de frases-chave. Esse recurso é útil se você precisar identificar rapidamente os principais pontos de estratégias em uma coleção de documentos. Confira Idiomas compatíveis na API de Análise de Texto para obter a lista dos idiomas habilitados.

df = spark.createDataFrame([
    ("en", "Hello world. This is some input text that I love."),
    ("fr", "Bonjour tout le monde"),
    ("es", "La carretera estaba atascada. Había mucho tráfico el día de ayer.")
], ["lang", "text"])

keyPhrase = (KeyPhraseExtractor()
    .setLinkedService(linked_service_name)
    .setLanguageCol("lang")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(keyPhrase.transform(df).select("text", col("replies").getItem("document").getItem("keyPhrases").alias("keyPhrases")))

Resultados esperados

text keyPhrases
Olá, mundo. Este é um texto de entrada que eu amo. "["Olá mundo","texto de entrada"]"
Bonjour tout le monde "["Bonjour","monde"]"
La carretera estaba atascada. Iaia mucho sempre será adídia de ayer. "["mucho tráfico","día","carretera","ayer"]"

NER (Reconhecimento de Entidade Nomeada)

O NER (Reconhecimento de Entidade Nomeada) é a capacidade de identificar diferentes entidades no texto e categorizá-las em classes ou tipos predefinidos, como: pessoa, local, evento, produto e organização. Confira Idiomas compatíveis na API de Análise de Texto para obter a lista dos idiomas habilitados.

df = spark.createDataFrame([
    ("1", "en", "I had a wonderful trip to Seattle last week."),
    ("2", "en", "I visited Space Needle 2 times.")
], ["id", "language", "text"])

ner = (NER()
    .setLinkedService(linked_service_name)
    .setLanguageCol("language")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(ner.transform(df).select("text", col("replies").getItem("document").getItem("entities").alias("entities")))

Resultados esperados

Resultados esperados para o reconhecimento de entidade nomeada v3.1


PII (Informações de Identificação Pessoal) v3.1

O recurso de PII faz parte do NER e pode identificar e editar entidades confidenciais no texto associadas a uma pessoa individual, como: número de telefone, endereço de email, endereço para correspondência, número do passaporte. Confira Idiomas compatíveis na API de Análise de Texto para obter a lista dos idiomas habilitados.

df = spark.createDataFrame([
    ("1", "en", "My SSN is 859-98-0987"),
    ("2", "en", "Your ABA number - 111000025 - is the first 9 digits in the lower left hand corner of your personal check."),
    ("3", "en", "Is 998.214.865-68 your Brazilian CPF number?")
], ["id", "language", "text"])

pii = (PII()
    .setLinkedService(linked_service_name)
    .setLanguageCol("language")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(pii.transform(df).select("text", col("replies").getItem("document").getItem("entities").alias("entities")))

Resultados esperados

Resultados esperados para informações de identificação pessoal v3.1


Limpar os recursos

Para garantir que a instância do Spark seja desligada, encerre todas as sessões conectadas (notebooks). O pool é desligado quando o tempo ocioso especificado no Pool do Apache Spark é atingido. Você também pode selecionar encerrar sessão na barra de status na parte superior direita do notebook.

Captura de tela mostrando o botão Interromper sessão na barra de status.

Próximas etapas