我正在尝试进行情绪分析并在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?)
任何帮助都非常赞赏。
答案 0 :(得分:1)
无论如何,这个想法是一样的,但语言会有所不同。
但这也意味着您可以访问python应用程序的源代码,因此您可以在那里挖掘,并且可以将结果对象作为JSON
对象转储到控制台中。
您应该识别行的类型并解析它们并自己构造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 强>