Jskalc

Jskalc

ExtractousEx - a NIF wrapper around Extractous Rust library extracting text from files

Hi everyone :waving_hand: I’ve just released ExtractousEx, an Elixir library for extracting text and metadata from various document formats using the Rust-based Extractous library. There are some other libraries doing this, just they were either not supporting all Extractous options, or not providing precompiled Rust binaries. This project aims to provide 100% coverage of options available in Extractous library.

Fun fact: Extractous itself is based on Apache Tika compiled using GraalVM to the native code. So, in reality we’re able to run Java code through Rust in Elixir with a performance of a native function :exploding_head:
Key Features:

  • Extract from PDF, Office docs, HTML, CSV, Markdown, EPUB, and more
  • ~18x faster than unstructured-io with ~11x less memory usage
  • Precompiled binaries for macOS, Linux, and Windows (no Rust compilation needed)
  • Extract from files, bytes, or URLs with identical APIs
  • Optional XML output preserving document structure

Installation:

{:extractous_ex, “~> 0.2.0”}

Usage:

{:ok, result} = ExtractousEx.extract_from_file(“document.pdf”)

IO.puts(result.content)
# "This is my content"

IO.inspect(result.metadata)
# %{
#  "Content-Length" => ["7335065"],
#  "access_permission:extract_for_accessibility" => ["true"],
#  "access_permission:modify_annotations" => ["true"],
#  "pdf:docinfo:modified" => ["2025-04-07T14:20:54Z"],
#  ...
}


# Extract from binary data in memory
{:ok, data} = File.read("document.pdf")
{:ok, result} = ExtractousEx.extract_from_bytes(data)

# With options
{:ok, result} = ExtractousEx.extract_from_url(url, xml: true, pdf: [ocr_strategy: "NO_OCR"])

Available on extractous_ex | Hex with full documentation on ExtractousEx v0.2.0 — Documentation.

PS I would greatly appreciate a :star: on github! :hugs:

https://github.com/Valian/extractous_ex

Where Next?

Popular in Announcing Top

sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
977 41022 311
New
halostatue
Enviable is a small collection of functions to make working with environment variables easier when configuring Elixir projects. It is des...
New
fteschke
Announcing: playwright_ex A simple Elixir client for the Playwright node.js server. Automate browsers like Chromium, Firefox, Safari an...
New
sonic182
Hi everyone, at Doofinder we have been building llm_composer for some new apps, and we thought it could be useful to share it with the co...
New
mikehostetler
Hey everyone! I’m excited to share ReqLLM - a new approach to LLM interactions in Elixir that I’ve been working on. After building agent...
New
mikehostetler
LLM DB - LLM Model Metadata Package This package was extracted out of the ReqLLM project. LLM DB is a model metadata catalog with fast, ...
New
mindreframer
ElixirProto: Protobuf-Inspired Serialization for Elixir Events I wanted to have an Elixir-native serialization for events, that also supp...
New
murrgelb
Efx is a library to define and test side effects declaratively. It is basically a very focused mocking framework, reducing implementation...
New
corka149
A JSON patch is a way to define a sequence of manipulating operations on a JavaScript object. The IETF published the RFC 6902 - found he...
New
germsvel
PhoenixTest provides a unified way of writing feature tests – regardless of whether you’re testing LiveView pages or static pages. It al...
New

Other popular topics Top

Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
977 41022 311
New
srinivasu
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
_russellb
I want to try my hand at web scraping. What tools/libraries do I need to use. I’m hoping to turn this into something professional so don’...
New
vac
Hi, I'm quite new in Elixir and I'm trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and ...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
Nvim
Elixir appears to be a superior language to Python. I don’t see any advantage of Python over Elixir. Are there any?
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement