Packages

Pre-compiled Snowball stemmers for Elixir. Ships 36 stemming algorithms covering a wide range of natural languages, accessible through a single `Text.Stemmer.stem/2` entry point.

Current section

Files

Jump to
text_stemmer lib text stemmer stemmers armenian.ex
Raw

lib/text/stemmer/stemmers/armenian.ex

# Generated by Snowball.Generator — do not edit by hand.
defmodule Text.Stemmer.Stemmers.Armenian do
@moduledoc """
Snowball stemmer for armenian.
Generated from the canonical Snowball algorithm source.
"""
alias Snowball.Runtime
alias Snowball.Grouping
# Groupings
@g_v Grouping.from_string("աէիօւեոը")
# Among tables
@a_0 [
{"եր", -1, 1, nil},
{"ներ", 0, 1, nil},
{"ց", -1, 1, nil},
{"ուց", 2, 1, nil},
{"ից", 2, 1, nil},
{"երից", 4, 1, nil},
{"ներից", 5, 1, nil},
{"ցից", 4, 1, nil},
{"վանից", 4, 1, nil},
{"ոջից", 4, 1, nil},
{"վից", 4, 1, nil},
{"ոց", 2, 1, nil},
{"սա", -1, 1, nil},
{"վա", -1, 1, nil},
{"ամբ", -1, 1, nil},
{"դ", -1, 1, nil},
{"երդ", 15, 1, nil},
{"ներդ", 16, 1, nil},
{"ուդ", 15, 1, nil},
{"անդ", 15, 1, nil},
{"ությանդ", 19, 1, nil},
{"վանդ", 19, 1, nil},
{"ոջդ", 15, 1, nil},
{"ը", -1, 1, nil},
{"երը", 23, 1, nil},
{"ները", 24, 1, nil},
{"անը", 23, 1, nil},
{"ությանը", 26, 1, nil},
{"վանը", 26, 1, nil},
{"ոջը", 23, 1, nil},
{"ի", -1, 1, nil},
{"երի", 30, 1, nil},
{"ների", 31, 1, nil},
{"վի", 30, 1, nil},
{"երում", -1, 1, nil},
{"ներում", 34, 1, nil},
{"անում", -1, 1, nil},
{"ն", -1, 1, nil},
{"երն", 37, 1, nil},
{"ներն", 38, 1, nil},
{"ուն", 37, 1, nil},
{"ան", 37, 1, nil},
{"ության", 41, 1, nil},
{"վան", 41, 1, nil},
{"ին", 37, 1, nil},
{"երին", 44, 1, nil},
{"ներին", 45, 1, nil},
{"ությանն", 37, 1, nil},
{"ոջ", -1, 1, nil},
{"ությանս", -1, 1, nil},
{"վանս", -1, 1, nil},
{"ոջս", -1, 1, nil},
{"ով", -1, 1, nil},
{"երով", 52, 1, nil},
{"ներով", 53, 1, nil},
{"անով", 52, 1, nil},
{"վով", 52, 1, nil}
]
@a_1 [
{"գար", -1, 1, nil},
{"վոր", -1, 1, nil},
{"ավոր", 1, 1, nil},
{"անօց", -1, 1, nil},
{"ոց", -1, 1, nil},
{"ու", -1, 1, nil},
{"ք", -1, 1, nil},
{"արք", 6, 1, nil},
{"չեք", 6, 1, nil},
{"իք", 6, 1, nil},
{"ալիք", 9, 1, nil},
{"անիք", 9, 1, nil},
{"վածք", 6, 1, nil},
{"ույք", 6, 1, nil},
{"ունք", 6, 1, nil},
{"մունք", 14, 1, nil},
{"ենք", 6, 1, nil},
{"ոնք", 6, 1, nil},
{"իչք", 6, 1, nil},
{"որդ", -1, 1, nil},
{"ույթ", -1, 1, nil},
{"ցի", -1, 1, nil},
{"ուհի", -1, 1, nil},
{"իլ", -1, 1, nil},
{"ուկ", -1, 1, nil},
{"ակ", -1, 1, nil},
{"յակ", 25, 1, nil},
{"անակ", 25, 1, nil},
{"իկ", -1, 1, nil},
{"յուն", -1, 1, nil},
{"ություն", 29, 1, nil},
{"ան", -1, 1, nil},
{"արան", 31, 1, nil},
{"պան", 31, 1, nil},
{"ստան", 31, 1, nil},
{"եղէն", -1, 1, nil},
{"ածո", -1, 1, nil},
{"իչ", -1, 1, nil},
{"ուս", -1, 1, nil},
{"ուստ", -1, 1, nil}
]
@a_2 [
{"ար", -1, 1, nil},
{"ացար", 0, 1, nil},
{"եցար", 0, 1, nil},
{"ացրիր", -1, 1, nil},
{"ացիր", -1, 1, nil},
{"եցիր", -1, 1, nil},
{"վեցիր", 5, 1, nil},
{"ալուց", -1, 1, nil},
{"ելուց", -1, 1, nil},
{"աց", -1, 1, nil},
{"եց", -1, 1, nil},
{"ացրեց", 10, 1, nil},
{"ալու", -1, 1, nil},
{"ելու", -1, 1, nil},
{"աք", -1, 1, nil},
{"ցաք", 14, 1, nil},
{"ացաք", 15, 1, nil},
{"ացրիք", -1, 1, nil},
{"ացիք", -1, 1, nil},
{"եցիք", -1, 1, nil},
{"վեցիք", 19, 1, nil},
{"անք", -1, 1, nil},
{"ցանք", 21, 1, nil},
{"ացանք", 22, 1, nil},
{"ացրինք", -1, 1, nil},
{"ացինք", -1, 1, nil},
{"եցինք", -1, 1, nil},
{"վեցինք", 26, 1, nil},
{"ա", -1, 1, nil},
{"ացա", 28, 1, nil},
{"եցա", 28, 1, nil},
{"վե", -1, 1, nil},
{"ացրի", -1, 1, nil},
{"ացի", -1, 1, nil},
{"եցի", -1, 1, nil},
{"վեցի", 34, 1, nil},
{"ալ", -1, 1, nil},
{"ըալ", 36, 1, nil},
{"ացնալ", 36, 1, nil},
{"անալ", 36, 1, nil},
{"ենալ", 36, 1, nil},
{"ել", -1, 1, nil},
{"ըել", 41, 1, nil},
{"նել", 41, 1, nil},
{"ցնել", 43, 1, nil},
{"եցնել", 44, 1, nil},
{"չել", 41, 1, nil},
{"վել", 41, 1, nil},
{"ացվել", 47, 1, nil},
{"եցվել", 47, 1, nil},
{"տել", 41, 1, nil},
{"ատել", 50, 1, nil},
{"ոտել", 50, 1, nil},
{"կոտել", 52, 1, nil},
{"ված", -1, 1, nil},
{"ում", -1, 1, nil},
{"վում", 55, 1, nil},
{"ան", -1, 1, nil},
{"ցան", 57, 1, nil},
{"ացան", 58, 1, nil},
{"ացրին", -1, 1, nil},
{"ացին", -1, 1, nil},
{"եցին", -1, 1, nil},
{"վեցին", 62, 1, nil},
{"ալիս", -1, 1, nil},
{"ելիս", -1, 1, nil},
{"ավ", -1, 1, nil},
{"ացավ", 66, 1, nil},
{"եցավ", 66, 1, nil},
{"ալով", -1, 1, nil},
{"ելով", -1, 1, nil}
]
@a_3 [
{"բար", -1, 1, nil},
{"րորդ", -1, 1, nil},
{"երորդ", 1, 1, nil},
{"ալի", -1, 1, nil},
{"ակի", -1, 1, nil},
{"որակ", -1, 1, nil},
{"եղ", -1, 1, nil},
{"վուն", -1, 1, nil},
{"արան", -1, 1, nil},
{"ական", -1, 1, nil},
{"են", -1, 1, nil},
{"երեն", 10, 1, nil},
{"եկեն", 10, 1, nil},
{"որէն", -1, 1, nil},
{"ին", -1, 1, nil},
{"գին", 14, 1, nil},
{"ովին", 14, 1, nil},
{"լայն", -1, 1, nil},
{"պես", -1, 1, nil},
{"իվ", -1, 1, nil},
{"ատ", -1, 1, nil},
{"ավետ", -1, 1, nil},
{"կոտ", -1, 1, nil}
]
@doc """
Stem a word.
### Arguments
* `word` is a UTF-8 binary.
### Returns
* The stemmed UTF-8 binary.
"""
@spec stem(binary()) :: binary()
def stem(word) when is_binary(word) do
state = Runtime.new(word) |> init_vars()
state = run_stem(state)
Runtime.assign_to(state)
end
defp init_vars(state), do: %{state | vars: %{p2: 0, pV: 0}}
defp run_stem(%Runtime{} = state) do
{_, state} = r_stem(state)
state
end
# Snowball runtime helpers.
defp snowball_do_f(state, fun) do
saved_c = state.cursor
{_, s} = fun.(state)
%{s | cursor: saved_c}
end
defp snowball_do_b(state, fun) do
rel = state.limit - state.cursor
{_, s} = fun.(state)
%{s | cursor: s.limit - rel}
end
defp next_codepoint(%Runtime{cursor: c, limit: lim, current: cur} = state) do
case Runtime.codepoint_at(cur, c, lim) do
{_cp, size} -> {:ok, %{state | cursor: c + size}}
:error -> {:fail, state}
end
end
defp r_ending(%Runtime{} = state) do
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_0) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case (fn state ->
r_R2(state)
end).(state) do
{:ok, state} ->
case result do
1 ->
{:ok, Runtime.slice_del(state)}
_ -> {:ok, state}
end
r -> r
end
end
end).()
end
defp r_noun(%Runtime{} = state) do
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_1) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_del(state)}
_ -> {:ok, state}
end
end
end).()
end
defp r_verb(%Runtime{} = state) do
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_2) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_del(state)}
_ -> {:ok, state}
end
end
end).()
end
defp r_adjective(%Runtime{} = state) do
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_3) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_del(state)}
_ -> {:ok, state}
end
end
end).()
end
defp r_R2(%Runtime{} = state) do
if state.vars[:p2] <= state.cursor, do: {:ok, state}, else: {:fail, state}
end
defp r_mark_regions(%Runtime{} = state) do
case (fn state ->
{:ok, put_in(state.vars[:pV], state.limit)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, put_in(state.vars[:p2], state.limit)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
case (fn state ->
case Runtime.go_out_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, put_in(state.vars[:pV], state.cursor)}
end).(state) do
{:ok, state} ->
case (fn state ->
case Runtime.go_in_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
case (fn state ->
case Runtime.go_out_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
case (fn state ->
case Runtime.go_in_grouping(state, @g_v) do
:fail -> {:fail, state}
%Runtime{} = s -> next_codepoint(s)
end
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:p2], state.cursor)}
r -> r
end
r -> r
end
r -> r
end
end
r -> r
end
end)}
end
end
end
defp r_stem(%Runtime{} = state) do
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_mark_regions(state)
end)}
end).(state) do
{:ok, state} ->
(fn state ->
old_cursor = state.cursor
old_lb = state.limit_backward
state = %{state | cursor: state.limit, limit_backward: old_cursor}
{tag, s} = (fn state ->
(fn ->
case (fn state ->
(fn ->
target = state.vars[:pV]
if target < state.limit_backward or target > state.limit do
{:fail, state}
else
{:ok, %{state | cursor: target}}
end
end).()
end).(state) do
{:fail, _} -> {:fail, state}
{:ok, limit_state} ->
old_lb = state.limit_backward
state = %{state | limit_backward: limit_state.cursor}
case (fn state ->
case (fn state ->
{:ok, snowball_do_b(state, fn state ->
r_ending(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_b(state, fn state ->
r_verb(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_b(state, fn state ->
r_adjective(state)
end)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_b(state, fn state ->
r_noun(state)
end)}
end
end
end
end).(state) do
{:ok, s} -> {:ok, %{s | limit_backward: old_lb}}
end
end
end).()
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end
end
end