class StageD

Public Instance Methods

run() click to toggle source

range d1-d4

# File lib/asker/ai/stages/stage_d.rb, line 11
  def run
    # Stage D: process every definition, I mean every <def> tag
    questions = []
    return questions unless type == 'text'

    # for every <text> do this
    texts.each do |t|
      s=Set.new [name(:raw), lang.text_for(:none)]
      neighbors.each { |n| s.add n[:concept].name(:decorated) }
      a=s.to_a

      # Question choose between 4 options
      if s.count > 3
        q=Question.new(:choice)
        q.name="#{name(:id)}-#{num}-d1choose"
        q.text=random_image_for(name(:raw)) + lang.text_for(:d1,t)
        q.good=name(:raw)
        q.bads << lang.text_for(:none)
        q.bads << a[2]
        q.bads << a[3]
        questions << q
      end

      #Question choose between 4 options, good none (Syntax error)
      if s.count>3 and type=="text" then
        q=Question.new(:choice)
        q.name="#{name(:id)}-#{num}-d1none-misspelled"
        q.text=random_image_for(name(:raw)) + lang.text_for(:d1,t)
        q.good = lang.text_for(:none)
        q.bads << lang.do_mistake_to(name(:raw))
        q.bads << a[2]
        q.bads << a[3]
        q.feedback="Option misspelled!: #{name(:raw)}"
        questions << q
      end

      s.delete(name(:raw))
      a=s.to_a

      #Question choose between 4 options, good none
      if s.count>3 then
        q = Question.new(:choice)
        q.name="#{name(:id)}-#{num}-d1none"
        q.text=random_image_for(name(:raw)) + lang.text_for(:d1,t)
        q.good=lang.text_for(:none)
        q.bads << a[1]
        q.bads << a[2]
        q.bads << a[3]
        questions << q
      end

      #Question boolean => TRUE
      #q = Question.new(:boolean)
      #q.name="#{name}-#{num}-d2true"
      #q.text=random_image_for(name) + lang.text_for(:d2,name,t)
      #q.good="TRUE"
      #questions << q

      q = Question.new(:choice)
      q.name="#{name(:id)}-#{num}-d2def-mispelled"
      q.text=random_image_for(name(:raw)) + lang.text_for(:d2,name(:decorated), lang.do_mistake_to(t) )
      q.good=lang.text_for(:misspelling)
      q.bads << lang.text_for(:true)
      q.bads << lang.text_for(:false)
      q.feedback="Definition text mispelled!: #{t}"
      questions << q

      if type=="text"
        q = Question.new(:choice)
        q.name="#{name(:id)}-#{num}-d2name-mispelled"
        q.text=random_image_for(name(:raw)) + lang.text_for(:d2, lang.do_mistake_to(name(:raw)), t)
        q.good=lang.text_for(:misspelling)
        q.bads << lang.text_for(:true)
        q.bads << lang.text_for(:false)
        q.feedback="Concept name mispelled!: #{name(:raw)}"
        questions << q
      end

      q = Question.new(:choice)
      q.name="#{name(:id)}-#{num}-d2true"
      q.text=random_image_for(name(:raw)) + lang.text_for(:d2, name(:raw), t )
      q.good =  lang.text_for(:true)
      q.bads << lang.text_for(:misspelling)
      q.bads << lang.text_for(:false)
      questions << q

      if a.size>1 then
        q = Question.new(:choice)
        q.name="#{name(:id)}-#{num}-d2false-misspelled"
        q.text=random_image_for(name(:raw)) + lang.text_for(:d2, a[1], t)
        q.good =  lang.text_for(:false)
        q.bads << lang.text_for(:misspelling)
        q.bads << lang.text_for(:true)
        questions << q
      end

      #Question type <a4desc>: boolean => FALSE
      #if neighbors.count>0 then
      #  q = Question.new(:boolean)
      #  q.name="#{name}-#{num}-d2false"
      #  q.text=random_image_for(name) + lang.text_for(:d2, neighbors[0][:concept].name, t)
      #  q.good="FALSE"
      #  questions << q
      #end

      if type=="text"
        #Question hidden name questions
        q = Question.new(:short)
        q.name="#{name(:id)}-#{num}-d3hidden"
        q.text=random_image_for(name(:raw)) + lang.text_for(:d3, lang.hide_text(name(:raw)), t )
        q.shorts << name(:raw)
        q.shorts << name(:raw).gsub("-"," ").gsub("_"," ")
        names.each do |n|
          q.shorts << n if n!=name
        end
        questions << q
      end

#      indexes = []
#      exclude = ["[", "]", "(", ")", "\"" ]
#      filtered[:words].each_with_index do |item,index|
#        flag=true
#        exclude.each { |e| flag=false if (item[:word].include?(e)) }
#        indexes << index if flag
#      end

      #Question filtered text questions
      filtered=lang.text_with_connectors(t)
      indexes = filtered[:indexes]

      groups = (indexes.combination(4).to_a).shuffle
      max    = (indexes.size/4).to_i
      groups[0,max].each do |e|
        e.sort!
        q = Question.new(:match)
        q.shuffle_off
        q.name = "#{name}-#{num}-d4filtered"
        s = lang.build_text_from_filtered( filtered, e)
        q.text = random_image_for(name(:raw)) + lang.text_for(:d4, name(:raw) , s)
        e.each_with_index do |value,index|
          q.matching << [ (index+1).to_s, filtered[:words][value][:word].downcase ]
        end
        questions << q
      end
    end

    return questions
  end