class Lingo::Attendee::LsiFilter
Public Instance Methods
control(cmd, *)
click to toggle source
# File lib/lingo/attendee/lsi_filter.rb, line 52 def control(cmd, *) :skip_command if cmd == :EOL end
control_deferred(cmd, *)
click to toggle source
# File lib/lingo/attendee/lsi_filter.rb, line 56 def control_deferred(cmd, *) @docnum += 1 if TERMINALS.include?(cmd) end
init()
click to toggle source
# File lib/lingo/attendee/lsi_filter.rb, line 32 def init require_lib('lsi4r') @lex = get_re('lexicals', '[sy]') @skip = get_ary('skip', DEFAULT_SKIP, :upcase) @transform = get_key('transform', Lsi4R::DEFAULT_TRANSFORM) @cutoff = get_flo('cut', Lsi4R::DEFAULT_CUTOFF) @min = get_flo('min', false) @abs = get_flo('abs', false) @nul = get_flo('nul', false) @new = get_key('new', true) @sort = get_key('sort', false) @sort.downcase! if @sort.respond_to?(:downcase!) @docnum, @vectors = 0, Hash.new { |h, k| h[k] = [] } end
process(obj)
click to toggle source
# File lib/lingo/attendee/lsi_filter.rb, line 60 def process(obj) if obj.is_a?(Word) && !@skip.include?(obj.attr) vec = [] obj.each_lex(@lex) { |lex| vec << Unicode.downcase(lex.form) } @vectors[@docnum].concat(vec) unless vec.empty? end end
Private Instance Methods
send_lsi() { |!sort ? lambda { |docnum| each_norm{ |_, *v| forward(fmt % v) }| ... }
click to toggle source
# File lib/lingo/attendee/lsi_filter.rb, line 70 def send_lsi lsi = Lsi4R.new(@vectors); @vectors.clear if lsi.build(transform: @transform, cutoff: @cutoff) options, vec = { min: @min, abs: @abs, nul: @nul, new: @new }, [] fmt = @sort ? @sort == 'sto' ? '%s {%.5f}' : '%2$.5f %1$s' : '%s %.5f' unless @sort == 'normal' yield !@sort ? lambda { |docnum| lsi.each_norm(docnum, options) { |_, *v| forward(fmt % v) } } : lambda { |docnum| lsi.each_norm(docnum, options) { |_, *v| vec << v } !fmt ? vec.sort!.each { |v, _| forward(v) } : vec.sort_by { |v, w| [-w, v] }.each { |v| forward(fmt % v) } vec.clear } end end
Also aliased as: flush_deferred