1

我正在尝试进行情绪分析并在 Google Visualization 上投射价值观。

我正在使用我的 java 程序调用这个 python 脚本

代码片段(用于 AlchemyAPI)

https://github.com/AlchemyAPI/alchemyapi-twitter-python

我写了一个java程序来调用python脚本。

import java.io.*;
public class twitmain {
    public String twittersentiment(String[] args) throws IOException {
        // set up the command and parameter
        String pythonScriptPath = "/twitter/analyze.py"; // I'm calling AlchemyAPI                                          
        String[] cmd = new String[2 + args.length];
        cmd[0] = "C:\\Python27\\python.exe";
        cmd[1] = pythonScriptPath;
        for (int i = 0; i < args.length; i++) {
            cmd[i + 2] = args[i];
        }
        // create runtime to execute external command
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec(cmd);

        // retrieve output from python script
        BufferedReader bfr = new BufferedReader(new InputStreamReader(
                pr.getInputStream()));
        String line = ""; int i=0;
        while ((line = bfr.readLine()) != null) {
            System.out.println(line);
        }
        return line;
    }
}

输出: 我收到如下推文和最终统计数据:

##########################################################
#    The Tweets                                          #
##########################################################

@uDiZnoGouD
Date: Mon Apr 07 05:07:19 +0000 2014
To enjoy in case you win!
To help you sulk in case you loose!
#IndiavsSriLanka #T20final http://t.co/hRAsIa19zD
Document Sentiment: positive (Score: 0.261738)


##########################################################
#    The Stats                                           #
##########################################################
Document-Level Sentiment:
Positive: 3 (60.00%)
Negative: 1 (20.00%)
Neutral: 1 (20.00%)
Total: 5 (100.00%)

问题(问题):

我如何只抓取正面、负面、中性并将其发送到 Google 可视化?(即制作一个JSON?)

任何帮助将不胜感激。

4

1 回答 1

1

射击,我刚刚意识到你在问相反的方式。用 Java 编写解析应用程序。

无论如何,想法是相同的,但语言会有所不同。但这也意味着您可以访问 python 应用程序的源代码,因此您可以在那里挖掘,并且可以将结果对象作为JSON对象转储到控制台中。

python中的原始答案:

您应该识别线的类型并解析它们并自己构建JSON对象。

喜欢每个line

import re

json_obj = {}
pattern = "^(\w+): (\d) \((\d{2}\.\d{2}%)\)$"
match = re.match(pattern, line)

if match:
    prop_obj = { "value": match[2], "percent": match[3] }
    json_obj[match[1]] = prop_obj

这将改变这条线:

Positive: 3 (60.00%)

进入

{
     Positive: {
         value: "3"
         percent: "60.00%"
     }
}

进一步考虑这个想法,解析规则应该是一个-s 作为 key pattern- extractor_methodvalues的字典

var parse_rules = {
    "^(\w+): (\d) \((\d{2}\.\d{2}%)\)$": 
         def (matches): 
            return { match[1]: { "value": match[2], "percent": match[3] }}
    , ...
}

对于每一个line,您将针对解析规则进行测试并在找到匹配项时执行方法,并将方法的结果合并到JSON结果对象中

这是很多工作(取决于Java应用程序的复杂性,但如果Java应用程序无法修改,我会这样做。

正则表达式解释和示例

于 2014-04-10T08:18:26.977 回答