
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
ungraph
Advanced tools
Python framework for building Knowledge Graphs from unstructured text using Neo4j Cypher (property-graph query language), with alignment toward ISO GQL standards
Ungraph transforms unstructured documents into structured Lexical Graphs stored in Neo4j, enabling advanced information retrieval and semantic search through GraphRAG patterns. Built on the Extract-Transform-Inference (ETI) pattern, Ungraph goes beyond traditional ETL by adding an explicit inference phase (experimental) that generates traceable knowledge artifacts with PROV-O provenance.
Note: GraphRAG refers to retrieval patterns for expressing text in graph structures. Neo4j is the knowledge graph database where Ungraph stores the graphs (other graph databases can be supported).
Universal Knowledge Extraction: Ungraph is designed for any knowledge domain—scientific papers, financial reports, research literature, or any field requiring structured knowledge extraction.
Ungraph uses a File-Page-Chunk topology as its base graph structure, providing hierarchical document representation that preserves document structure while enabling granular semantic search. The framework implements the ETI pattern with full traceability, ensuring that every extracted fact can be traced back to its source document.
Ungraph is designed for:
Ungraph is domain-agnostic and designed to extract knowledge from any field: sciences, finance, quantum computing, machine learning, biomedical research, legal documents, or any other knowledge domain. The framework's inference phase enables domain-specific knowledge discovery through NER for general entities or LLM-based extraction for domain-specific relationships.
pip install ungraph
# Entity extraction and inference (spaCy NER)
pip install ungraph[infer]
python -m spacy download en_core_web_sm # or es_core_news_sm for Spanish
# Advanced search patterns (Neo4j GDS)
pip install ungraph[gds]
# Graph visualization in Jupyter
pip install ungraph[ynet]
# Development tools
pip install ungraph[dev]
# All extensions
pip install ungraph[all]
Docker (recommended):
docker run -d --name neo4j -p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/password neo4j:latest
Or download: Neo4j Desktop | Community Edition
import ungraph
ungraph.configure(
neo4j_uri="bolt://localhost:7687",
neo4j_user="neo4j",
neo4j_password="your_password",
neo4j_database="neo4j"
)
Or use environment variables:
export UNGRAPH_NEO4J_URI="bolt://localhost:7687"
export UNGRAPH_NEO4J_USER="neo4j"
export UNGRAPH_NEO4J_PASSWORD="your_password"
export UNGRAPH_NEO4J_DATABASE="neo4j"
Ungraph implements the Extract-Transform-Inference (ETI) pattern, an evolution of traditional ETL that explicitly adds an inference phase to generate traceable knowledge artifacts. This pattern addresses the fundamental need to transform information into a queryable format that goes beyond raw data—enabling knowledge extraction through LLMs, neuro-symbolic reasoning systems, and other inference mechanisms to discover new relationships within any knowledge domain.
The ETI pattern is designed for building traceable knowledge graphs with PROV-O provenance, making it suitable for any domain requiring reliable knowledge extraction: sciences, finance, quantum computing, machine learning, and beyond.
Extract text from documents and split into semantically meaningful chunks.
import ungraph
# Extract and chunk a document
chunks = ungraph.ingest_document("document.pdf")
print(f"Extracted {len(chunks)} chunks")
# Get intelligent chunking recommendations
recommendation = ungraph.suggest_chunking_strategy("document.md")
print(f"Strategy: {recommendation.strategy}")
print(f"Chunk size: {recommendation.chunk_size}")
Supported formats: Markdown, TXT, Word, PDF Features: Automatic encoding detection, intelligent chunking, text cleaning
Transform extracted chunks into a structured graph with embeddings and relationships.
import ungraph
# Transform document into graph (automatic with ingest_document)
chunks = ungraph.ingest_document("document.md")
# The graph structure is automatically created:
# File → Page → Chunk (with NEXT_CHUNK relationships)
# Each chunk has vector embeddings for semantic search
Graph Pattern:
File -[:CONTAINS]-> Page -[:HAS_CHUNK]-> Chunk
Chunk -[:NEXT_CHUNK]-> Chunk
Features: Vector embeddings (HuggingFace), configurable graph patterns, automatic indexing
Ungraph provides services that enable the construction of any graph pattern topology. These services allow you to define custom graph structures beyond the base File-Page-Chunk pattern, creating domain-specific knowledge graph topologies while maintaining traceability and provenance.
The Inference phase distinguishes ETI from traditional ETL. It generates normalized facts, relations, and explanations with confidence scores and PROV-O traceability using inference models (NER, LLM, or neuro-symbolic systems).
Current Status: The inference phase is experimental and available through internal APIs. The public API currently focuses on Extract and Transform phases, with inference capabilities being refined for future stable releases.
Key Capabilities (when inference is enabled):
wasDerivedFrom relationshipsInference Modes:
(chunk_id, "MENTIONS", entity_name) and co-occurrence relationships. Requires ungraph[infer] extra.Traceability: All inferred facts include provenance metadata, allowing you to trace any fact back to its source document, page, and chunk.
Note: For production use, Ungraph currently provides a robust Extract-Transform pipeline with GraphRAG retrieval patterns. The full ETI pipeline with public inference APIs is planned for future releases.
import ungraph
# Configure and ingest a document
ungraph.configure(neo4j_uri="bolt://localhost:7687", neo4j_password="your_password")
chunks = ungraph.ingest_document("document.pdf")
# Vector search (semantic similarity)
results = ungraph.vector_search("Apple Inc.", limit=5)
for result in results:
print(f"Content: {result.content}")
print(f"Score: {result.score:.3f}")
# Text search
results = ungraph.search("quantum computing", limit=5)
# Vector search (semantic similarity)
results = ungraph.vector_search("machine learning", limit=5)
# Hybrid search (text + vector)
results = ungraph.hybrid_search(
"artificial intelligence",
limit=10,
weights=(0.4, 0.6) # text_weight, vector_weight
)
# Basic Retriever: Direct vector search
results = ungraph.search_with_pattern(
"neural networks",
pattern_type="basic",
limit=5
)
# Parent-Child Retriever: Small chunks + full context
results = ungraph.search_with_pattern(
"quantum entanglement",
pattern_type="parent_child",
limit=3
)
# Graph-Enhanced Search (requires ungraph[gds])
results = ungraph.search_with_pattern(
"machine learning",
pattern_type="graph_enhanced",
limit=5,
max_traversal_depth=2
)
Ungraph implements the Extract-Transform-Inference (ETI) pattern, a research-driven approach to building traceable knowledge graphs. The ETI pattern is formally defined as a pipeline P = (E, T, I, O, M) where:
| Aspect | ETL (Traditional) | ETI (Ungraph) |
|---|---|---|
| Phases | Extract, Transform, Load | Extract, Transform, Infer |
| Objective | Prepare data for storage | Build traceable knowledge |
| Artifacts | Structured data | Facts, relations, explanations |
| Traceability | Limited (basic metadata) | Complete (PROV-O provenance) |
| Validation | Format verification | Knowledge validation |
| Reasoning | Not included | Explicit inference phase |
| Domain Focus | Data preparation | Knowledge construction |
Key Research Contributions:
For detailed research methodology, experimental design, and validation results, see the research article (in preparation).
Ungraph follows Clean Architecture principles:
src/
├── domain/ # Entities, Value Objects, Interfaces
├── application/ # Use cases
├── infrastructure/ # Neo4j, LangChain implementations
└── utils/ # Legacy code (being migrated)
Key Features:
ungraph[infer]), graph algorithms (ungraph[gds]), and visualization (ungraph[ynet])Contributions are welcome! Please see our contributing guidelines for code style, testing requirements, and pull request process.
MIT License
Alejandro Giraldo Londoño - alejandro@qnow.tech
If you use Ungraph in your research, please cite:
@software{ungraph2026,
author = {Giraldo Londoño, Alejandro},
title = {Ungraph: Knowledge Graph Construction with GraphRAG Patterns},
year = {2026},
note = {In preparation},
url = {https://github.com/Alejandro-qnow}
}
@article{giraldo2026eti,
author = {Giraldo Londoño, Alejandro},
title = {Extract-Transform-Inference: A Pattern for Building Traceable Knowledge Graphs in GraphRAG Systems},
journal = {arXiv preprint},
year = {2026},
note = {In preparation},
}
FAQs
Python framework for building Knowledge Graphs from unstructured text using Neo4j Cypher (property-graph query language), with alignment toward ISO GQL standards
We found that ungraph demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.