# Parse
> **Universal data parser supporting documents, web content, structured data, emails, code, and media.**
---
## 🎯 Overview
The **Parse Module** extracts structured content from raw files and data sources. It converts various file formats (PDF, DOCX, HTML, JSON, etc.) into usable text and structured data for semantic processing.
### What is Document Parsing?
**Document parsing** is the process of extracting text, structure, and metadata from files. The parse module handles:
- **Documents**: PDF, DOCX, PPTX, Excel, TXT, RTF
- **Web Content**: HTML, XML, JavaScript-rendered pages
- **Structured Data**: JSON, CSV, XML, YAML
- **Email**: MIME messages with attachments
- **Code**: Source code parsing into ASTs
- **Media**: OCR for images, metadata for audio/video
### Why Use the Parse Module?
- **Universal Format Support**: Handle dozens of file formats
- **Structure Preservation**: Maintain document structure (tables, headings, etc.)
- **OCR Support**: Extract text from scanned documents and images
- **Metadata Extraction**: Extract document metadata (author, date, etc.)
- **Code Analysis**: Parse source code for structure and dependencies
- **Error Handling**: Robust handling of corrupted or malformed files
### How It Works
1. **Format Detection**: Automatically detect file format
2. **Parser Selection**: Choose appropriate parser for the format
3. **Content Extraction**: Extract text, structure, and metadata
4. **Normalization**: Normalize extracted content
5. **Output**: Return structured data ready for semantic processing
- :material-file-document:{ .lg .middle } **Document Parsing**
---
Extract text, tables, and metadata from PDF, DOCX, PPTX, Excel, and TXT
- :material-web:{ .lg .middle } **Web Content**
---
Parse HTML, XML, and JavaScript-rendered pages with Selenium/Playwright
- :material-code-json:{ .lg .middle } **Structured Data**
---
Handle JSON, CSV, XML, and YAML with nested structure preservation
- :material-email:{ .lg .middle } **Email Parsing**
---
Extract headers, bodies, attachments, and thread structure from MIME messages
- :material-code-braces:{ .lg .middle } **Code Analysis**
---
Parse source code (Python, JS, etc.) into ASTs, extracting functions and dependencies
- :material-image:{ .lg .middle } **Media Processing**
---
OCR for images and metadata extraction for audio/video files
!!! tip "When to Use"
- **After Ingestion**: The first step after loading raw files to convert them into usable text/data
- **Data Extraction**: Pulling specific fields from structured files (JSON/CSV)
- **Content Analysis**: Analyzing codebases or email archives
- **OCR**: Extracting text from scanned documents or images
---
## ⚙️ Algorithms Used
### Document Parsing
- **PDF**: `pdfplumber` for precise layout preservation, table extraction, and image handling. Fallback to `PyPDF2`.
- **Docling**: `docling` integration for advanced document structure understanding and high-accuracy table extraction across PDF, DOCX, PPTX, XLSX, and HTML.
- **Office (DOCX/PPTX/XLSX)**: XML-based parsing of OpenXML formats to extract text, styles, and properties.
- **OCR**: Tesseract-based optical character recognition for image-based PDFs and image files.
### Web Parsing
- **DOM Traversal**: BeautifulSoup for static HTML parsing and element extraction.
- **Headless Browser**: Selenium/Playwright for rendering dynamic JavaScript content before extraction.
- **Content Cleaning**: Heuristic removal of boilerplates (navbars, footers, ads).
### Code Parsing
- **AST Traversal**: Abstract Syntax Tree parsing to identify classes, functions, and imports.
- **Dependency Graphing**: Static analysis of import statements to build dependency networks.
- **Comment Extraction**: Regex and parser-based extraction of docstrings and inline comments.
---
## Main Classes
### DocumentParser
Unified interface for document formats.
**Methods:**
| Method | Description |
|--------|-------------|
| `` `parse_document(path)` `` | Auto-detect format and parse |
| `` `extract_text(path)` `` | Extract text from PDF/DOCX/HTML/TXT |
| `` `extract_metadata(path)` `` | Extract document metadata |
| `` `parse_batch(paths)` `` | Parse multiple documents |
**Example:**
```python
from semantica.parse import DocumentParser
parser = DocumentParser()
doc = parser.parse_document("report.pdf")
print(doc.get("metadata", {}).get("title"))
print(doc.get("full_text", "")[:100])
```
### DoclingParser
Specialized parser using Docling for enhanced layout understanding and table extraction. It is independent of `DocumentParser` and optimized for complex document structures.
**Methods:**
| Method | Description |
|--------|-------------|
| `` `parse(path)` `` | Full parse including text, tables, and metadata |
| `` `parse_batch(paths)` `` | Parse multiple documents in parallel |
| `` `extract_text(path)` `` | Extract clean text in Markdown/HTML/JSON format |
| `` `extract_tables(path)` `` | High-accuracy table extraction |
| `` `extract_metadata(path)` `` | Extract document properties |
**Configuration:**
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `export_format` | `str` | `"markdown"` | Output format: `"markdown"`, `"html"`, `"json"` |
| `enable_ocr` | `bool` | `False` | Enable OCR for scanned documents |
**Example:**
```python
from semantica.parse import DoclingParser
parser = DoclingParser()
result = parser.parse("complex_table.pdf")
# Access high-accuracy tables
for table in result["tables"]:
print(table["headers"])
# Get markdown representation
print(result["full_text"])
```
### WebParser
Parses web content.
**Methods:**
| Method | Description |
|--------|-------------|
| `` `parse_web_content(content, content_type)` `` | Parse HTML/XML |
| `` `extract_text(content)` `` | Clean text from HTML |
| `` `extract_links(content)` `` | Extract hyperlinks |
| `` `render_javascript(url)` `` | Render JS for dynamic pages |
### StructuredDataParser
Parses data files.
**Methods:**
| Method | Description |
|--------|-------------|
| `` `parse_data(path, data_format)` `` | Parse JSON/CSV/XML/YAML |
**Example:**
```python
from semantica.parse import StructuredDataParser
parser = StructuredDataParser()
data = parser.parse_data("data.json", data_format="json")
print(type(data.get("data"))).__name__
```
### CodeParser
Parses source code.
**Methods:**
| Method | Description |
|--------|-------------|
| `` `parse_code(path)` `` | Parse code file; returns structure, comments, dependencies |
**Example:**
```python
from semantica.parse import CodeParser
parser = CodeParser()
data = parser.parse_code("script.py", language="python")
print(data.get("structure", {}).get("functions", []))
print(data.get("dependencies", {}))
```
### EmailParser
Parses email messages.
**Methods:**
| Method | Description |
|--------|-------------|
| `` `parse_email(path)` `` | Parse full email (headers/body/attachments) |
| `` `parse_headers(path)` `` | Extract headers only |
| `` `extract_body(path)` `` | Extract text/HTML body |
| `` `analyze_thread(path)` `` | Thread reconstruction |
**Example:**
```python
from semantica.parse import EmailParser
parser = EmailParser()
email = parser.parse_email("email.eml", extract_attachments=True)
print(email.headers.subject)
print(email.body.text[:120])
```
### MediaParser
Parses media files.
**Methods:**
| Method | Description |
|--------|-------------|
| `` `parse_media(path, media_type)` `` | Parse image/audio/video |
**Example:**
```python
from semantica.parse import MediaParser
parser = MediaParser()
image = parser.parse_media("image.jpg", media_type="image")
print(image.get("metadata", {}))
```
### Format-Specific Parsers
- `PDFParser`, `DOCXParser`, `PPTXParser`, `ExcelParser`
- `HTMLParser`, `XMLParser`
- `JSONParser`, `CSVParser`
- `ImageParser`
**Examples:**
```python
from semantica.parse import DocumentParser, WebParser, StructuredDataParser
# Document
doc = DocumentParser().parse_document("document.pdf")
print(doc.get("full_text", "")[:120])
# Web
web = WebParser().parse_web_content("https://example.com", content_type="html")
print(web.get("text", "")[:120])
# Structured Data (JSON)
data = StructuredDataParser().parse_data("data.json", data_format="json")
print(list(data.get("data", {}).keys()))
```
---
## Usage Examples
### WebParser
```python
from semantica.parse import WebParser
parser = WebParser()
html = parser.parse_web_content("https://example.com", content_type="html")
links = parser.extract_links("https://example.com")
```
### StructuredDataParser
```python
from semantica.parse import StructuredDataParser
parser = StructuredDataParser()
json = parser.parse_data("data.json", data_format="json")
csv = parser.parse_data("data.csv", data_format="csv")
xml = parser.parse_data("data.xml", data_format="xml")
```
---
## Configuration
### Environment Variables
```bash
export PARSE_OCR_ENABLED=true
export PARSE_OCR_LANG=eng
export PARSE_USER_AGENT="SemanticaBot/1.0"
```
### YAML Configuration
```yaml
parse:
ocr:
enabled: true
language: eng
web:
user_agent: "MyBot/1.0"
timeout: 30
pdf:
extract_tables: true
extract_images: false
```
---
## Integration
Use parser classes directly in pipelines and services. Avoid convenience functions for stronger type clarity and consistency.
---
## Best Practices
1. Disable OCR if not needed; enable only for scanned documents.
2. Use specific parser classes like `JSONParser` or `PDFParser` when format is known.
3. Handle encodings explicitly for CSV/TXT where auto-detect may fail.
4. Clean web content using `WebParser` utilities rather than raw HTML parsing.
---
## Troubleshooting
**Issue**: `TesseractNotFoundError`
**Solution**: Install Tesseract OCR on your system (`apt-get install tesseract-ocr` or brew).
**Issue**: PDF tables are messy.
**Solution**: Try `pdfplumber` settings in config or use specialized table extraction tools if layout is complex.
---
## See Also
- [Ingest Module](ingest.md) - Handles file downloading/loading
- [Split Module](split.md) - Chunks the parsed text
- [Semantic Extract Module](semantic_extract.md) - Extracts entities from text
## Cookbook
Interactive tutorials to learn document parsing:
- **[Document Parsing](https://github.com/Hawksight-AI/semantica/blob/main/cookbook/introduction/03_Document_Parsing.ipynb)**: Extract clean text from complex formats
- **Topics**: OCR, PDF parsing, text extraction, format detection
- **Difficulty**: Beginner
- **Use Cases**: Processing documents, extracting text from various formats