Bot which is somewhat capable of generating sentences
This commit is contained in:
commit
852251c6d6
34
DictionaryGenerator.rb
Normal file
34
DictionaryGenerator.rb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
class DictionaryGenerator
|
||||||
|
attr_reader :dictionary, :depth
|
||||||
|
|
||||||
|
def initialize( depth )
|
||||||
|
@dictionary = {}
|
||||||
|
@capitalized_words = []
|
||||||
|
@depth = depth
|
||||||
|
@split_words = /(\.\s+)|(\.$)|([?!])|[\s]+/
|
||||||
|
@split_sentence = /(?<=[.!?])\s+/
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_word_to_dict( keyword, followedby )
|
||||||
|
@dictionary[keyword] ||= []
|
||||||
|
@dictionary[keyword] << followedby
|
||||||
|
end
|
||||||
|
|
||||||
|
def insert_text( text )
|
||||||
|
input_sentences = text.split @split_sentence
|
||||||
|
|
||||||
|
if input_sentences.empty? then raise "insert_text called without input" end
|
||||||
|
|
||||||
|
unless input_sentences[-1].strip[-1].match /[.!?]/ then
|
||||||
|
input_sentences[-1] = input_sentences[-1].strip + '.'
|
||||||
|
end
|
||||||
|
|
||||||
|
input_sentences.each do |sentence|
|
||||||
|
sentence.split(@split_words).each_cons(@depth + 1) do |words|
|
||||||
|
self.add_word_to_dict words[0..-2], words[-1]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
50
SentenceGenerator.rb
Normal file
50
SentenceGenerator.rb
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
class NullObject
|
||||||
|
def method_missing (*args, &block)
|
||||||
|
self
|
||||||
|
end
|
||||||
|
def nil?; true; end
|
||||||
|
def to_str; end
|
||||||
|
def to_ary; []; end
|
||||||
|
end
|
||||||
|
|
||||||
|
NULL_OBJECT = NullObject.new
|
||||||
|
|
||||||
|
class SentenceGenerator
|
||||||
|
|
||||||
|
def initialize(dictionary)
|
||||||
|
@dictionary = dictionary
|
||||||
|
@depth = @dictionary.depth
|
||||||
|
end
|
||||||
|
|
||||||
|
def random_word(last_word)
|
||||||
|
@dictionary.dictionary.fetch(last_word, NULL_OBJECT).sample
|
||||||
|
end
|
||||||
|
|
||||||
|
def is_terminator?(symbol)
|
||||||
|
(symbol =~ /[!?]/ || symbol == '.')
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
# Ugly way of making sure the key starts with a capital letter
|
||||||
|
def random_capitalized_word
|
||||||
|
random_choice = ["temp"]
|
||||||
|
until random_choice[0] =~ /[A-Z]/
|
||||||
|
words = @dictionary.dictionary.keys
|
||||||
|
random_choice = words[rand(words.length)]
|
||||||
|
end
|
||||||
|
random_choice
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_sentence()
|
||||||
|
sentence = []
|
||||||
|
maximum_length = 20
|
||||||
|
wordcount = 0
|
||||||
|
sentence.concat(random_capitalized_word)
|
||||||
|
until (is_terminator?(sentence.last[-1])) || wordcount > maximum_length
|
||||||
|
wordcount += 1
|
||||||
|
word = random_word(sentence.last(@depth))
|
||||||
|
sentence << word
|
||||||
|
end
|
||||||
|
sentence.join(' ')
|
||||||
|
end
|
||||||
|
end
|
47
love_story.txt
Normal file
47
love_story.txt
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
We were both young when I first saw you
|
||||||
|
I close my eyes and the flashback starts
|
||||||
|
I'm standing there on a balcony in summer air
|
||||||
|
See the lights, see the party, the ball gowns
|
||||||
|
See you make your way through the crowd
|
||||||
|
And say hello
|
||||||
|
Little did I know
|
||||||
|
That you were Romeo, you were throwing pebbles
|
||||||
|
And my daddy said, "Stay away from Juliet"
|
||||||
|
And I was crying on the staircase
|
||||||
|
Begging you, please, don't go
|
||||||
|
And I said,
|
||||||
|
"Romeo, take me somewhere we can be alone
|
||||||
|
I'll be waiting, all that's left to do is run
|
||||||
|
You'll be the prince and I'll be the princess
|
||||||
|
It's a love story, baby just say yes
|
||||||
|
So I sneak out to the garden to see you
|
||||||
|
We keep quiet 'cause we're dead if they knew
|
||||||
|
So close your eyes, escape this town for a little while
|
||||||
|
'Cause you were Romeo, I was a scarlet letter
|
||||||
|
And my daddy said "Stay away from Juliet"
|
||||||
|
But you were everything to me, I was begging you, please, don't go
|
||||||
|
And I said Romeo take me somewhere we can be alone
|
||||||
|
I'll be waiting, all there's left to do is run
|
||||||
|
You'll be the prince and I'll be the princess
|
||||||
|
It's a love story baby just say yes
|
||||||
|
Romeo save me, they're trying to tell me how to feel
|
||||||
|
This love is difficult, but it's real
|
||||||
|
Don't be afraid, we'll make it out of this mess
|
||||||
|
It's a love story, baby just say "Yes"
|
||||||
|
Oh, oh
|
||||||
|
I got tired of waiting
|
||||||
|
Wondering if you were ever coming around
|
||||||
|
My faith in you was fading
|
||||||
|
When I met you on the outskirts of town
|
||||||
|
And I said
|
||||||
|
"Romeo save me, I've been feeling so alone
|
||||||
|
I keep waiting for you but you never come
|
||||||
|
Is this in my head? I don't know what to think"
|
||||||
|
He knelt to the ground and pulled out a ring and said
|
||||||
|
"Marry me, Juliet, you'll never have to be alone
|
||||||
|
I love you and that's all I really know
|
||||||
|
I talked to your dad, go pick out a white dress
|
||||||
|
It's a love story, baby just say yes"
|
||||||
|
Oh, oh,
|
||||||
|
Oh, oh
|
||||||
|
'Cause we were both young when I first saw you.
|
41
our_song.txt
Normal file
41
our_song.txt
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
I was riding shotgun with my hair undone in the front seat of his car,
|
||||||
|
He's got a one-hand feel on the steering wheel,
|
||||||
|
The other on my heart,
|
||||||
|
I look around, turn the radio down, he says, "baby is something wrong?"
|
||||||
|
I say "nothing, I was just thinking how we don't have a song, "
|
||||||
|
And he says,
|
||||||
|
Our song is a slamming screen door,
|
||||||
|
Sneaking out late tapping on your window,
|
||||||
|
When we're on the phone and you talk real slow,
|
||||||
|
'Cause it's late and your mama don't know,
|
||||||
|
Our song is the way you laugh,
|
||||||
|
The first date man I didn't kiss her when I should have,
|
||||||
|
And when I got home, before I said amen,
|
||||||
|
Asking God if He could play it again.
|
||||||
|
I was walking up the front porch steps after everything that day,
|
||||||
|
Had gone all wrong, had been trampled on and lost and thrown away,
|
||||||
|
Got to the hallway well on my way to my lovin' bed,
|
||||||
|
I almost didn't notice all the roses,
|
||||||
|
And the note that said,
|
||||||
|
Our song is a slamming screen door,
|
||||||
|
Sneaking out late tapping on your window,
|
||||||
|
When we're on the phone and you talk real slow,
|
||||||
|
'Cause it's late and your mama don't know,
|
||||||
|
Our song is the way you laugh,
|
||||||
|
The first date man I didn't kiss her when I should have,
|
||||||
|
And when I got home, before I said amen,
|
||||||
|
Asking God if He could play it again.
|
||||||
|
I've heard every album, listened to the radio,
|
||||||
|
Waiting for something to come along,
|
||||||
|
That was as good as our song,
|
||||||
|
'Cause our song is a slamming screen door,
|
||||||
|
Sneaking out late tapping on your window,
|
||||||
|
When we're on the phone, and he talks real slow,
|
||||||
|
'Cause it's late and his mama don't know,
|
||||||
|
Our song is the way he laughs,
|
||||||
|
The first date man I didn't kiss him when I should have,
|
||||||
|
And when I got home, before I said amen,
|
||||||
|
Asking God if He could play it again.
|
||||||
|
I was riding shotgun with my hair undone in the front seat of his car,
|
||||||
|
I grabbed a pen and an old napkin
|
||||||
|
And I wrote down our song.
|
40
shouldve_said_no.txt
Normal file
40
shouldve_said_no.txt
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
It's strange to think the songs we used to sing
|
||||||
|
The smiles, the flowers, everything: is gone
|
||||||
|
Yesterday I found out about you
|
||||||
|
Even now just looking at you: feels wrong
|
||||||
|
You say that you'd take it all back, given one chance
|
||||||
|
It was a moment of weakness and you said yes
|
||||||
|
You should've said no, you should've gone home
|
||||||
|
You should've thought twice before you let it all go
|
||||||
|
You should've know that word, bout what you did with her
|
||||||
|
Would get back to me
|
||||||
|
And I should've been there, in the back of your mind
|
||||||
|
I shouldn't be asking myself why
|
||||||
|
You shouldn't be begging for forgiveness at my feet
|
||||||
|
You should've said no, baby and you might still have me
|
||||||
|
You can see that I've been crying
|
||||||
|
And baby you know all the right things: to say
|
||||||
|
But do you honestly expect me to believe
|
||||||
|
We could ever be the same
|
||||||
|
You say that the past is the past, you need one chance
|
||||||
|
It was a moment of weakness and you said yes
|
||||||
|
You should've said no, you should've gone home
|
||||||
|
You should've thought twice before you let it all go
|
||||||
|
You should've know that word, bout what you did with her
|
||||||
|
Would get back to me
|
||||||
|
And I should've been there, in the back of your mind
|
||||||
|
I shouldn't be asking myself why
|
||||||
|
You shouldn't be begging for forgiveness at my feet
|
||||||
|
You should've said no, baby and you might still have me
|
||||||
|
I can't resist, before you go, tell me this
|
||||||
|
Was it worth it
|
||||||
|
Was she worth this
|
||||||
|
No, no no no
|
||||||
|
You should've said no, you should've gone home
|
||||||
|
You should've thought twice before you let it all go
|
||||||
|
You should've know that word, bout what you did with her
|
||||||
|
Would get back to me
|
||||||
|
And I should've been there, in the back of your mind
|
||||||
|
I shouldn't be asking myself why
|
||||||
|
You shouldn't be begging for forgiveness at my feet
|
||||||
|
You should've said no, baby and you might still have me
|
17
taylor_bot.rb
Normal file
17
taylor_bot.rb
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
require_relative 'DictionaryGenerator'
|
||||||
|
require_relative 'SentenceGenerator'
|
||||||
|
|
||||||
|
|
||||||
|
love_file = File.open("love_story.txt","r").read
|
||||||
|
our_file = File.open("our_song.txt","r").read
|
||||||
|
shouldve_file = File.open('shouldve_said_no.txt','r').read
|
||||||
|
|
||||||
|
text = love_file + our_file + shouldve_file
|
||||||
|
|
||||||
|
@dictionary = DictionaryGenerator.new(2)
|
||||||
|
@dictionary.insert_text text
|
||||||
|
|
||||||
|
@sentenceGen = SentenceGenerator.new(@dictionary)
|
||||||
|
puts "-------------------------------------"
|
||||||
|
puts @sentenceGen.generate_sentence()
|
||||||
|
puts "-------------------------------------"
|
Loading…
Reference in New Issue
Block a user