Merge from master

This commit is contained in:
Jacob Harris
2013-08-10 15:01:33 -04:00
4 changed files with 20 additions and 12 deletions

7
Gemfile Normal file
View File

@@ -0,0 +1,7 @@
source 'https://rubygems.org'
ruby "1.9.3"
gem "twitter"
gem "typhoeus"
gem "iron_worker_ng"

View File

@@ -11,9 +11,10 @@ A simple and hackish ruby script for pseudorandomly posting to a _ebooks account
5. Sign into dev.twitter.com with the same credentials 5. Sign into dev.twitter.com with the same credentials
6. Create an application for your _ebooks account (generate the credentials) 6. Create an application for your _ebooks account (generate the credentials)
7. Create a file named twitter_init.rb in this directory with the OAuth credentials and the source account you want to use for seeding the markov process 7. Create a file named twitter_init.rb in this directory with the OAuth credentials and the source account you want to use for seeding the markov process
8. Upload to iron.io with `iron_worker upload ebook` 8. Run "bundle install"
9. Run it with `iron_worker queue ebook` a few times 9. Upload to iron.io with `bundle exec iron_worker upload ebook`
10. You can schedule it now to run regularly using the scheduler. I'd suggest once every 53 minutes or so. 10. Run it with `bundle exec iron_worker queue ebook` a few times
11. You can schedule it now to run regularly using the scheduler. I'd suggest once every 53 minutes or so.
## Configuring ## Configuring

View File

@@ -60,12 +60,12 @@ else
source_tweets.each do |twt| source_tweets.each do |twt|
text = twt text = twt
sentences = text.split(/[\.\"\'\?\!]/) sentences = text.split(/\p{Punct}/)
sentences.each do |sentence| sentences.each do |sentence|
next if sentence =~ /@/ next if sentence =~ /@/
if sentence !~ /[\.\"\'\?\!]$/ if sentence !~ /\p{Punct}$/
sentence += "." sentence += "."
end end
@@ -78,9 +78,9 @@ else
10.times do 10.times do
tweet = markov.generate_sentence tweet = markov.generate_sentence
if rand(3) == 0 && tweet =~ /(in|to|from|for|with|by|our|of|your|around|under|beyond)\s\w+$/ if rand(3) == 0 && tweet =~ /(in|to|from|for|with|by|our|of|your|around|under|beyond)\p{Space}\w+$/
puts "Losing last word randomly" puts "Losing last word randomly"
tweet.gsub(/\s\w+.$/, '') # randomly losing the last word sometimes like horse_ebooks tweet.gsub(/\p{Space}\p{Word}+.$/, '') # randomly losing the last word sometimes like horse_ebooks
end end
if tweet.length < 40 && rand(10) == 0 if tweet.length < 40 && rand(10) == 0
@@ -92,8 +92,8 @@ else
puts "MARKOV: #{tweet}" puts "MARKOV: #{tweet}"
end end
tweet_letters = tweet.gsub(/\W/, '') tweet_letters = tweet.gsub(/\P{Word}/, '')
break if !tweet.nil? && tweet.length < 110 && !source_tweets.any? {|t| t.gsub(/\W/, '') =~ /#{tweet_letters}/ } break if !tweet.nil? && tweet.length < 110 && !source_tweets.any? {|t| t.gsub(/\P{Word}/, '') =~ /#{tweet_letters}/ }
end end
if params["tweet"] if params["tweet"]

View File

@@ -10,9 +10,9 @@ class MarkovChainer
def add_text(text) def add_text(text)
# make sure each paragraph ends with some sentence terminator # make sure each paragraph ends with some sentence terminator
text.gsub!(/\n\s*\n/m, ".") text.gsub!(/[\r\n]+\p{Space}*[\r\n]+/m, ".")
text << "." text << "."
seps = /([.!?;])/ seps = /(\p{Punct})/
sentence = "" sentence = ""
text.split(seps).each { |p| text.split(seps).each { |p|
if seps =~ p if seps =~ p
@@ -37,7 +37,7 @@ class MarkovChainer
private private
def add_sentence(str, terminator) def add_sentence(str, terminator)
words = str.scan(/[\w'\-]+/) words = str.scan(/[\p{Word}'\-]+/)
return unless words.size > order # ignore short sentences return unless words.size > order # ignore short sentences
words << terminator words << terminator
buf = [] buf = []