Skip to main content

Graph-based corpus engine for annotated text with efficient traversal and search

Project description

Context Fabric

Context-Fabric

A graph-based corpus engine for annotated text with efficient traversal and search.

Overview

Context-Fabric provides a powerful data model for working with annotated text corpora as graphs. It enables efficient navigation, feature lookup, and pattern-based search across large textual datasets.

Forked from Dirk Roorda's Text-Fabric.

Installation

pip install context-fabric

Quick Start

from cfabric.core import Fabric

# Load a dataset
TF = Fabric(locations='path/to/data')
api = TF.load('feature1 feature2')

# Navigate nodes
for node in api.N():
    print(api.F.feature1.v(node))

# Use locality
embedders = api.L.u(node)
embedded = api.L.d(node)

Core API

  • N (Nodes) - Walk through nodes in canonical order
  • F (Features) - Access node feature values
  • E (Edges) - Access edge feature values
  • L (Locality) - Navigate between related nodes
  • T (Text) - Retrieve text representations
  • S (Search) - Search using templates

Performance

Context-Fabric uses memory-mapped numpy arrays for dramatically faster loading and reduced memory consumption compared to Text-Fabric's pickle-based caching.

Benchmarks (BHSA Hebrew Bible corpus — 1.4M nodes, 109 features)

Metric Text-Fabric Context-Fabric Improvement
Load Time 7.0s 2.4s 2.9x faster
Memory Usage 6.1 GB 1.6 GB 74% reduction
Compile Time 7s 91s 13x slower
Cache Size 138 MB 859 MB 6.2x larger

Performance Comparison

The key insight: compilation happens once, loading happens every session. Context-Fabric optimizes for the common case with:

  • Memory-mapped arrays: Data stays on disk, accessed on-demand
  • Efficient sparse iteration: Uses numpy vectorized operations instead of Python loops
  • Cached materialization: Dictionary views computed once per session

Parallel Worker Scaling

Memory-mapped arrays enable efficient parallel processing. Multiple workers share the same mmap'd data instead of each loading a full copy into RAM.

Spawn mode (cold start — each worker loads independently):

Metric Text-Fabric Context-Fabric Savings
Total (4 workers) 9.8 GB 3.3 GB 66% less
Per worker 2.5 GB 821 MB 3x less

Fork mode (API scenario — pre-load then fork workers):

Metric Text-Fabric Context-Fabric Savings
Total (4 workers) 5.8 GB 440 MB 92% less
Per worker 1.5 GB 110 MB 13x less

Measured with USS (Unique Set Size) which correctly excludes shared mmap pages.

Run the benchmark yourself:

python benchmarks/compare_performance.py --source path/to/tf/data --workers 4

Testing

See TESTING.md for how to run tests.

Authors

  • Cody Kingham
  • Dirk Roorda

License

MIT License - see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

context_fabric-0.2.1.tar.gz (126.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

context_fabric-0.2.1-py3-none-any.whl (144.1 kB view details)

Uploaded Python 3

File details

Details for the file context_fabric-0.2.1.tar.gz.

File metadata

  • Download URL: context_fabric-0.2.1.tar.gz
  • Upload date:
  • Size: 126.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for context_fabric-0.2.1.tar.gz
Algorithm Hash digest
SHA256 96c00a4696d59fbf67a9cbaa5f2bfa9a8ad134da8b086c6fcc6d74e5538be2ca
MD5 2404ddc1af1bbddbcbb40a05e2fd5a96
BLAKE2b-256 bfa4faa9006002699bab5240dfdaad25acdf4db681e4bf0e9a2a03cc6bf07c8a

See more details on using hashes here.

File details

Details for the file context_fabric-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: context_fabric-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 144.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for context_fabric-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 245ab3ba5d6cb2adc01598f23a84275ab964a4b273031552cf1d65dd29f47595
MD5 0ef1d278364642f1d0f4ff261954bef9
BLAKE2b-256 a291b3adefe57120597765afc991ac5435bebaa0b3b62aed88e65f61ae90af2c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page