Sha256: b82e1b14f8405650233574e6956cd5898323735678497572e99c66814bd850e2

Contents?: true

Size: 1.76 KB

Versions: 20

Compression:

Stored size: 1.76 KB

Contents

module Zenlish
  module Lex
    # A lexicon is a collection of lexical entries.
    # Every entry is associated with one one more lexemes.
    class Lexicon
      attr_reader :entries
      attr_reader :lemma2entry

      # The list of terminal symbols. Examples of terminal symbols:
      # - word classes,
      # - punctuation signs,...
      attr_reader :terminals
      attr_reader :name2terminal

      def initialize
        @entries = []
        @lemma2entry = {}
        @terminals = []
        @name2terminal = {}
      end

      def get_lexeme(aLemma, aWordClass = nil)
        if aWordClass
          lexeme = nil
          candidate = nil

          entries = lemma2entry.fetch(aLemma)
          if entries.kind_of?(Array)
            entries.each do |e|
              candidate = e.lexemes.first
              break if candidate.wclass.kind_of?(aWordClass)
            end
            lexeme = candidate
          else
            candidate = entries.lexemes.first
            lexeme = candidate if candidate.wclass.kind_of?(aWordClass)
          end

          lexeme
        else
          lemma2entry.fetch(aLemma).lexemes.first
        end
      end

      def add_terminal(aTerminal)
        terminals << aTerminal
        name2terminal[aTerminal.name] = aTerminal
      end

      def add_entry(anEntry)
        entries << anEntry
        lemma = anEntry.lemma

        update_mapping(lemma2entry, lemma, anEntry)
      end

      private

      def update_mapping(aHash, aKey, aValue)
        if aHash.include?(aKey)
          hit = aHash[aKey]
          if hit.is_a?(Array)
            hit << aValue
          else
            aHash[aKey] = [hit, aValue]
          end
        else
          aHash[aKey] = aValue
        end
      end

    end # class
  end # module
end # module

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
zenlish-0.1.23 lib/zenlish/lex/lexicon.rb
zenlish-0.1.22 lib/zenlish/lex/lexicon.rb
zenlish-0.1.21 lib/zenlish/lex/lexicon.rb
zenlish-0.1.20 lib/zenlish/lex/lexicon.rb
zenlish-0.1.19 lib/zenlish/lex/lexicon.rb
zenlish-0.1.18 lib/zenlish/lex/lexicon.rb
zenlish-0.1.17 lib/zenlish/lex/lexicon.rb
zenlish-0.1.16 lib/zenlish/lex/lexicon.rb
zenlish-0.1.15 lib/zenlish/lex/lexicon.rb
zenlish-0.1.14 lib/zenlish/lex/lexicon.rb
zenlish-0.1.13 lib/zenlish/lex/lexicon.rb
zenlish-0.1.12 lib/zenlish/lex/lexicon.rb
zenlish-0.1.11 lib/zenlish/lex/lexicon.rb
zenlish-0.1.10 lib/zenlish/lex/lexicon.rb
zenlish-0.1.09 lib/zenlish/lex/lexicon.rb
zenlish-0.1.07 lib/zenlish/lex/lexicon.rb
zenlish-0.1.06 lib/zenlish/lex/lexicon.rb
zenlish-0.1.05 lib/zenlish/lex/lexicon.rb
zenlish-0.1.04 lib/zenlish/lex/lexicon.rb
zenlish-0.1.03 lib/zenlish/lex/lexicon.rb