# `Obscura.NLP.Engine`
[🔗](https://github.com/hfiguera/obscura/blob/v0.2.0/lib/obscura/nlp/engine.ex#L1)

Behaviour and dispatcher for analyzer-level NLP artifact engines.

Presidio runs NLP once and passes shared artifacts to recognizers. Obscura's
default engine remains dependency-light tokenization, while optional engines
can attach model outputs for recognizers such as `Obscura.Recognizer.NER`.

# `build_artifacts`

```elixir
@callback build_artifacts(
  String.t(),
  keyword()
) :: {:ok, Obscura.NLP.Artifacts.t()} | {:error, term()}
```

# `build_many`
*optional* 

```elixir
@callback build_many(
  [String.t()],
  keyword()
) :: {:ok, [Obscura.NLP.Artifacts.t()]} | {:error, term()}
```

# `build_artifacts`

```elixir
@spec build_artifacts(
  String.t(),
  keyword()
) :: {:ok, Obscura.NLP.Artifacts.t()} | {:error, term()}
```

Builds artifacts for one text using explicit artifacts, a configured engine,
or the dependency-light tokenizer.

# `build_many`

```elixir
@spec build_many(
  [String.t()],
  keyword()
) :: {:ok, [Obscura.NLP.Artifacts.t()]} | {:error, term()}
```

Builds artifacts for many texts while preserving input order.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
