首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

在大数据环境中执行情感分析 (1)

在大数据环境中执行情感分析 (1)

情感分析                情感分析是利用文本分析来挖掘各种观点的数据来源的过程。通常情况下,情感分析是在从互联网和各种社交媒体平台收集的数据上执行的。政治家和政府经常利用情感分析来了解人们如何看待他们和他们的政策。
随着社交媒体的出现,人们可以从各种不同来源(比如移动设备和 Web 浏览器)捕获数据,并用不同的数据格式存储这些数据。由于社交媒体内容对于传统存储系统(比如                RDBMS、关系数据库管理系统)是非结构化的,所以我们需要一些可以处理和分析各种不同数据的工具。不过,大数据技术旨在处理不同来源、不同格式的结构化和非结构化数据。在本文中,我将介绍如何利用大数据工具来捕获数据,以便存储和处理用于情感分析的数据。
处理大数据无论何时从采用多种格式(结构化、半结构化或非结构化的)的多个来源收集数据,都需要考虑建立一个 Hadoop 集群和一个 Hadoop                分布式文件系统(HDFS)来存储数据。HDFS 提供了一种管理大数据的灵活方式:
  • 可以将您的一些分析数据移动到现有的关系数据库管理系统(RDBMS)中,比如 Oracle 或 MySQL,这样您就可以利用现有的 BI 和报告工具。
  • 可以将数据存储在 HDFS 中,供将来分析使用,例如,通过执行像 ANOVA.T 这样的测试来比较旧数据与新数据。
  • 如果只需要分析数据的影响,那么可以删除这些数据。
要了解如何设置 Hadoop 集群,请将数据导入 HDFS,然后在您的 Hadoop 环境中分析这些数据,请参阅我的其他 developerWorks 文章, ""。
检索数据并将数据存储在 HDFS 中最好的情感分析包括来自多个来源的数据。在本文中,我将介绍如何从这些来源中检索数据:
  • Twitter 提要
  • RSS 提要
  • 移动应用程序
我还将解释如何将来自不同来源的数据存储在 HDFS 中(存储在您的 Hadoop 集群中)。
从 Twitter 提要中检索数据Twitter(一种流行的微博网站)有一组 API,它们使得我们能够检索和操作 tweet。但是首先,我们需要实现 Twitter 的 OAuth                框架。简单地讲,有了这个框架,应用程序就可以代表您登录到 Twitter,无需您登录到 Twitter 网站。查看 ,其中解释了如何指派实现此操作的应用程序。在这个过程中,会为您分配一个密钥和一个密钥令牌,您的应用程序将使用它们来代表您执行身份验证。在您的应用程序完成身份验证后,您就可以使用                Twitter API 来获取 tweet。
您可以通过使用 R 或通过使用 Jaql 获取来自 Twitter 提要的数据。因为 Jaql 被设计用于处理 JSON 数据,所以它是适用于 tweet                的默认数据格式,使用 Jaql 可能更简单一些。有人可能会决定使用 R,这样做可能纯粹是因为他们自己的 R 技能。
通过使用 Jaql 检索来自 Twitter                的数据在您的应用程序完成身份验证后,我们就可以使用 Twitter API 来获取 tweet。
因为我们想要在流化模式下,所以我们的 Twitter URL 是:
url =                        "https://stream.twitter.com/1.1/statuses/filter.json?track=governmentTopic";               
使用我们正在挖掘的政府主题的名称来替换 governmentTopic。通过使用与以下代码类似的代码,我们可以用一个变量来获取 tweet:
1
2
jsonResultTweets = read(http(url));
jsonResultTweets;




在运行 Jaql 脚本时,它会提取与政府主题相关的 tweet。这些 tweet 是以 JSON 格式返回的。
如果我们想通过位置知道关于我们的政府主题的讨论范围,可以使用下面的代码片段来获取 tweet:
1
2
3
governmentTopicDiscussionByLocation = jsonResultTweets -> transform
{location: $.location,user_id: $.from_user_id_str,date_created:
$.created_at,commenttext} -> group by key = $.location




然后,我们可以使用下面的代码片段将此信息存储到您的 HDFS 中:
1
2
3
governmentTopicDiscussionByLocation Cnt ->
write(del("/user/governmentTopics/governmentTopic_1Tweets.del", schema =
schema { list_of_comma_seperated_json_fields}




其中的 list_of_comma_seperated_json_fields                    是一些逗号分隔的字段:location、from_user_id_str 和                    created_at。
这样就可以通过 Oozie 工作流来运行整个 Jaql 脚本,代码可能类似于以下代码示例:
1
2
3
4
5
6
7
8
9
10
url = "https://stream.twitter.com/1.1/statuses/filter.json?track=governmentTopic";
jsonResultTweets = read(http(url));
jsonResultTweets;
governmentTopicDiscussionByLocation = jsonResultTweets ->
transform {location: $.location,user_id: $.from_user_id_str,user_name:
  $.user.name,user_location: $.user.location,date_created: $.created_at,comment: $.text} ->
group by key = $.location
governmentTopicDiscussionByLocation ->
write(del("/user/governmentTopics/governmentTopic_1Tweets.del",
  schema = schema {location,user_id,user_name,user_location,date_created,comment}




transform 方法将会清除数据,而 write 方法会将数据保存到 HDFS。要处理流数据或动态数据,需要将此脚本与 Flume 整合,Flume 是 Apache                Hadoop 生态系统中的另一个大数据工具。(您可以通过阅读了解有关此 developerWorks 文章中的 Flume 的更多信息,""。)
通过使用 R 从 Twitter                中检索数据要使用 R 检索 tweet,需要在您的系统上安装某些软件包。虽然我们可以使用 RStudio,但下面这些步骤显示了如何设置和使用 R 控制台。
在 Ubuntu 电脑上,我完成了下面这些步骤来安装必要的 R 软件包:
  • 安装这些软件包:
    1
    2
    3
    4
    5
    libcurl4-gnutls-dev
    libcurl4-nss-dev
    libcurl4-openssl-dev
    r-base r-base-dev
    r-cran-rjson




  • 打开 R 控制台,并运行这些命令来安装这些包来访问                        Twitter:
    1
    2
    3
    install.packages(“twitteR”)
    install.packages(“ROAuth”)
    install.packages(“RCurl”)




  • 将这些库加载到您的 R 工作区中:                        
    1
    2
    3
    4
    rm(list=ls())
    library(twitteR)
    library(ROAuth)
    library(RCurl)




现在,我们可以用下面的 R 脚本对 Twitter 进行身份验证:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
download.file(url="http://curl.haxx.se/ca/cacert.pem",destfile="cacert.pem")
requestURL <- "https://api.twitter.com/oauth/request_token"
accessURL <- "https://api.twitter.com/oauth/access_token"
authURL <- "https://api.twitter.com/oauth/authorize"
consumerKey <- myConsumerKeyFromTwitter
consumerSecret <- myConsumerSeccretFromTwitter
myCred <- OAuthFactory$new(consumerKey=consumerKey,
                             consumerSecret=consumerSecret,
                             requestURL=requestURL,
                             accessURL=accessURL,
                             authURL=authURL)

accessToken <- myAccessTokenFromTwitter
accessSecret <- myAccessSecretFromTwitter

setup_twitter_oauth(consumerKey,consumerSecret,accessToken,accessSecret)




然后,我们可以使用下面的代码片段来获取 tweet:
1
govt_sentiment_data <- searchTwitter("#keyWord",since={last_date_pulled}




keyWord 是您要分析的政府主题,last_date_pulled 是您最后一次获取 tweet 的日期。
如果您想要按固定时间间隔自动流化 Twitter 数据和拉取数据,可以使用以下代码片段替换前面的代码:
1
2
govt_sentiment_data <- filterStream( file="tweets_rstats.json",
track="#keyWord", timeout=3600, oauth=myCred)




我们可以用下面的 R 脚本来清理数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
govt_sentiment_data_txt = govt_sentiment_data$text
# remove retweet entities
govt_sentiment_data_txt = gsub(“(RT|via)((?:\\b\\W*@\\w+)+)”, “”, tweet_txt)
# remove at people
govt_sentiment_data_txt = gsub(“@\\w+”, “”, tweet_txt)
# remove punctuation
govt_sentiment_data_txt = gsub(“[[:punct:]]”, “”, tweet_txt)
# remove numbers
govt_sentiment_data_txt = gsub(“[[:digit:]]”, “”, tweet_txt)
# remove html links
govt_sentiment_data_txt = gsub(“http\\w+”, “”, tweet_txt)
# remove unnecessary spaces
govt_sentiment_data_txt = gsub(“[ \t]{2,}”, “”, tweet_txt)
govt_sentiment_data_txt = gsub(“^\\s+|\\s+$”, “”, tweet_txt)
govt_sentiment_data_txt=gsub(“[^0-9a-zA-Z ,./?><:;’~`!@#&*’]”,””, tweet_txt)




最后,要将已清理的数据保存到您的 HDFS,可以使用下面的代码片段:
1
2
3
4
hdfsFile <- hdfs.file("/tmp/govt_sentiment_data.txt", "w")
hdfs.write(govt_sentiment_data_txt, hdfsFile)
hdfs.close(hdfsFile)
write(govt_sentiment_data, "govt_sentiment_data.txt")

返回列表