# 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