从System.out.println获取JSON

时间:2014-04-10 08:04:38

标签: java python json sentiment-analysis alchemyapi

我正在尝试进行情绪分析并在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 Visualization? (即制作JSON?)

任何帮助都非常赞赏。

1 个答案:

答案 0 :(得分: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%"
     }
}

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

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

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

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

<强> Regex explanation & example