zenkay/machinereading-ruby

View on GitHub
lib/machinereading/element.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "faraday"
require "faraday_middleware"
require "json"

module Machinereading
    class Element

    attr_accessor :text, :lang

    def initialize(input_text, input_lang)
      @text = input_text
      @lang = input_lang
    end

    def tokenizer
      call("tokenizer", text: self.text, lang: self.lang)
    end

    def pos_tagger_stanford(format = "vertical")
      call("pos_tagger_stanford", text: self.text, lang: self.lang, format: format)
    end

    def syntactic_parser_stanford
      call("syntactic_parser_stanford", text: self.text, lang: self.lang)
    end

    def lemmatizer
      # replace "/" with " " to avoid problem during response split
      call("lemmatizer", text: self.text.gsub("/", " "), lang: self.lang).split("/")
    end

    def sequence_surprisal
      JSON.parse call("sequence_surprisal", text: self.text, lang: self.lang)
    end

    def language_detector
      JSON.parse call("language_detector", text: self.text)
    end

    def keyword_extractor(maxRetrieve = 15)
      JSON.parse call("keyword_extractor", text: self.text, lang: self.lang, maxRetrieve: maxRetrieve)
    end

    def automatic_categorization
      JSON.parse call("automatic_categorization", text: self.text, lang: self.lang)
    end

    def voice_tags
      JSON.parse call("voice_tags", text: self.text, lang: self.lang)
    end

    protected

    def call(endpoint, params)
      begin
        params = params.merge({api_key: Machinereading.config.api_key})
        conn = Faraday.new(url: Machinereading.config.endpoint) do |faraday|
          faraday.request  :url_encoded
          # faraday.response :json, :content_type => /\bjson$/
          faraday.adapter  Faraday.default_adapter
        end
        response = conn.post "/#{endpoint}", params
        response.body
      rescue Exception => e
        raise Machinereading::BadResponse
      end
    end

  end

end