Class: ChunkerRuby::SlidingWindow

Inherits:
BaseSplitter show all
Defined in:
lib/chunker_ruby/sliding_window.rb

Instance Attribute Summary

Attributes inherited from BaseSplitter

#chunk_overlap, #chunk_size

Instance Method Summary collapse

Methods inherited from BaseSplitter

#split_many

Constructor Details

#initialize(stride: nil, **kwargs) ⇒ SlidingWindow

Returns a new instance of SlidingWindow.

Raises:

  • (ArgumentError)


5
6
7
8
9
# File 'lib/chunker_ruby/sliding_window.rb', line 5

def initialize(stride: nil, **kwargs)
  super(**kwargs)
  @stride = stride || (@chunk_size - @chunk_overlap)
  raise ArgumentError, "stride must be positive" unless @stride > 0
end

Instance Method Details

#split(text, metadata: {}) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/chunker_ruby/sliding_window.rb', line 11

def split(text, metadata: {})
  return [] if text.nil? || text.empty?

  chunks = []
  start = 0

  while start < text.length
    end_pos = [start + @chunk_size, text.length].min
    chunk_text = text[start...end_pos]

    chunks << Chunk.new(
      text: chunk_text,
      index: chunks.size,
      offset: start,
      metadata: .dup
    )

    break if end_pos >= text.length

    start += @stride
  end

  chunks
end