Packages

An Elixir natural language processor.

Current section

Files

Jump to
gibran lib gibran.ex
Raw

lib/gibran.ex

defmodule Gibran do
@moduledoc ~S"""
This module includes shortcut functions that bridge `Gibran.Tokeniser` and `Gibran.Counter`.
This allows the caller to directly work with strings instead of tokenising the
input first before applying any calculations.
"""
import Gibran.Tokeniser
alias Gibran.Counter
@doc ~s"""
Takes a string and an atom that refers to any function name in `Gibran.Counter`.
It tokenises the string, then applies the given function to the resulting tokens. The function
name must be an `atom`. You can pass a list of options to the tokeniser as `opts` and a list
of options to the receiving function as `fn_opts`.
For example, the following two calls are equivalent:
Gibran.from_string("The Prophet", :token_count)
Gibran.Tokeniser.tokenise("The Prophet") |> Gibran.Counter.token_count
### Examples
iex> Gibran.from_string("The Prophet", :token_count)
2
iex> Gibran.from_string("The Prophet", :token_count, opts: [exclude: "the"])
1
iex> Gibran.from_string("Eye of The Prophet", :average_chars_per_token, fn_opts: [precision: 1])
3.8
iex> Gibran.from_string("Eye of The Prophet", :average_chars_per_token, opts: [exclude: "of"], fn_opts: [precision: 4])
4.3333
The following functions are available.
#{inspect Enum.map(Gibran.Counter.__info__(:functions), fn {name, arity} -> "#{name}/#{arity}" end)}
To view all available functions at anytime see `Gibran.Counter` or type the following into iex:
Gibran.Counter.__info__(:functions)
### Options
- `:opts` A list of options to pass on to the tokeniser. See `Gibran.Tokeniser.tokenise/2`.
- `:fn_opts` A list of options to pass onto the recieving function. See `Gibran.Counter`.
See `Gibran.Tokeniser.tokenise/2` and `Gibran.Counter` for more information.
"""
def from_string(input, func) do
Kernel.apply(Counter, func, [tokenise(input)])
end
def from_string(input, func, opts: opts) do
Kernel.apply(Counter, func, [tokenise(input, opts)])
end
def from_string(input, func, fn_opts: fn_opts) do
Kernel.apply(Counter, func, [tokenise(input), fn_opts])
end
def from_string(input, func, opts: opts, fn_opts: fn_opts) do
Kernel.apply(Counter, func, [tokenise(input, opts), fn_opts])
end
end