Psychic Fortune Teller - en automat som läser hos Twitter (10 / 32 steg)
Steg 7: Techy - hjärnans logik: extrahera känsla genom att dekonstruera levande konversationer
Att göra en automatlångsvarv tala slumpmässiga skivor av människors tweets är en sak, att göra dem ungefärliga till en någorlunda grammatic eller begriplig mening är en annan. Det slog mig nyckeln till detta är tittar på omfattningen av strukturerade och klassificering som kan (eller inte!) finns inom tweets.Det inte finns många av dem, det finns enkla grammatiska regler används på Twitter som allmänt används på ett konsekvent sätt. Det finns också en känsla av gemenskapen etikett som övervakar och underhåller dessa normer. Det viktigaste är listade nedan, med en fingervisning om hur denna betydelse kan användas
- -alla ord med ett @ framför den är mycket specifikt en twitter användarnamn. T.ex. är detta mycket användbart. Om en är dagens, personen är antingen att diskuteras eller direkt larmade/inbjuds att bidra. Separera dessa ger en lista personer involverade i diskussionen - mycket praktiskt!
- #hashtag - detta är twitter grammatik för ett samtalsämne. En gång antog en hashtag är avsett att användas för endast ett specifikt ämne. Därför hashtags är mycket användbara och om avgränsade kommer att ge en lista över ämnen som diskuteras eller refereras.
- Det finns ett särskilt fall ska hanteras vid utvinning hashtags, vilket är hur man hanterar den huvudsakliga diskussionen hashtaggen. Detta är lim av en twitter diskussion, men kommer publiken ut alla andra hashtags i fråga om frekvens av händelsen. Men som denna hashtag id är oftast vad används en fråga sökterm, hantera det lätt som frågetermen kan uteslutas om det behövs.
- Finns det några andra varianter på hashtags. Vissa hashtags för en återkommande händelse kan till exempel ha en rot och en datum modifierare - e.g #MW2012, #MW2013, etc. Hashtags kan ofta vara akronymer och det finns också ibland lite acronymous (är det ens ett ord?) hashtags som kan leda till förvirring. Till exempel hastag #rdg har använts länge av en lokaltidning för att donera staden i Reading, UK, men populariteten av japansk anime Red Data flicka ledde till #rdg hashtag antas allmänt för att hänvisa till som.
http: } www.getreading.co.uk/news/s/2132218_red_data_girl_fans_twitter_storm_over_rdg_hashtag
- URL - detta är twitter motsvarande en referens. Dessa är oftast inte den verkliga URL-adressen, men en förkortad remiss url. Återigen ansågs dessa vara värt skiljer eftersom de resurser som är förknippade med diskussion och leda till mer i djup idéer som är för långa för representation på twitter
- RT eller RT:-(ReTweet) Detta är den standard etikett för erkänner en tweet som skickas inte är original är någon annans tweet som skickas. Det är likvärdigt med en traditionell kredit. Om följt av finns det en implicaton att detta är den person som skickade den ursprungliga tweeten, men detta är inte en sträng regel. Även RT kan vara användbara, beslutade att inte bry sig om att skilja användarnamn som kan vara att de krediterats snarare än nämns eller ingår
- VIA - liknande RT, detta är vanligtvis en bekräftelse på att detta är en sekundär retweet, namnge den person som skickade det på. Det är nästan alltid så att en följande är den person som retweeted det från början.
- "ord inom citationstecken" - används citattecken som en förkortning för ett direkt citat från en annan tweet.
Flödesschemat
Här är flödesschema från steg 6 igen.
Processing skiss, som alla andra, har en massa initialisering koden och en massa funktioner förklaras. Det har också den standard looping funktion draw(). Här körs kontinuerligt när skissen är igång och kör olika kod, gör kontroller och samtal funktioner som krävs.
Algoritmen för funktionen draw() , förenklat sagt, flyter något sådant.
- Kontrollera inställningarna för fjärradministration
- Ladda remote ofullständiga meningar
- Uppdatera inställningar för lokal admin med nya versioner om det behövs
- Skörda tweets enligt admin inställningar
- Strip ut stoppord (som "det", "och", etc.)
- Dela upp tweets i komponenttyper ord, hashtags, användarnamn och webbadresser
- Uppdatera lokal lagring hinkar för varje typ med senaste värden
- Lyssna efter knapptryckningar
- Om knappen är nedtryckt:
- skapa förmögenhet från tweet innehåll slumpmässigt kombinerat med ofullständiga meningar enligt fortune konstruktion uttryck
- tala tweet använder text-tal
- Tweet Sammanfattning till användare
Fortune konstruktion
De ofullständiga meningar är avsedda att vara neutral, så de kan användas med twitter diskussion innehåll från alla Twitter sökning.
Dessa väljs slumpmässigt från fyra uppslagstabeller. Innehållet i de här tabellerna dras till bearbetning skiss från en separat Google spreadsheet.
Nedan visas innehållet i dessa tabeller visar de aktuella värdena på skrivande stund detta Instructable. Dessa är inte fasta och kan ändras när som helst. I själva verket kan de ändras live medan psykiska spåkvinnan är i aktion. Detta beror på att den kontrollerar innehållet i dessa tabeller i samma takt det kontroller admin inställningarna och avsöker Twitter.
Talad Fortune
Här är diagrammet, för varje vit låda här, en motsvarande tabell med faktiska värden ingår nedan...
Skriptet är att titta på storleken på matrisen lagra fragment, sedan att få ett slumpmässigt värde från matrisen genom att begära det element som är ett slumpmässigt heltal mellan 0 och max antal element. Här är exempel på fraser används (nuvarande värden på i skrivande stund)
Den funktion som skapar förmögenheten inom psykiska hjärnan är:void readFortune (String tweetText)
println ("finished grabbing tweets");
int picW1 = int(random (words.size()))println ();
String fortuneWord1= words.get(picW1)println ();
int picW2 = int(random (words.size()))} // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of setup() <<<<<<<<<<<<<<<<<<<<<<<<<<
String fortuneWord2= words.get(picW2)void draw() {
int hash = int(random (hashtags.size()))int panelTop= height-panelHeight;
String fortuneHash= hashtags.get(hash)buttonCheck("HELLO"); // on screen check button every loop
int urler = int(random (urls.size()))timeNow=millis();
String fortuneUrl= urls.get(urler)try {
int userer = int(random (usernames.size()))println ();
String fortuneUser = usernames.get(userer)if ((timeNow-grabTime)>float(adminSettings[4])) {
int frag1Int =int (random (fortFrags1.size()))grabTweets();
String fraglet1 = fortFrags1.get(frag1Int)}
int frag2Int =int (random (fortFrags2.size()))// >>>>>> Draw a faint black rectangle over what is currently on the stage so it fades over time.
String fraglet2 = fortFrags2.get(frag2Int)fill(0, 30); // change the latter number to make the fade deeper (from 1 to 20 is good)
int frag3Int =int (random (fortFrags3.size()))rect(0, 0, width, height-panelHeight);
String fraglet3 = fortFrags3.get(frag3Int)// <<<<<<
int frag4Int =int (random (fortFrags4.size()))// >>>>>>> WORDS
String fraglet4 = fortFrags4.get(frag4Int)// Draw a word from the list of words that we've built
Fortune = "psykiska Sammanfattning för +". för: #"+ queryString +". "+ fortuneWord1 +", "+ fortuneWord2 +", #"+ fortuneHash +", "+ fortuneUrl +". Njut av/RT"int i = (int (random (words.size())));
String word = words.get(i);strax före fortune talat ")println ("word = "+word+" #"+i);
fortuneSpoken = "Hej." + tfUserCurrent + ". "+ adminSettings [7] +". " + fortuneGreeting + ". Här. Du är. Din psykiska Hive Mind. Förmögenhet. baserat på läsa .den kollektiva sinne. "+ queryString +". är. "+ fraglet1 +". "+ fortuneWord1 +". "+ fraglet2 +". "+ fortuneWord2 +". "+ fraglet3 +". hashtag." + fortuneHash + "." + fraglet4 + ". Twitter användare." + fortuneUser + ". Tack. Jag har tweeted en psychic Sammanfattning av denna behandling till din twitter-konto. Moove längs nu. "// <<<<<<<
// >>>>>>> HASHTAGSfortuneSpoken = "+ fortuneSpoken)//Draw a hashtag from the list of words that we've built
int j = (int (random (hashtags.size())));