Sha256: fdcf697f9745e8ff0d8a9f31a299a90364990bfe67a7f32a04d7a0fd6406edbf

Contents?: true

Size: 1.99 KB

Versions: 4

Compression:

Stored size: 1.99 KB

Contents

require 'open3'
require 'optparse'
require 'nokogiri'
require 'opener/constituent_parsers/base'

require_relative 'constituent_parser/version'
require_relative 'constituent_parser/cli'

module Opener
  ##
  # Constituent parser for various languages such as English and German.
  #
  # @!attribute [r] options
  #  @return [Hash]
  #
  class ConstituentParser
    attr_reader :options

    ##
    # Hash containing the default options to use.
    #
    # @return [Hash]
    #
    DEFAULT_OPTIONS = {
      :args     => [],
    }.freeze

    ##
    # @param [Hash] options
    # @see Opener::ConstituentParsers::Base#initialize
    #
    def initialize(options = {})
      @options = DEFAULT_OPTIONS.merge(options)
    end

    ##
    # Processes the input and returns an array containing the output of STDOUT,
    # STDERR and an object containing process information.
    #
    # @param [String] input
    # @return [Array]
    #
    def run(input)
      args = options[:args].dup
      language = language(input)
      if language_constant_defined?(language)
        kernel = language_constant(language).new(:args => args)
      else
        kernel = ConstituentParsers::Base.new(
          :args     => args,
          :language => language
        )
      end

      return kernel.run(input)
    end

    ##
    # @return [String]
    #
    def output_type
      return :xml
    end

    protected


    ##
    # Returns `true` if the current language has a dedicated kernel class.
    #
    # @return [TrueClass|FalseClass]
    #
    def language_constant_defined?(language)
      return ConstituentParsers.const_defined?(language.upcase)
    end

    ##
    # @return [Class]
    #
    def language_constant(language)
      return ConstituentParsers.const_get(language.upcase)
    end
    
    ##
    # @return the language from the KAF
    #
    def language(input)
      document = Nokogiri::XML(input)
      language = document.at('KAF').attr('xml:lang')

      return language
    end
  end # ConstituentParser
end # Opener

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
opener-constituent-parser-1.0.6 lib/opener/constituent_parser.rb
opener-constituent-parser-1.0.5 lib/opener/constituent_parser.rb
opener-constituent-parser-1.0.4 lib/opener/constituent_parser.rb
opener-constituent-parser-1.0.3 lib/opener/constituent_parser.rb