extracthero
Extract accurate, structured facts from messy real-world content — raw HTML, screenshots, PDFs, JSON blobs or plain text — with almost zero compromise.
--
Why extracthero?
| Pain-point | extracthero's answer |
|---|---|
| DOM spaghetti (ads, nav bars, JS widgets) pollutes extraction. Markdown converters drop dynamic/JS-rendered elements. | We use a rule-based DomReducer to remove non-content related HTML tags. This process is custom tailored to not destroy any structural data including tables etc. In general this gives us 20% reduction in size. Markdown converting operations are too vague to trust for prod and they usually dismiss useful data. |
| Needle in haystack is common problem. If you overwork a LLM, it can hallucinate or start outputting unstructured garbage which breaks production. | We define extraction in 2 phases. First phase is context aware filtering, and second phase is parsing this filtered data. Since LLM processes less data, the attention mechanism works better as well and more accurate results. |
| LLM prompts that just say "extract price" are brittle because in real life scenarios extraction logic is more complex and dependent on other variables. | Extracthero asks you to fill WhatToRetain specifications that include the field's name, desc, and optional text_rules, so the LLM knows the full context and returns sniper-accurate results. |
| In real life, source data comes in different formats (JSON, strings, dicts, HTML) and each requires different optimization strategies. | ExtractHero handles each data format intelligently. You can input JSON and if it can extract keys directly, it will use a fast-path. If it doesn't find what you need, you can use fallback mechanisms to route it to LLM processing for extraction. |
| Post-hoc validation is messy. | Regex/type guards live inside each WhatToRetain; a failed field flips success=False, so you can retry or send to manual review. |
Key ideas
1 Schema-first extraction
from extracthero import WhatToRetain
price_spec = WhatToRetain(
name="price",
desc="currency-prefixed current product price",
regex_validator=r"€\d+\.\d{2}",
text_rules=[
"Ignore crossed-out promotional prices",
"Return the live price only"
],
example="€49.99"
)
Metadata
Release files for extracthero 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| extracthero-0.1.8.tar.gz | 38.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| extracthero-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 81.2 kB
Release files / extracthero-0.1.8.tar.gz
| Download URL | extracthero-0.1.8.tar.gz |
|---|---|
| Size | 38.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bdcd83f3751143980c772e88f2f2924729b160e432de7ba31a3e953f870c0de9
|
|
BLAKE2b-256 checksum How to use checksums |
be2b065739113a390585c7abee77b7c88758430d2361273125b94e65b8142d4c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.23
|
Release files / extracthero-0.1.8-py3-none-any.whl
| Download URL | extracthero-0.1.8-py3-none-any.whl |
|---|---|
| Size | 42.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2c105f4e8b406d2ac4a9eb6c40e5c51f42ed543d65cd69c586814c5d653c221d
|
|
BLAKE2b-256 checksum How to use checksums |
cfe5affc39c995a5cf8f980eabb074e0fb8ee7b4f9859bebcbc27028505a40b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.23
|