ef.segmenter_adapters

The segmenter dependency-injection seam and the imbed registry bridge.

as_segmenter() is the single place ef coerces a user-supplied segmenter argument into a well-behaved Segmenter — the exact mirror of as_embedder() for the embed layer.

imbed_segmenter() builds a segmenter from imbed’s segmenter registry (imbed.components.segmentation); imbed is imported lazily, so importing this module costs nothing extra and ef works without imbed installed.

Example — the DI seam in action (no imbed needed):

>>> from ef.segmenters import Segmenter, RecursiveCharacterSegmenter
>>> seg = as_segmenter('recursive', chunk_size=256)
>>> isinstance(seg, RecursiveCharacterSegmenter)
True
>>> as_segmenter(seg) is seg          # a ready segmenter passes straight through
True
>>> custom = as_segmenter(lambda text: text.split('|'))
>>> [s['text'] for s in custom('a|b|c')]
['a', 'b', 'c']

Functions

as_segmenter([x])

Normalize x into a Segmenter — the DI seam.

imbed_segmenter([name])

Build a Segmenter from imbed's segmenter registry.

ef.segmenter_adapters.as_segmenter(x=None, /, **kwargs)[source]

Normalize x into a Segmenter — the DI seam.

The single place every ef entry point coerces a user-supplied segmenter argument. Accepts, in order:

  1. None or "default" / "recursive" — a RecursiveCharacterSegmenter (the default);

  2. "lines" — line_segmenter();

  3. any other string — looked up in imbed’s registry via imbed_segmenter();

  4. a ready-made segmenter (a BaseSegmenter or a callable marked by ef) — returned unchanged;

  5. a bare callable — wrapped in FunctionSegmenter.

Extra **kwargs are forwarded to the chosen factory (ignored when x is already a segmenter).

Raises:

TypeError – if x is none of the above.

Return type:

Segmenter

>>> seg = as_segmenter(chunk_size=256, chunk_overlap=32)
>>> (seg.chunk_size, seg.chunk_overlap)
(256, 32)
Return type:

Segmenter

ef.segmenter_adapters.imbed_segmenter(name='default', /, **kwargs)[source]

Build a Segmenter from imbed’s segmenter registry.

imbed’s registered segmenters are bare text -> Iterable[str] callables; this wraps the named one in a FunctionSegmenter so it emits well-formed Segment pieces.

Parameters:
  • name (str) – A key in imbed.components.segmentation.segmenters ("default" resolves to imbed’s configured default segmenter).

  • **kwargs (Any) – Forwarded to FunctionSegmenter.

Raises:
Return type:

Segmenter

Requires the imbed package (pip install 'ef[imbed]').