Packages
text_stemmer
0.1.0
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
Current section
Files
lib/text/stemmer/stemmers/nepali.ex
# Generated by Snowball.Generator — do not edit by hand.
defmodule Text.Stemmer.Stemmers.Nepali do
@moduledoc """
Snowball stemmer for nepali.
Generated from the canonical Snowball algorithm source.
"""
alias Snowball.Runtime
# Among tables
@a_0 [
{"ेकी", -1, 1, nil},
{"एकी", -1, 1, nil},
{"इएकी", 1, 1, nil},
{"िएकी", 1, 1, nil},
{"देखी", -1, 1, nil},
{"थी", -1, 1, nil},
{"दी", -1, 1, nil},
{"छु", -1, 1, nil},
{"ेछु", 7, 1, nil},
{"नेछु", 8, 1, nil},
{"एछु", 7, 1, nil},
{"नु", -1, 1, nil},
{"हरु", -1, 1, nil},
{"हरू", -1, 1, nil},
{"छे", -1, 1, nil},
{"थे", -1, 1, nil},
{"ने", -1, 1, nil},
{"ेकै", -1, 1, nil},
{"नेकै", 17, 1, nil},
{"एकै", -1, 1, nil},
{"दै", -1, 1, nil},
{"इदै", 20, 1, nil},
{"िदै", 20, 1, nil},
{"ेको", -1, 1, nil},
{"नेको", 23, 1, nil},
{"एको", -1, 1, nil},
{"इएको", 25, 1, nil},
{"िएको", 25, 1, nil},
{"दो", -1, 1, nil},
{"इदो", 28, 1, nil},
{"िदो", 28, 1, nil},
{"यो", -1, 1, nil},
{"इयो", 31, 1, nil},
{"थ्यो", 31, 1, nil},
{"भयो", 31, 1, nil},
{"ियो", 31, 1, nil},
{"थियो", 35, 1, nil},
{"दियो", 35, 1, nil},
{"छौ", -1, 1, nil},
{"इछौ", 38, 1, nil},
{"ेछौ", 38, 1, nil},
{"नेछौ", 40, 1, nil},
{"एछौ", 38, 1, nil},
{"िछौ", 38, 1, nil},
{"यौ", -1, 1, nil},
{"छ्यौ", 44, 1, nil},
{"थ्यौ", 44, 1, nil},
{"थियौ", 44, 1, nil},
{"छन्", -1, 1, nil},
{"इछन्", 48, 1, nil},
{"ेछन्", 48, 1, nil},
{"नेछन्", 50, 1, nil},
{"एछन्", 48, 1, nil},
{"िछन्", 48, 1, nil},
{"लान्", -1, 1, nil},
{"छिन्", -1, 1, nil},
{"थिन्", -1, 1, nil},
{"पर्", -1, 1, nil},
{"इस्", -1, 1, nil},
{"थिइस्", 58, 1, nil},
{"छेस्", -1, 1, nil},
{"होस्", -1, 1, nil},
{"छस्", -1, 1, nil},
{"इछस्", 62, 1, nil},
{"ेछस्", 62, 1, nil},
{"नेछस्", 64, 1, nil},
{"एछस्", 62, 1, nil},
{"िछस्", 62, 1, nil},
{"िस्", -1, 1, nil},
{"थिस्", 68, 1, nil},
{"थिए", -1, 1, nil},
{"छ", -1, 1, nil},
{"इछ", 71, 1, nil},
{"ेछ", 71, 1, nil},
{"नेछ", 73, 1, nil},
{"हुनेछ", 74, 1, nil},
{"हुन्छ", 71, 1, nil},
{"इन्छ", 71, 1, nil},
{"िन्छ", 71, 1, nil},
{"एछ", 71, 1, nil},
{"िछ", 71, 1, nil},
{"ेका", -1, 1, nil},
{"नेका", 81, 1, nil},
{"एका", -1, 1, nil},
{"इएका", 83, 1, nil},
{"िएका", 83, 1, nil},
{"दा", -1, 1, nil},
{"इदा", 86, 1, nil},
{"िदा", 86, 1, nil},
{"देखि", -1, 1, nil},
{"माथि", -1, 1, nil}
]
@a_1 [
{"ँ", -1, 1, nil},
{"ं", -1, 1, nil},
{"ै", -1, 2, nil}
]
@a_2 [
{"की", -1, 2, nil},
{"लाइ", -1, 1, nil},
{"ले", -1, 1, nil},
{"लाई", -1, 1, nil},
{"कै", -1, 2, nil},
{"सँगै", -1, 1, nil},
{"मै", -1, 1, nil},
{"को", -1, 2, nil},
{"सँग", -1, 1, nil},
{"संग", -1, 1, nil},
{"मार्फत", -1, 1, nil},
{"रत", -1, 1, nil},
{"का", -1, 2, nil},
{"मा", -1, 1, nil},
{"द्वारा", -1, 1, nil},
{"कि", -1, 2, 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
defp run_stem(%Runtime{} = state) do
{_, state} = r_stem(state)
state
end
# Snowball runtime helpers.
defp snowball_do_b(state, fun) do
rel = state.limit - state.cursor
{_, s} = fun.(state)
%{s | cursor: s.limit - rel}
end
defp snowball_or(state, fun1, fun2) do
rel = state.limit - state.cursor
case fun1.(state) do
{:ok, s} -> {:ok, s}
{:fail, s} -> fun2.(%{s | cursor: s.limit - rel})
end
end
defp lift(state, :fail), do: {:fail, state}
defp lift(_state, %Runtime{} = s), do: {:ok, s}
defp r_remove_category_3(%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 result do
1 ->
{:ok, Runtime.slice_del(state)}
_ -> {:ok, state}
end
end
end).()
end
defp r_remove_category_2(%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 ->
case (fn state ->
snowball_or(state,
fn state ->
snowball_or(state,
fn state ->
snowball_or(state,
fn state ->
lift(state, Runtime.eq_s_b(state, "यौ"))
end,
fn state ->
lift(state, Runtime.eq_s_b(state, "छौ"))
end)
end,
fn state ->
lift(state, Runtime.eq_s_b(state, "नौ"))
end)
end,
fn state ->
lift(state, Runtime.eq_s_b(state, "थे"))
end)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
2 ->
case (fn state ->
lift(state, Runtime.eq_s_b(state, "त्र"))
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
_ -> {:ok, state}
end
end
end).()
end
defp r_remove_category_1(%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)}
2 ->
snowball_or(state,
fn state ->
snowball_or(state,
fn state ->
lift(state, Runtime.eq_s_b(state, "ए"))
end,
fn state ->
lift(state, Runtime.eq_s_b(state, "े"))
end)
end,
fn state ->
{:ok, Runtime.slice_del(state)}
end)
_ -> {:ok, state}
end
end
end).()
end
defp r_stem(%Runtime{} = state) do
(fn state ->
old_cursor = state.cursor
old_lb = state.limit_backward
state = %{state | cursor: state.limit, limit_backward: old_cursor}
{tag, s} = (fn state ->
case (fn state ->
{:ok, snowball_do_b(state, fn state ->
r_remove_category_1(state)
end)}
end).(state) do
{:ok, state} ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
case (fn state ->
case (fn state ->
{:ok, snowball_do_b(state, fn state ->
r_remove_category_2(state)
end)}
end).(state) do
{:ok, state} ->
r_remove_category_3(state)
end
end).(state) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, s} -> {:ok, %{s | cursor: state.cursor}}
end
end)
end
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end
end