Class: EnglishThesaurus::Thesaurus

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

Constant Summary collapse

URL =
'http://thesaurus.com/browse/'
RELEVANCY_MAP =
{high: 3, middle: 2, low: 1}

Instance Method Summary collapse

Constructor Details

#initialize(word) ⇒ Thesaurus

Returns a new instance of Thesaurus.



14
15
16
# File 'lib/english_thesaurus.rb', line 14

def initialize(word)
  @url = URI.encode("#{URL}#{word}")
end

Instance Method Details

#all_synonymsObject



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/english_thesaurus.rb', line 29

def all_synonyms
  doc.xpath('//div[@class="synonyms"]').map {|synonym|
    filters_block = synonym.xpath('*[@class="filters"]')

    {
      word_of_speech: filters_block.xpath('div[@class="synonym-description"]/em').text,
      description: filters_block.xpath('div[@class="synonym-description"]/strong').text
    }.merge(RELEVANCY_MAP.inject({}) {|hash, (relevant, level)|
      hash.merge!("#{relevant}_relevance_list".to_sym => filters_block.xpath(relevancy_block_xpath_query(relevancy: level)).map(&:text))
    })
  }
end

#synonyms(relevancy:, word_of_speech: nil) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/english_thesaurus.rb', line 18

def synonyms(relevancy:, word_of_speech: nil)
  raise "illegal relevancy. choose from #{RELEVANCY_MAP}" unless RELEVANCY_MAP.include?(relevancy.to_sym)

  filtered_synonyms = all_synonyms
  if word_of_speech
    filtered_synonyms = all_synonyms.reject {|s| s[:word_of_speech] != word_of_speech }
  end

  filtered_synonyms.map {|s| s.slice(:word_of_speech, :description, "#{relevancy}_relevance_list".to_sym) }
end