lib/machinereading/element.rb
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