Partilhar via


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

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

Este tutorial demonstra o uso da análise de texto com SynapseML para:

  • Detetar 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 diferentes entidades no texto e categorizá-las em classes ou tipos predefinidos
  • Identificar e redigir entidades sensíveis em um determinado texto

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

Pré-requisitos

Começar agora

Abra o Synapse Studio e crie um novo bloco de anotações. Para começar, importe SynapseML.

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

Configurar análise de texto

Use a análise de texto vinculado que você configurou nas etapas de pré-configuração.

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

Sentimento do texto

A Análise de Sentimento de Texto fornece uma maneira de detetar os rótulos de sentimento (como "negativo", "neutro" e "positivo") e pontuações de confiança no nível da frase e do documento. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de idiomas habilitados.


# Create a dataframe that's tied to it's column names
df = spark.createDataFrame([
  ("I am so happy today, it's 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

texto sentimento
Estou tão feliz hoje, está sol! positivo
Estou frustrado com este tráfego na hora de ponta negativo
Os serviços de IA do Azure no spark aint bad neutro

Detetor de Idiomas

O Language Detetor avalia a entrada de texto para cada documento e retorna identificadores de idioma com uma pontuação que indica a força da análise. Esta funcionalidade é útil para arquivos de conteúdo que recolhem texto arbitrário quando o idioma é desconhecido. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de 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 detetor de idiomas V3.1

Detetor de Entidades

O Detetor de Entidades retorna uma lista de entidades reconhecidas com links para uma base de dados de conhecimento conhecida. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de 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 detetor de entidades v3.1


Extrator de frases-chave

A Extração de Frase-Chave avalia texto não estruturado e retorna uma lista de frases-chave. Esta funcionalidade é útil se precisar de identificar rapidamente os pontos principais numa coleção de documentos. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de 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

texto keyPhrases
Olá, mundo. Este é um texto de entrada que eu adoro. "["Olá mundo","texto de entrada"]"
Bonjour tout le monde "["Bonjour","monde"]"
La carretera estaba atascada. Había mucho tráfico el día de ayer. "["mucho tráfico","día","carretera","ayer"]"

Reconhecimento de Entidades Nomeadas (NER)

Named Entity Recognition (NER) é a capacidade de identificar diferentes entidades no texto e categorizá-las em classes ou tipos predefinidos, tais como: pessoa, local, evento, produto e organização. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de 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


Informações de identificação pessoal (PII) V3.1

O recurso PII faz parte do NER e pode identificar e redigir entidades sensíveis em texto que estão associadas a uma pessoa individual, tais como: número de telefone, endereço de e-mail, endereço postal, número de passaporte. Consulte Idiomas suportados na API de Análise de Texto para obter a lista de 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 pessoais identificáveis v3.1


Clean up resources (Limpar recursos)

Para garantir que a instância do Spark seja desligada, encerre todas as sessões conectadas (blocos de anotações). O pool é desligado quando o tempo ocioso especificado no pool do Apache Spark é atingido. Também pode selecionar Parar sessão na barra de estado no canto superior direito do bloco de notas.

Captura de ecrã a mostrar o botão Parar sessão na barra de estado.