som2 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/som2/version.rb +1 -1
  3. data/lib/som2.rb +56 -5
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ad5aa0284746da452ba35112d7c04f426da4a22
4
- data.tar.gz: 84ffacae878938dc5ea8e7c0df921ec713da0b4e
3
+ metadata.gz: 4c7b3da5d3e397adf304f81d2a67617a6af0412e
4
+ data.tar.gz: 8ff9050d0c29ef90f170d64315cda74e4fac9d6d
5
5
  SHA512:
6
- metadata.gz: 74c6029c5225bbf66acdc1afc63f934440ccfc0007fce70ce81f574622cb93a15feaafead567b63c325d71b8448f9aa449ee234c56c51171650693a75888ac2b
7
- data.tar.gz: 6fd61e2b534ea8a6199f53ae82c3499c1056e64f8de079f74aa0de4c11f44830baf1e98ef28b50a2e24f41508e70a17cab7d307b7ca54e95aeea3ad3b3494f9a
6
+ metadata.gz: 2deb619ad43940ed251ed5ec88a35a2e94bde7a2ae5eb6783cdadc2639ee64351e1c1ae685a838e156627b0c8d2205aed3b95946c8380b9f93dc02346974302e
7
+ data.tar.gz: 5a21def79fc0ea81d8466193050756cbbe11d278180519e38f26b23610b9bae2fd7819cc506bfd76ac35dde24bf79a9ee55443da22f3d2c5c7e8a90539019f57
data/lib/som2/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Som2
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/som2.rb CHANGED
@@ -1,9 +1,60 @@
1
1
  require "som2/version"
2
-
2
+ require 'engtagger'
3
3
  module Som2
4
4
  # Your code goes here...
5
- def self.process(str)
6
- # TODO: process `str`
7
- str
8
- end
5
+ ADJECTIVES = %w[so such very much many how].freeze
6
+ EMOTIONS = %w[wow amaze excite].freeze
7
+ def initialize
8
+ @tagger = EngTagger.new
9
+ end
10
+ def process(str, options = {})
11
+ # Parse sentences.
12
+ sentences = str.downcase.split(/[\.!?]+/).map(&:strip)
13
+ sentences = sentences.map do |sentence|
14
+ # Ignore any provided patterns.
15
+ sentence = ignore_patterns(sentence, options[:ignore]) if options[:ignore]
16
+ # Select just the nouns.
17
+ tagged_sentence = tagger.add_tags(sentence)
18
+ phrases = tagger.get_nouns(tagged_sentence).keys rescue []
19
+ # Prefix nouns with adjectives, and convert to sentences.
20
+ phrases.map! { |phrase| correct_spelling(phrase) }
21
+ phrases.map! { |phrase| "#{adjective} #{phrase}." }
22
+ # Append a word or phrase describing emotion.
23
+ phrases << "#{emotional_summary}."
24
+ phrases.join(' ')
25
+ end
26
+ sentences.join(' ')
27
+ end
28
+ private
29
+ attr_reader :tagger
30
+ def correct_spelling(word)
31
+ word.dup.tap do |word|
32
+ word.gsub!(/er$/, 'ar') # super => supar
33
+ word.gsub!(/ph/, 'f') # phone => fone
34
+ word.gsub!(/cious/, 'shus') # delicious => delishus, deliciousness => delishusness
35
+ word.gsub!(/([^s])tion(s$)?/, '\1shun\2') # emotion => emoshun, emotions => emoshuns, emotionless => emoshunless, question (unchanged)
36
+ word.gsub!(/stion$/, 'schun') # question => queschun, potion (unchanged)
37
+ word.gsub!(/dog([^e]|\b)/, 'doge\1') # dog => doge, dogs => doges, underdog => underdoge, doge (unchanged)
38
+ end
39
+ end
40
+ def ignore_patterns(sentence, patterns)
41
+ sentence.dup.tap do |sentence|
42
+ Array(patterns).map { |pattern| sentence.gsub!(pattern, '') }
43
+ end
44
+ end
45
+ def adjective
46
+ ADJECTIVES[adjective_offset]
47
+ end
48
+ def adjective_offset
49
+ @adjective_offset ||= -1
50
+ @adjective_offset = (@adjective_offset + 1) % ADJECTIVES.size
51
+ end
52
+ def emotional_summary
53
+ EMOTIONS[emotional_summary_offset]
54
+ end
55
+ def emotional_summary_offset
56
+ @emotional_summary_offset ||= -1
57
+ @emotional_summary_offset = (@emotional_summary_offset + 1) % EMOTIONS.size
58
+ end
59
+
9
60
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: som2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arvind Kushwah