我是Processing的新手,我正在尝试创建一个交互式信息图,其中的背景颜色会根据关于事件的最新推文是否包含正面或负面单词而变化。正面的推文背景为黄色,负面的推文则为红色。
我已经启动了这个项目,以便在控制台中显示最新的推文中提到"wembley"(事件)。
我一直在思考如何在控制台数据中打印的文本中找到积极和消极的单词。
为了做到这一点,我设置了一个字符串数组,列出我想触发背景颜色变化的所有阳性和阴性单词:
String [] positiveWords = new String[6];
{
positiveWords [0] = "great";
positiveWords [1] = "love";
positiveWords [2] = "amazing";
positiveWords [3] = "fun";
positiveWords [4] = "brilliant";
positiveWords [5] = "good";
}
String [] negativeWords = new String[4];
{
negativeWords [0] = "bad";
negativeWords [1] = "hate";
negativeWords [2] = "terrible";
negativeWords [3] = "boring";
}
然后我在void draw()中放入一个if语句
if (console.log = positiveWords) {
background (0, 100, 100);
}
if (console.log = negativeWords) {
background (255, 0, 0);
}
这将返回错误'应为LPAREN,找到'console'
几天来,我一直在四处寻找答案,但我不知所措!任何帮助都将不胜感激!非常感谢。
完整的源代码在这里:
import com.temboo.core.*;
import com.temboo.Library.Twitter.Search.*;
//string array to identify positive words
String [] positiveWords = new String[6];
{
positiveWords [0] = "great";
positiveWords [1] = "love";
positiveWords [2] = "amazing";
positiveWords [3] = "fun";
positiveWords [4] = "brilliant";
positiveWords [5] = "good";
}
//string array to identify negative words
String [] negativeWords = new String[4];
{
negativeWords [0] = "bad";
negativeWords [1] = "hate";
negativeWords [2] = "terrible";
negativeWords [3] = "boring";
}
// Create a session using your Temboo account application details
TembooSession session = new TembooSession("userName", "appName", "******");
// The name of your Temboo Twitter Profile
String twitterProfile = "Twittersearch1";
// Declare font and text strings
PFont fontTweet, fontInstructions;
String searchText, tweetText, instructionText;
// Create a JSON object to store the search results
JSONObject searchResults;
void setup() {
size(700, 350);
// Set a search term and instructions
searchText = "wembley";
instructionText = "Press any key to load a new tweet about '"+searchText+"'";
// Display initial tweet
runTweetsChoreo(); // Run the Tweets Choreo function
getTweetFromJSON(); // Parse the JSON response
displayText(); // Display the response
}
void draw() {
if (keyPressed) {
runTweetsChoreo(); // Run the Tweets Choreo function
getTweetFromJSON(); // Parse the JSON response
displayText(); // Display the response
}
//if statements to change the background color
if (tweetsResults = positiveWords) {
background (0, 100, 100);
}
if (tweetsResults = negativeWords) {
background (255, 0, 0);
}
}
void runTweetsChoreo() {
// Create the Choreo object using your Temboo session
Tweets tweetsChoreo = new Tweets(session);
// Set Profile
tweetsChoreo.setCredential(twitterProfile);
// Set inputs
tweetsChoreo.setQuery(searchText);
// Run the Choreo and store the results
TweetsResultSet tweetsResults = tweetsChoreo.run();
// Store results in a JSON object
searchResults = parseJSONObject(tweetsResults.getResponse());
}
void getTweetFromJSON() {
JSONArray statuses = searchResults.getJSONArray("statuses"); // Create a JSON array of the Twitter statuses in the object
JSONObject tweet = statuses.getJSONObject(0); // Grab the first tweet and put it in a JSON object
tweetText = tweet.getString("text"); // Pull the tweet text from tweet JSON object
}
void displayText() {
println(tweetText); // Print tweet to console
}
首先,不要试图将文本存储在控制台中。控制台主要用于调试。
相反,将文本存储在一个变量中。实际上,您已经在tweetText
变量中执行了此操作。
接下来,将ArrayLists
用于positiveWords
和negativeWords
。这将使搜索它们变得更容易。
然后使用split()
函数将tweetText
分解为单独的单词。检查这些单词是否都在你的ArrayLists
中。
把它放在一起,可能看起来像这样:
void checkTweetText(){
boolean containsPositive = false;
boolean containsNegative = false;
String[] words = split(tweetText, " ");
for(String word : words){
if(positiveWords.contains(word)){
containsPositive = true;
}
if(negativeWords.contains(word)){
containsNegative = true;
}
}
if(containsPositive){
//do something
}
if(containsNegative){
//do something
}
}
注意,你可能需要在拆分文本时加入更多的逻辑——你必须考虑标点符号等。
此外,请注意,这是一个相当宽泛的问题。很难回答一般的"我该怎么做"类型的问题。回答诸如"我试过X,期望是Y,但却得到了Z"之类的问题要容易得多。试着把你的问题分解成更小的步骤——你能创建一个单独的草图,简单地打印出一个硬编码单词是好是坏吗?那么你能对一个硬编码的句子做同样的处理吗?从小处着手,逐步构建,而不是试图一次承担整个项目。