Tutorial: Análise de Texto com Serviço Cognitivo

Análise de Texto é um Serviço Cognitivo Azure que lhe permite realizar a mineração de texto e análise de texto com funcionalidades de Processamento de Linguagem Natural (NLP). Neste tutorial, você vai aprender a usar Análise de Texto para analisar texto não estruturado em Azure Synapse Analytics.

Este tutorial demonstra a utilização de análises de texto com SynapseML para:

  • Detetar rótulos de sentimento ao nível da frase ou do documento
  • Identificar o idioma para uma determinada entrada de texto
  • Reconhecer entidades de um texto com ligações a um base de dados de conhecimento bem conhecido
  • Extrair fases-chave de um texto
  • Identificar diferentes entidades em texto e categorizá-las em classes ou tipos pré-definidos
  • Identificar e redigir entidades sensíveis num determinado texto

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

Pré-requisitos

Introdução

Abra Synapse Studio e crie um novo caderno. Para começar, importe SynapseML.

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

Configure a análise de texto

Utilize a análise de texto ligada configurada nos passos de pré-configuração .

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

Sentimento de texto

A Análise do Sentimento de Texto fornece uma forma de detetar os rótulos de sentimento (tais como "negativo", "neutro" e "positivo") e pontuações de confiança a nível da frase e do documento. Consulte as línguas suportadas em Análise de Texto API para a lista de línguas ativadas.

V2


# 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 cognitive services on spark aint bad", "en-US"),
], ["text", "language"])

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

# Show the results of your text query in a table format
display(sentimentv2.transform(df).select("text", col("sentiment")[0].getItem("score").alias("positive score")))

Resultados esperados

texto pontuação positiva
Estou tão feliz hoje, está ensolarado! 0.99511755
Estou frustrado com este tráfego de hora de ponta 0.007274598
Os serviços cognitivos na faísca aint mau 0.9144157

V3.1


# 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 cognitive 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
display(sentiment.transform(df).select("text", col("sentiment")[0].getItem("sentiment").alias("sentiment")))

Resultados esperados

texto sentimento
Estou tão feliz hoje, está ensolarado! positivo
Estou frustrado com este tráfego de hora de ponta negativo
Os serviços cognitivos na faísca aint mau positivo

Detetor de Línguas

O Detetor de Idiomas avalia a entrada de texto para cada documento e devolve os identificadores linguísticos 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 as línguas suportadas em Análise de Texto API para a lista de línguas ativadas.

V2

# 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
languagev2 = (LanguageDetectorV2()
    .setLinkedService(linked_service_name)
    .setTextCol("text")
    .setOutputCol("language")
    .setErrorCol("error"))

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

Resultados esperados

Expected results for language detector v2

V3.1

# 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

Expected results for language detector V3.1

Detetor de Entidades

O Detetor de Entidades devolve uma lista de entidades reconhecidas com ligações a um base de dados de conhecimento bem conhecido. Consulte as línguas suportadas em Análise de Texto API para a lista de línguas ativadas.

V2

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

entityv2 = (EntityDetectorV2()
    .setLinkedService(linked_service_name)
    .setLanguage("en")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(entityv2.transform(df).select("if", "text", col("replies")[0].getItem("entities").alias("entities")))

Resultados esperados

Expected results for entity detector v2

V3.1

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")[0].getItem("entities").alias("entities")))

Resultados esperados

Expected results for entity detector v3.1


Extrator de frase chave

A Extração da Frase-Chave avalia texto não estruturado e devolve uma lista de frases-chave. Esta funcionalidade é útil se precisar de identificar rapidamente os pontos principais numa coleção de documentos. Consulte as línguas suportadas em Análise de Texto API para a lista de línguas ativadas.

V2

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"])

keyPhrasesv2 = (KeyPhraseExtractorV2()
    .setLinkedService(linked_service_name)
    .setLanguageCol("lang")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(keyPhrasesv2.transform(df).select("text", col("replies")[0].getItem("keyPhrases").alias("keyPhrases")))

Resultados esperados

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

V3.1

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")[0].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)

Denominado Reconhecimento de Entidade (NER) é a capacidade de identificar diferentes entidades em texto e categorizá-las em classes ou tipos pré-definidos como: pessoa, localização, evento, produto e organização. Consulte as línguas suportadas em Análise de Texto API para a lista de línguas ativadas.

V2

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"])

nerv2 = (NERV2()
    .setLinkedService(linked_service_name)
    .setLanguageCol("language")
    .setOutputCol("replies")
    .setErrorCol("error"))

display(nerv2.transform(df).select("text", col("replies")[0].getItem("entities").alias("entities")))

Resultados esperados

Expected results for named entity recognition v2

V3.1

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")[0].getItem("entities").alias("entities")))

Resultados esperados

Expected results for named entity recognition v3.1


Informação Pessoalmente Identificável (PII) V3.1

A funcionalidade PII faz parte do NER e pode identificar e redigir entidades sensíveis em texto que estejam associadas a uma pessoa individual, tais como: número de telefone, endereço de e-mail, endereço de correio eletrónico, número de passaporte. Consulte as línguas suportadas em Análise de Texto API para a lista de línguas ativadas.

V3.1

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")[0].getItem("entities").alias("entities")))

Resultados esperados

Expected results for personal identifiable information v3.1


Limpar os recursos

Para garantir que a instância Spark seja encerrada, termine quaisquer sessões ligadas (cadernos). A piscina fecha quando o tempo de marcha lenta especificado na piscina Apache Spark é atingido. Também pode selecionar a sessão de paragem da barra de estado no canto superior direito do caderno.

Screenshot showing the Stop session button on the status bar.

Passos seguintes