Concept: I wanted to explore how people look at profanity: what does it mean, imply, etc. I am personally of the opinion that so-called “dirty” words are essentially verbal punctuation. I took text and replaced all the profanity with exclamation marks. In addition, the color of the text is related to the amount of profanity in the original text, while the size is based on a “rage meter”: how many of those words are in all caps. I wanted to react to peoples’ notions of vulgar language being unnecessary, or a “crutch” that hinders intellectual expression. My piece essentially shows that the emotion involved is not offensive, nor is peppering one’s words with essentially nonsense characters. I tried to portray the idea that words are just words and that, stripped of the personal biases people may have against certain words, “swearing” isn’t a big deal.
Process: I grabbed a few, then looped through word by word doing my analysis with RiTa. I only had to detect if a word counted in my list of “dirty” words, replace it, and keep track of some numbers to calculate the color and size afterward.
Results: I originally wanted to use tweets, but “angry” generally returns things about angry birds, so I went online to find profanity-laden short jokes. The results were interesting:
Most of the jokes are still sort of funny, but lose the emotional impact. The color helps give the reader a bit of the emotion behind the speaking. I think this would have worked better with tweets or some less formal form of speech– the rage meter barely fired.
Code:
(warning, due to the nature of this piece, code contains strong language.)
//Shaagnik Mukherji
import rita.*;
void setup() {
size(1000, 200);
PFont font = loadFont("BellMT-48.vlw");
//edit with riTa
RiString tweetText = new RiString("STRING");
String newText=" ";
// RiString rs = new RiString(this);
int wordCount = tweetText.getWordCount();
int dirtyCount = 0;
int rageLevel = 0;
for (int x=0;x<wordCount;x++) {
RiString word = new RiString(tweetText.getWordAt(x));
if (word.equalsIgnoreCase("fuck")||word.contains("fuck")||
word.equalsIgnoreCase("damn")||word.contains("damn")||
word.equalsIgnoreCase("shit")||word.contains("shit")||
word.equalsIgnoreCase("bitch")||word.contains("bitch")||
word.equalsIgnoreCase("asshole")||word.contains("asshole")||
word.equalsIgnoreCase("poop")||word.contains("poop")) {
newText+=" !";
dirtyCount++;
}
else {
newText+= " "+word.toString();
}
if (RiTa.isAllCaps(word.toString()))
rageLevel++;
}
textFont(font, (20+rageLevel*10));
System.out.println(dirtyCount);
System.out.println(wordCount);
RiText rt= new RiText(this, newText, 10, 80);
float tw=rt.textWidth();
size((int)tw+40, 200);
float degree = (8*float(dirtyCount))/float(wordCount);
if(degree>1)
degree = 1.0f;
rt.fill(255*degree, 0, 0);
}
void draw() {
background(255);
};

