Class: Greetlang::Syntax

Inherits:
Object
  • Object
show all
Defined in:
lib/greetlang.rb

Class Method Summary collapse

Class Method Details

.for_fromObject

bayesian algorithm for detecting for_from type.



124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/greetlang.rb', line 124

def self.for_from
  require "naive_bayes"

  a = NaiveBayes.new(:spam, :ham)

  # For or from
  a.train(:for,   'for', 'word')
  a.train(:from, 'from', 'word')

  b = $for_from.split(' ')

  puts a.classify(*b)
end

.greetingObject

bayesian algorithm for detecting greeting type.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/greetlang.rb', line 10

def self.greeting
  require "naive_bayes"
  
  a = NaiveBayes.new(:polite, :rude)

  # Polite greeting
  a.train(:polite, 'Hello', 'word')
  a.train(:polite,   'Hey', 'word')

  # Rude greeting
  a.train(:rude,    'Hi', 'word')
  a.train(:rude,  'Ahoy', 'word')
  a.train(:rude,    'Yo', 'word')
  
  b = $greeting.split(' ')

  a.classify(*b)
end

.irbObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/greetlang.rb', line 7

def self.irb

  # bayesian algorithm for detecting greeting type.
  def self.greeting
    require "naive_bayes"
    
    a = NaiveBayes.new(:polite, :rude)

    # Polite greeting
    a.train(:polite, 'Hello', 'word')
    a.train(:polite,   'Hey', 'word')

    # Rude greeting
    a.train(:rude,    'Hi', 'word')
    a.train(:rude,  'Ahoy', 'word')
    a.train(:rude,    'Yo', 'word')
    
    b = $greeting.split(' ')

    a.classify(*b)
  end
  
  # bayesian algorithm for detecting request type.
  def self.request
    require "naive_bayes"

    a = NaiveBayes.new(:request, :demand)

    # Requests and demands.
    a.train(:request,  'may', 'word')
    a.train(:request,  'can', 'word')
    a.train(:demand,  'will', 'word')

    b = $request.split(' ')

    puts a.classify(*b)
  end
  
  # bayesian algorithm for detecting item type.
  def self.item
    require "naive_bayes"

    a = NaiveBayes.new(:item, :object)

    # Item and gender
    a.train(:item,       'some apples', 'word')
    a.train(:item,      'some bananas', 'word')
    a.train(:item,      'some oranges', 'word')
    a.train(:item, 'some strawberries', 'word')
    a.train(:item,     'some apricots', 'word')
    a.train(:item,        'some kiwis', 'word')
    a.train(:item,       'many apples', 'word')
    a.train(:item,      'many bananas', 'word')
    a.train(:item,      'many oranges', 'word')
    a.train(:item, 'many strawberries', 'word')
    a.train(:item,     'many apricots', 'word')
    a.train(:item,        'many kiwis', 'word')
    a.train(:item,           'a apple', 'word')
    a.train(:item,          'a banana', 'word')
    a.train(:item,          'a orange', 'word')
    a.train(:item,     'a strawberrie', 'word')
    a.train(:item,         'a apricot', 'word')
    a.train(:item,            'a kiwi', 'word')
    a.train(:item,     'some potatoes', 'word')
    a.train(:item,     'some tomatoes', 'word')
    a.train(:item,    'some eggplants', 'word')
    a.train(:item,       'some onions', 'word')
    a.train(:item,       'some garlic', 'word')
    a.train(:item,      'some peppers', 'word')
    a.train(:item,     'many potatoes', 'word')
    a.train(:item,     'many tomatoes', 'word')
    a.train(:item,    'many eggplants', 'word')
    a.train(:item,       'many onions', 'word')
    a.train(:item,       'many garlic', 'word')
    a.train(:item,      'many peppers', 'word')
    a.train(:item,         'a potatoe', 'word')
    a.train(:item,         'a tomatoe', 'word')
    a.train(:item,        'a eggplant', 'word')
    a.train(:item,           'a onion', 'word')
    a.train(:item,          'a garlic', 'word')
    a.train(:item,          'a pepper', 'word')

    # Object and gender
    a.train(:object, 'some microphones', 'word')
    a.train(:object,     'some laptops', 'word')
    a.train(:object,   'some mousepads', 'word')
    a.train(:object,    'some consoles', 'word')
    a.train(:object,        'some mugs', 'word')
    a.train(:object,      'some knives', 'word')
    a.train(:object,    'some spatulas', 'word')
    a.train(:object,        'some pans', 'word')
    a.train(:object,        'some pots', 'word')
    a.train(:object, 'many microphones', 'word')
    a.train(:object,     'many laptops', 'word')
    a.train(:object,   'many mousepads', 'word')
    a.train(:object,    'many consoles', 'word')
    a.train(:object,        'many mugs', 'word')
    a.train(:object,      'many knives', 'word')
    a.train(:object,    'many spatulas', 'word')
    a.train(:object,        'many pans', 'word')
    a.train(:object,        'many pots', 'word')
    a.train(:object,    'a microphones', 'word')
    a.train(:object,        'a laptops', 'word')
    a.train(:object,      'a mousepads', 'word')
    a.train(:object,       'a consoles', 'word')
    a.train(:object,           'a mugs', 'word')
    a.train(:object,         'a knives', 'word')
    a.train(:object,       'a spatulas', 'word')
    a.train(:object,           'a pans', 'word')
    a.train(:object,           'a pots', 'word')
    
    b = $item.split(' ')

    puts a.classify(*b)
  end
  
  # bayesian algorithm for detecting for_from type.
  def self.for_from
    require "naive_bayes"

    a = NaiveBayes.new(:spam, :ham)

    # For or from
    a.train(:for,   'for', 'word')
    a.train(:from, 'from', 'word')

    b = $for_from.split(' ')

    puts a.classify(*b)
  end
  
  def self.user_location
    require "naive_bayes"

    a = NaiveBayes.new(:state, :nonstate)

    # State
    a.train(:state,      'Tennessee', 'word')
    a.train(:state,        'Georgia', 'word')
    a.train(:state,        'Alabama', 'word')
    a.train(:state,       'Kentucky', 'word')
    a.train(:state, 'North Carolina', 'word')

    # Non State
    a.train(:state, 'Guillotine', 'word')
    a.train(:state,       'Park', 'word')
    a.train(:state,   'Wildlife', 'word')
    a.train(:state,       'Tree', 'word')
    
    b = $user_location.split(' ')

    puts a.classify(*b)
  end
  
  # Main interactive shell.
  loop do
    print "Greetlang(main) #{number}> "
    request = gets.chomp
    
    if request == "exit"
      puts "Goodbye!"
      abort
    end
    
    request = request.split(" ")

    $greeting      = request[0]
    $request       = request[1]
    $item          = request[2]
    $for_from      = request[3]
    $user_location = request[4]
  
    Greetlang::Syntax.irb.greeting
    Greetlang::Syntax.irb.request
    Greetlang::Syntax.irb.item
    Greetlang::Syntax.irb.for_from
    Greetlang::Syntax.irb.user_location
  end
end

.itemObject

bayesian algorithm for detecting item type.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/greetlang.rb', line 46

def self.item
  require "naive_bayes"

  a = NaiveBayes.new(:item, :object)

  # Item and gender
  a.train(:item,       'some apples', 'word')
  a.train(:item,      'some bananas', 'word')
  a.train(:item,      'some oranges', 'word')
  a.train(:item, 'some strawberries', 'word')
  a.train(:item,     'some apricots', 'word')
  a.train(:item,        'some kiwis', 'word')
  a.train(:item,       'many apples', 'word')
  a.train(:item,      'many bananas', 'word')
  a.train(:item,      'many oranges', 'word')
  a.train(:item, 'many strawberries', 'word')
  a.train(:item,     'many apricots', 'word')
  a.train(:item,        'many kiwis', 'word')
  a.train(:item,           'a apple', 'word')
  a.train(:item,          'a banana', 'word')
  a.train(:item,          'a orange', 'word')
  a.train(:item,     'a strawberrie', 'word')
  a.train(:item,         'a apricot', 'word')
  a.train(:item,            'a kiwi', 'word')
  a.train(:item,     'some potatoes', 'word')
  a.train(:item,     'some tomatoes', 'word')
  a.train(:item,    'some eggplants', 'word')
  a.train(:item,       'some onions', 'word')
  a.train(:item,       'some garlic', 'word')
  a.train(:item,      'some peppers', 'word')
  a.train(:item,     'many potatoes', 'word')
  a.train(:item,     'many tomatoes', 'word')
  a.train(:item,    'many eggplants', 'word')
  a.train(:item,       'many onions', 'word')
  a.train(:item,       'many garlic', 'word')
  a.train(:item,      'many peppers', 'word')
  a.train(:item,         'a potatoe', 'word')
  a.train(:item,         'a tomatoe', 'word')
  a.train(:item,        'a eggplant', 'word')
  a.train(:item,           'a onion', 'word')
  a.train(:item,          'a garlic', 'word')
  a.train(:item,          'a pepper', 'word')

  # Object and gender
  a.train(:object, 'some microphones', 'word')
  a.train(:object,     'some laptops', 'word')
  a.train(:object,   'some mousepads', 'word')
  a.train(:object,    'some consoles', 'word')
  a.train(:object,        'some mugs', 'word')
  a.train(:object,      'some knives', 'word')
  a.train(:object,    'some spatulas', 'word')
  a.train(:object,        'some pans', 'word')
  a.train(:object,        'some pots', 'word')
  a.train(:object, 'many microphones', 'word')
  a.train(:object,     'many laptops', 'word')
  a.train(:object,   'many mousepads', 'word')
  a.train(:object,    'many consoles', 'word')
  a.train(:object,        'many mugs', 'word')
  a.train(:object,      'many knives', 'word')
  a.train(:object,    'many spatulas', 'word')
  a.train(:object,        'many pans', 'word')
  a.train(:object,        'many pots', 'word')
  a.train(:object,    'a microphones', 'word')
  a.train(:object,        'a laptops', 'word')
  a.train(:object,      'a mousepads', 'word')
  a.train(:object,       'a consoles', 'word')
  a.train(:object,           'a mugs', 'word')
  a.train(:object,         'a knives', 'word')
  a.train(:object,       'a spatulas', 'word')
  a.train(:object,           'a pans', 'word')
  a.train(:object,           'a pots', 'word')
  
  b = $item.split(' ')

  puts a.classify(*b)
end

.requestObject

bayesian algorithm for detecting request type.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/greetlang.rb', line 30

def self.request
  require "naive_bayes"

  a = NaiveBayes.new(:request, :demand)

  # Requests and demands.
  a.train(:request,  'may', 'word')
  a.train(:request,  'can', 'word')
  a.train(:demand,  'will', 'word')

  b = $request.split(' ')

  puts a.classify(*b)
end

.user_locationObject



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/greetlang.rb', line 138

def self.user_location
  require "naive_bayes"

  a = NaiveBayes.new(:state, :nonstate)

  # State
  a.train(:state,      'Tennessee', 'word')
  a.train(:state,        'Georgia', 'word')
  a.train(:state,        'Alabama', 'word')
  a.train(:state,       'Kentucky', 'word')
  a.train(:state, 'North Carolina', 'word')

  # Non State
  a.train(:state, 'Guillotine', 'word')
  a.train(:state,       'Park', 'word')
  a.train(:state,   'Wildlife', 'word')
  a.train(:state,       'Tree', 'word')
  
  b = $user_location.split(' ')

  puts a.classify(*b)
end