mirror of
https://github.com/hanzoai/extract-svc.git
synced 2026-10-30 18:36:53 +00:00
Document text extraction service. Drop-in replacement for Huly's rekoni — listens on :4004 and serves /v1/extract, /v1/extract/url, /v1/health. - Pure Go, no CGo, no shelled binaries - Format detection by magic bytes (filename ignored) - PDF via ledongthuc/pdf; DOCX/XLSX/PPTX via native ZIP+XML walk; HTML via x/net/html with script/style strip; RTF via small native parser; plain text and markdown pass-through - Bearer JWT auth against IAM JWKS (RS256/RS512), 10m cache - 25 MB streaming upload cap, distroless static runtime - Tests for every format (real fixtures in testdata/) Image OCR is out of scope for v0.1 and returns HTTP 415.
26 lines
702 B
Go
26 lines
702 B
Go
// Plain text and Markdown pass-through. We don't strip Markdown
|
|
// syntax — downstream indexers handle that more accurately, and the
|
|
// rekoni contract was "return what you got, just decoded".
|
|
package extract
|
|
|
|
import "strings"
|
|
|
|
type textExtractor struct{}
|
|
type markdownExtractor struct{}
|
|
|
|
func init() {
|
|
register(FormatText, textExtractor{})
|
|
register(FormatMarkdown, markdownExtractor{})
|
|
}
|
|
|
|
func (textExtractor) Extract(data []byte) (Result, error) {
|
|
return Result{Text: strings.TrimSpace(string(data))}, nil
|
|
}
|
|
|
|
func (markdownExtractor) Extract(data []byte) (Result, error) {
|
|
return Result{
|
|
Text: strings.TrimSpace(string(data)),
|
|
Metadata: map[string]any{"syntax": "markdown"},
|
|
}, nil
|
|
}
|