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

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

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

从 RSS                提要检索数据 除了 tweet 之外,我们还想从新闻文章中收集个人意见或观点。对于这种类型的数据,建议您组合使用 Java 和 Rome 工具从 RSS 提要中获取数据。Rome                是一个 Java 库,用于访问和操纵网络上的新闻提要。
在本示例中,我们获得了有关新闻文章的以下信息:标题、链接和描述。然后,我们从这些数据点提取我们所需的信息。
要确定将要使用的新闻提要,需要使用某种形式的网页排名                技术。该技术被用在搜索算法中,用于确定某一事项在其引用和普及方面的相关性。基本原理是,被外部实体点击或引用的几率越高,优先级就越高,因此就会出现在搜索结果的顶部。
下面的 Java 代码标识了一些新闻提要和使用网页排名,以确定它们与我们的数据相关:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
private static void getFeeds(String newsFeedUrlLink){

File f = new File(“newsFeeds.txt”);
        boolean ok = false;
            try {
                URL feedUrl = new URL(newsFeedUrlLink);
                SyndFeedInput input = new SyndFeedInput();
                InputSource source = new InputSource(feedUrl.openStream());
                SyndFeed feed = input.build(source);
                for (Iterator i = feed.getEntries().iterator(); i.hasNext();) {
                   SyndEntry entry = (SyndEntry) i.next();
         writeToFile(f,entry);
                       }
                ok = true;

            }
            catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("ERROR: "+ex.getMessage());

            }
        if (!ok) {
            System.out.println();
            System.out.println("FeedReader reads and prints any RSS/Atom feed type.");
            System.out.println("The first parameter must be the URL of the feed to read.");
            System.out.println();

        }

    }

private static void writeToFile(File f, SyndEntry entry) throws IOException {
        FileWriter fw = new FileWriter(f.getName(),true);
           BufferedWriter bw = new BufferedWriter(fw);
           bw.write(entry.getTitle()+”\n”);
           bw.close();

    }




接下来,我们可以使用下面的代码片段将数据存储在我们使用 Twitter 数据创建的 HDFS 文件中。要将此数据添加到我们使用 Twitter 数据创建的 HDFS                文件中,必须修改 hdfs-site.xml 文件中的 dfs.support.append 属性值,因为 HDFS                默认情况下不允许将数据添加到文件。
1
2
3
4
5
6
7
8
9
mydata <- readLines("newsFeeds.txt")
myfile <-  hdfs.file("/tmp/govt_sentiment_data.txt", "r")
dfserialized <- hdfs.read(myfile)
df <- unserialize(dfserialized)
hdfs.close(myfile)

//write(mydata, file = "/tmp/govt_sentiment_data.txt",append = TRUE)
hdfs.write(mydata, file = "/tmp/govt_sentiment_data.txt",append = TRUE)
government_sentiment_data <- read.hdfs(“/tmp/govt_sentiment_data.txt”)




从移动应用程序中检索数据除了 Twitter 数据和 RSS                提要数据之外,我们还可以从包含个人意见和观点的移动应用程序中收集数据。在本示例中,我假设您创建了一个简单的移动应用程序,该应用程序已安装在允许用户提供关于政府主题或政策的意见的移动设备上。可以将                J2ME 应用程序上传到某个 WAP 服务器,移动设备(甚至是像诺基亚 3310 这样的老款设备)可以从该服务器下载和安装应用程序。用户提供的信息被发送回一个                RDBMS 并进行储存,以供将来分析使用。
您可以使用 Sqoop 将数据从 RDBMS 服务器移动到我们的 Hadoop 集群。在 Hadoop 集群上运行 sqoop 脚本的以下行:
1
2
sqoop import --options-file dbCredentials.txt --connect
jdbc:mysql://217.8.156.117/govt_policy_app --table opinions –-target-dir /tmp \ --append




--append 标记告诉 Sqoop 将导入的数据添加到我们已经从以前的数据来源获得的数据集中,该数据集通过                    --target-dir 标记来指示。
将已收集的数据合并成一个数据源在收集了来自 Twitter 的数据(通过使用 Jaql 或 R)、来自 RSS 提要的数据(通过使用 Java)和来自移动应用程序的数据(通过使用                Sqoop)后,我们会将数据添加到单个 HDFS 文件中。可以通过实现了 Oozie                工作流引擎来自动化这些脚本,并设置命令来按照某个时间间隔运行脚本,或者作为触发事件发生的结果。有关如何设置 Sqoop 和 Oozie 的更多信息,请参阅我的其他                developerWorks 文章,""。
您可以增强您的 Oozie 工作流程,以便实现减少重复数据的限制,重复数据是整合来自不同来源的数据所导致的。例如,您可能会限制每个话题一个 Twitter                句柄,在您的数据集中,每个观点一个移动号码。
返回列表