# FramexTools

Maintained by Erdal Turan.

`FramexTools` manages named corpus profiles for [Framex](https://hex.pm/packages/framex).
A profile selects frames, lexical units, exemplar limits, semantic-type closure,
and the frame relations needed to make a small, reproducible artifact.

FramexTools is an optional companion to the read-only `framex` query package.
It does not embed the full FrameNet corpus in Hex.

## Install

```elixir
def deps do
  [
    {:framex_tools, "~> 0.1.1"}
  ]
end
```

## Choose a corpus source

The core `framex` package already includes a small demo corpus. Install
FramexTools when the application needs to fetch either the focused profile
artifact or the complete FrameNet release through Mix.

FramexTools has two corpus modes. Use a named profile when the application
needs a reproducible, focused corpus definition:

```bash
mix framex.tools.fetch --corpus_profile demo_en_17
```

`--corpus_profile NAME` selects the profile JSON bundled with FramexTools. The
profile records the FrameNet release, selected frames, lexical-unit IDs,
example limits, and the release checksum. The current fetch task verifies that
release and places its source data under the consumer project's
`priv/corpora`; profile-based artifact reduction is the next builder step.

Use the full-source mode when working with the complete release rather than a
named selection:

```bash
mix framex.tools.fetch --corpus_full
```

`--corpus_full` is the explicit full-release mode. It downloads and verifies
the complete FrameNet release without applying a profile selection. The two
switches are mutually exclusive.

The user-facing facade in a consumer project is also available as:

```bash
mix framex.corpus.fetch --full
mix framex.corpus.fetch --corpus_full
```

Both full-corpus switches are equivalent. `--corpus_profile NAME` selects the
small profile artifact.

The default destination is the consumer Mix project's `priv/corpora`.
Set `FRAMEX_CORPORA_DIR` when a different corpus root is needed.

After fetching, the source corpus is available at:

```text
priv/corpora/framenet-1.7-streamed
```

The profile definition remains bundled under the dependency's `priv/profiles`;
the downloaded source data belongs to the consumer project's `priv` tree.

## Inspect a profile

```bash
mix framex.tools.profiles --corpus_profile demo_en_17
```

The profile name is the only required selector. `demo_en_17` resolves its
source corpus, bundled profile definition, and output directory automatically.

## Plan a profile expansion

```bash
mix framex.tools.expand --corpus_profile demo_en_17 hope.v
```

The default is a dry run. It reports the selected lexical unit, frame, valence
patterns, semantic-type records, and raw FrameNet relation fields. Add
`--apply` to update the profile selection after reviewing the plan.

```bash
mix framex.tools.expand --corpus_profile demo_en_17 hope.v --apply
```

The full FrameNet source data is licensed separately under CC BY 3.0 Unported;
the FramexTools code is licensed under Apache-2.0.
