mirror of
https://github.com/semantica-agi/semantica.git
synced 2026-08-29 04:26:20 +00:00
Replace plain markdown in every docs/reference/ file and docs/concepts.md with rich Mintlify JSX components — CardGroup, Steps, Tabs, AccordionGroup, Tip, Warning, Note, and CodeGroup — for a consistent, navigable, production-grade developer experience.
12 KiB
12 KiB
title, description, icon
| title | description | icon |
|---|---|---|
| Parse Module | Document parsing and text extraction — DocumentParser for standard formats and DoclingParser for complex layouts. | file-lines |
semantica.parse extracts structured text, layout, tables, and metadata from unstructured documents. DocumentParser handles clean machine-readable files; DoclingParser handles complex layouts, scanned PDFs, and multi-column documents.
What You Get
Standard parser for PDF, DOCX, HTML, TXT, JSON, CSV, PPTX, XLSX — zero config, no extras. Advanced parser for complex layouts, merged-cell tables, multi-column PDFs, and OCR. AST structure extraction — functions, classes, imports, dependencies — for 10+ languages. EXIF metadata extraction and OCR via Tesseract for image files. Technical metadata from audio, video, and image files (duration, codec, resolution). Parse Model Context Protocol responses into structured `ParsedDocument` objects.Quick Start
```python from semantica.parse import DocumentParserparser = DocumentParser()
parsed = parser.parse("data/report.pdf")
print(parsed.text) # full clean text
print(parsed.metadata) # title, author, date, page_count, language, etc.
print(parsed.sections) # document structure as a list of Section objects
```
```python
from semantica.parse import DoclingParser
parser = DoclingParser(
extract_tables=True, # structured table extraction with cell type detection
extract_images=True, # extract image regions for downstream OCR
output_format="markdown", # "markdown" | "html" | "json"
)
parsed = parser.parse("data/annual_report.pdf")
print(parsed.tables) # structured TableData objects with headers and rows
```
splitter = TextSplitter(method="structural")
chunks = splitter.split_document(parsed)
llm = Groq(model="llama-3.3-70b-versatile", api_key=os.getenv("GROQ_API_KEY"))
extractor = NERExtractor(method="llm", llm_provider=llm)
entities = extractor.extract_batch([c.text for c in chunks])
```
Parser Reference
Standard parser for clean, machine-readable documents — no extra dependencies required:```python
from semantica.parse import DocumentParser
parser = DocumentParser()
parsed = parser.parse("data/report.pdf")
print(parsed.text) # full clean text
print(parsed.metadata) # title, author, date, page_count, language, etc.
print(parsed.sections) # document structure as a list of Section objects
```
**Supported formats:** PDF, DOCX, HTML, TXT, JSON, CSV, PPTX, XLSX.
```python
from semantica.parse import DoclingParser
parser = DoclingParser(
extract_tables=True, # structured table extraction with cell type detection
extract_images=True, # extract image regions for downstream OCR
output_format="markdown", # "markdown" | "html" | "json"
)
parsed = parser.parse("data/annual_report.pdf")
print(parsed.tables) # structured TableData objects with headers and rows
print(parsed.sections) # document structure with heading hierarchy
```
**Use `DoclingParser` for:**
- Multi-column PDF layouts
- Tables with merged cells or complex headers
- PPTX slides with embedded charts
- XLSX spreadsheets with formulas
- Scanned documents with OCR
- Academic papers and technical reports
**OCR support:**
```python
parser = DoclingParser(
ocr=True,
ocr_language=["en"], # ISO 639-1 codes; list for multi-language documents
extract_tables=True,
)
parsed = parser.parse("data/scanned_contract.pdf")
```
```python
from semantica.parse import CodeParser
parser = CodeParser(
extract_comments=True, # include docstrings and inline comments
extract_dependencies=True, # import/require statements
language="auto", # "auto" | "python" | "javascript" | "java" | "go" | "rust" | "cpp"
)
parsed = parser.parse("src/main.py")
print(parsed.text) # raw source code as text
print(parsed.metadata["language"]) # detected language
print(parsed.metadata["functions"]) # list of function names
print(parsed.metadata["classes"]) # list of class names
print(parsed.metadata["imports"]) # list of import statements
print(parsed.metadata["comments"]) # docstrings and inline comments
```
**Supported languages:** Python, JavaScript/TypeScript, Java, Go, Rust, C/C++, C#, Ruby, PHP, Swift.
```python
from semantica.parse import ImageParser
parser = ImageParser(
extract_exif=True, # camera, GPS, timestamps, etc.
ocr=True, # OCR via Tesseract (requires tesseract-ocr installed)
ocr_language="en", # ISO 639-1 language code for OCR
)
parsed = parser.parse("photo.jpg")
print(parsed.text) # OCR-extracted text (if ocr=True)
print(parsed.metadata["width"]) # image dimensions
print(parsed.metadata["height"])
print(parsed.metadata["format"]) # "JPEG" | "PNG" | "TIFF" | ...
print(parsed.metadata["exif"]["GPS"]) # GPS coordinates if available
print(parsed.metadata["exif"]["DateTime"])
```
Extract technical metadata from audio, video, and image files:
```python
from semantica.parse import MediaParser
parser = MediaParser()
# Video file
parsed = parser.parse("interview.mp4")
print(parsed.metadata["duration_seconds"])
print(parsed.metadata["codec"])
print(parsed.metadata["resolution"])
print(parsed.metadata["fps"])
# Audio file
parsed = parser.parse("podcast.mp3")
print(parsed.metadata["duration_seconds"])
print(parsed.metadata["bitrate"])
print(parsed.metadata["channels"])
```
**Supported formats:** MP4, AVI, MOV, MKV, MP3, WAV, FLAC, OGG, JPEG, PNG, TIFF, WebP.
### MCPParser
Parse Model Context Protocol (MCP) responses into structured `ParsedDocument` objects:
```python
from semantica.parse import MCPParser
parser = MCPParser()
mcp_response = {
"content": [{"type": "text", "text": "Apple Inc. was founded in 1976..."}],
"metadata": {"tool": "web_search", "query": "Apple Inc history"}
}
parsed = parser.parse(mcp_response)
print(parsed.text) # "Apple Inc. was founded in 1976..."
print(parsed.metadata) # tool name, query, and other MCP metadata
```
Parsed Document Schema
@dataclass
class ParsedDocument:
text: str # full extracted text
sections: List[Section] # heading-based document structure
tables: List[TableData] # structured table data (DoclingParser only)
metadata: DocumentMetadata # title, author, dates, page count
source_id: str # links back to the original DataSource
@dataclass
class DocumentMetadata:
title: Optional[str]
author: Optional[str]
created_date: Optional[datetime]
page_count: int
language: Optional[str] # ISO 639-1 code
has_tables: bool
has_images: bool
word_count: int
format: str # "pdf" | "docx" | "pptx" | ...
Choosing a Parser
| Scenario | Parser |
|---|---|
| Clean PDFs, DOCX, HTML, TXT, CSV, Excel | DocumentParser — zero config, no extras |
| Scanned PDFs, OCR required | DoclingParser(ocr=True) — requires pip install "semantica[docling]" |
| Multi-column PDFs, merged-cell tables | DoclingParser(extract_tables=True) |
| Source code files | CodeParser(language="auto") |
| Images with embedded text | ImageParser(ocr=True) — requires Tesseract |
| Audio/video metadata | MediaParser() |
| MCP tool responses | MCPParser() |
Integration with FileIngestor
The most common pattern — ingest a directory then parse each source:
from semantica.ingest import FileIngestor
from semantica.parse import DoclingParser
ingestor = FileIngestor()
parser = DoclingParser(extract_tables=True)
sources = ingestor.ingest("data/reports/")
for source in sources:
parsed = parser.parse(source)
# → parsed.text, parsed.tables, parsed.sections