在本教程中,您将学习如何以积极的情绪评分来丰富 COVID19 推文数据。您将利用 PySpark 和认知服务,了解增强分析。

什么是增强分析?

根据 Gartner 的报告 增强分析是利用机器学习和 AI 等技术来帮助数据准备、洞察生成。它的主要目标是帮助更多的人从数据中获取价值,以简单、对话的方式生成见解。在我们的示例中,我们从一条微博中提取积极情绪评分,以帮助理解对 COVID-19 的总体情绪。

什么是皮斯帕克?

PySpark 是我们使用 Apache Spark 和 Python 的框架。在此处了解有关它 了解更多信息

什么是情绪分析?

情绪分析是 NLP – 自然语言处理用法的一部分,它结合了文本分析、计算语言学,更系统地研究情感状态和主观信息(如推文)。在我们的示例中,我们将了解如何从 COVID-19 推文文本中提取积极的情绪分数。在本教程中,您将利用 Azure 认知服务,它为我们提供了开箱即用的情绪分析功能。使用它时,我们可以利用客户端 TextAnalyticsClient 库或 利用 REST API。今天,您将使用 REST API,因为它为我们提供了更大的灵活性。

先决条件

  • 带笔记本的 Apache Spark 环境,可以是 Databricks,或者您可以通过运行下一个命令来启动具有 docker 的本地环境: docker run -it -p 8888:8888 jupyter/pyspark-notebook
  • Azure 免费 帐户
  • 下载卡格尔 COVID-19 推文数据
  • 认知服务免费帐户(查看下图)

Sentiment for Tweets package

一步一步教程 + 完整数据管道:

在此分步教程中,您将学习如何使用 PySpark 加载数据、创建用户定义一个函数以连接到情绪分析 API、添加情绪数据并将所有内容保存到 Parquet 格式文件中。

现在,您需要将数据提取到 Apache Spark 环境,而不是数据砖或 PySpark jupyter 笔记本。对于数据砖使用 这个,对于 juypter 使用 这个

对于这两种情况, file_location = "/FileStore/tables/covid19_tweets.csv" 您需要确保记下它。

使用 PySpark 加载数据

这是将数据加载到 PySpark DataFrame 对象时,spark 将尝试直接从 CSV 推断架构。您会注意到的一点是,在使用 CSV 并推断架构时,Spark 通常会将大多数列称为 String 格式。

Python

 

x
1
 
1
读取\

2

3
格式"com. databricks. spark. csv") 。\
4

5
选项("标题""true")。\
6

7
选项("推断""真实")。加载"/文件存储/表/covid19_tweets.csv"

提供更准确的架构,我们的数据:

在这里,您可以定义 expectedSchema 和 稍后转换数据以匹配它。您将使用 StructType  StructField 和 哪些是 Spark SQL 数据类型,可帮助您定义架构apache.org/docs/latest/api/python/_modules/pyspark/sql/dataframe.html"rel="noopener norefer"目标="_blank">DataFrame,根据您提供它的名称和值使用所需的列。

Python

 

x
1
19
 
1
sql.类型导入 *

2
pysparksql.函数导入*
3

4
# 创建预期架构
5
预期学型结构类型(*
6
结构场"user_name"字符串类型true),
7
结构场"user_location"字符串类型true),
8
结构场("user_created",字符串类型(), True),

10
结构场"user_followers"浮动类型true),
11
结构场"user_friends"浮子类型true
12
结构场"user_favourites"浮子类型true
13
结构场"user_verified"布尔类型真实),
14
结构场"日期"字符串类型True),
15
结构字段"文本"字符串类型True),
16
结构场("源",字符串类型(),True True

18
结构场"is_retweet"布尔类型
19
])

现在,让我们使用正确的架构创建新的数据帧!

请注意,将新架构分配给 inputDF ,这意味着您将无法再访问旧 DataFrame。

Python

 

x
1
16
 
1
输入 DF = 输入 DF |

4
  .用哥伦布("user_name"输入DF="user_name"= 。强制转换("字符串"|
5
  .用哥伦布 ("user_location""user_location"输入DF="user_location"= 。强制转换("字符串"|
6
  .用哥伦布 ("user_description""user_description"输入DF="user_description"= 。强制转换("字符串"|
7
  .用Column("user_created""user_created"输入DF="user_created"=。强制转换("字符串"|
8
  .用哥伦布 ("user_followers""user_followers"输入DF="user_followers"|

1px;"> .用哥伦布 ("user_friends", inputDF="user_friends"= 。"user_friends"铸造("浮动") |

10
  .用哥伦布("user_favourites"输入DF="user_favourites"= 。铸造("浮动"|
11
  .用哥伦布("user_verified"输入DF="user_verified"= 。铸造("布尔"|
12
  .用哥伦布 ("日期" 输入DF="日期"= 。强制转换("字符串"|
13
  .用哥伦布 ("文本" 输入DF="文本"= 。强制转换("字符串"|
14
  .与哥伦布 ("哈希标签" 输入DF="哈希标签"|

1px;"> .用哥伦布 ("源", inputDF+"源"+.强制转换("字符串") |

16
  .用哥伦布("is_retweet"输入DF="is_retweet"= 。铸造("布尔"|

使用 REST API 连接到情绪分析

对于连接和消费情绪分析服务,我们需要提供情绪分析终结点和访问键。两者都可以在 中找到。

查找终结点,它可以来自"概述"部分,也可以来自"键"和"终结点"。

Copying the endpoint

查找访问密钥:

Copying API key

找到密钥和终结点后,对于生产和团队中的工作,您需要将它们存储在安全的地方,尝试在代码中的可用文本中提供保存密钥,这不安全。你最终可能会 因为黑客挖掘你的云环境而获取比特币机密功能。这是如何设置它

如果您在本地使用 juypter PySpark 笔记本,可以使用纯文本,但请记住在将代码提交到 git 存储库时将其删除。

这是如何使用 dbutils,提供范围和密钥名称。

在此代码片段中,作用域名为 - mle2ebigdatakv,密钥的名称为 sentimentEndpoint sentimentAccessKeys

Python

 

x
1
 
1
# provide endpoint and key 
2
秘密获取范围="mle2ebigdatakv"="情绪点")

3
情绪访问键dbutils秘密获取范围="mle2ebigdatakv"="情绪访问键")

让我们构建连接本身,情绪分析预期会收到像对象一样的文档,为此您将使用 python 字典,并将使用 ID 构建文档请求。每个请求的 ID 必须是唯一的。

请注意, language_api_url 这里是您构建认知分析请求的地方,要求使用版本 3.0 进行文本分析。

Python

 

x
1
14
导入请求

2
# 使用其他应用程序生成其余 API language_api_url
3
language_api_url情绪结束点="/文本/分析/v3.0/情绪"
4
标题 = "Ocp - apim - 订阅密钥"情绪访问键»
5

6
defconstractDoc 请求文本):
7
文档请求
8
文档
9
文档="文本"= 文本

11
文档请求="文档"= [文档]
12
返回文档请求

尝试使用一些文本运行它,你会看到响应是一致的得分情绪和 positive, netural 负数。

响应的结构如下:

Json

 

x
1
29
 
1
>"文件": |

3
  {
4
"id""1"
5
"情感""积极",
6
"信心分数": |
7
"正"1.0
8
"中性"0.0
9
"负"0

1px;">           },

11
"句子": |
12
  {
13
"情感""积极",
14
"信心分数": |
15
"正"1.0
16
"中性"0.0
17

18
  },
19
"偏移"0
20
"长度"66
21
"文本""covid19 一点也不可怕, 它实际上不是茁壮成长的 oppurtiniry"
22
  }
23
  ],
24
"警告": |
25
    ],

27
"错误": |,
28
"模型版本""2020-04-01"
29
}

让我们构建一个 python 功能,以提取情绪,并通过 UDF(用户定义的函数)api 向 PySpark 注册函数。

您需要确保实际从 REST API 获取文档,并且还可以保护您的功能,使其无法向情绪分析服务发送空文本,因为它将在错误中解决。

这是您将所有内容连接在一起:

Python

 

1
pysparksql.函数导入udf
2
3
• 从返回的 json 文档中提取情绪
4
def提取情感 (文档情绪类型):
5
返回 0.0

7
返回浮动文档="文档"=0="信心分数"= 情绪类型=
8
9
#function for extracting the positive sentiment 
10
def获取积极情感 (文本):
11
如果布尔文本.形错误
12
返回0.0
13
提取( 构造Doc请求 (文本 ),"正数")
14
 #创建 udf 函数指针

17
get_positive_sentimentudf获取积极情感字符串类型())
18
19
* 使用新列重应正情绪得分创建新 DF
20
enrichedDF_positiveSentiment输入 DF用铝 (positive_sentiment''positive_sentiment'get_positive_sentiment(输入流+"文本"+))

在丰富数据后,将其保存到存储以供将来需要非常重要,您将将其保存为镶木地板格式,从而保持架构完好无损。Apache Parquet 格式旨在与基于行的文件(如 CSV)相比,实现高效的列存储,因为它允许以后更好地压缩和更快地扫描列的子集。Vs CSV,其中我们必须读取整个文件和列,只需查询其中一个子集。

这就是 Pyspark 的完成:

Python

 

x
1
 
1
>"内错误":"代码":"空请求","                                  消息":"请求正文必须存在"。

3
                         },           
4
"消息""无效请求"|
5
}

注意错误消息,当您看到此类错误时,可能是您没有使用认知服务的报价。如果您了解该服务并试用它,最好使用几个示例而不是整个数据集,因为在免费套餐中,您可能用完了配额,因为它适合多达 5K 个事务。

就是这样!

本教程将介绍如何利用现有的 REST API 服务来丰富数据,以用于未来的工作和增强分析。

要了解更多信息,请查看 GitHub 存储库。很高兴接受您的问题, 并在推特上 跟进您

Comments are closed.