Module: AtomicAssessmentsImport::ExamSoft::Chunker
- Defined in:
- lib/atomic_assessments_import/exam_soft/chunker.rb,
lib/atomic_assessments_import/exam_soft/chunker/strategy.rb,
lib/atomic_assessments_import/exam_soft/chunker/heading_split_strategy.rb,
lib/atomic_assessments_import/exam_soft/chunker/metadata_marker_strategy.rb,
lib/atomic_assessments_import/exam_soft/chunker/numbered_question_strategy.rb,
lib/atomic_assessments_import/exam_soft/chunker/horizontal_rule_split_strategy.rb
Defined Under Namespace
Classes: HeadingSplitStrategy, HorizontalRuleSplitStrategy, MetadataMarkerStrategy, NumberedQuestionStrategy, Strategy
Constant Summary collapse
- STRATEGIES =
[ MetadataMarkerStrategy, NumberedQuestionStrategy, HeadingSplitStrategy, HorizontalRuleSplitStrategy, ].freeze
Class Method Summary collapse
Class Method Details
.chunk(doc) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/atomic_assessments_import/exam_soft/chunker.rb', line 19 def self.chunk(doc) warnings = [] STRATEGIES.each do |strategy_class| strategy = strategy_class.new chunks = strategy.split(doc) next if chunks.empty? return { chunks: chunks, header_nodes: strategy.header_nodes, warnings: warnings, } end # No strategy matched — return entire document as one chunk all_nodes = doc.children.reject { |n| n.text.strip.empty? && !n.name.match?(/^(img|table|hr)$/i) } warnings << "No chunking strategy matched. Treating entire document as a single question." { chunks: [all_nodes], header_nodes: [], warnings: warnings, } end |