# Generated by Snowball.Generator — do not edit by hand. defmodule Text.Stemmer.Stemmers.Hindi do @moduledoc """ Snowball stemmer for hindi. Generated from the canonical Snowball algorithm source. """ alias Snowball.Runtime alias Snowball.Grouping # Groupings @g_consonant Grouping.from_string("कखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहऴऩऱऴक़ख़ग़ज़ड़ढ़फ़य़") # Among tables defp a_0 do [ {"ी", -1, -1, nil}, {"ूंगी", 0, -1, nil}, {"ेंगी", 0, -1, nil}, {"ऊंगी", 0, -1, nil}, {"आऊंगी", 3, -1, nil}, {"ाऊंगी", 3, -1, nil}, {"एंगी", 0, -1, nil}, {"आएंगी", 6, -1, nil}, {"ाएंगी", 6, -1, nil}, {"ेगी", 0, -1, nil}, {"ोगी", 0, -1, nil}, {"एगी", 0, -1, nil}, {"आएगी", 11, -1, nil}, {"ाएगी", 11, -1, nil}, {"ओगी", 0, -1, nil}, {"आओगी", 14, -1, nil}, {"ाओगी", 14, -1, nil}, {"ती", 0, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अती", 17, -1, nil}, {"आती", 17, -1, nil}, {"ाती", 17, -1, nil}, {"नी", 0, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अनी", 21, -1, nil}, {"आँ", -1, -1, nil}, {"ाँ", -1, -1, nil}, {"इयाँ", 24, -1, nil}, {"आइयाँ", 25, -1, nil}, {"ाइयाँ", 25, -1, nil}, {"ियाँ", 24, -1, nil}, {"ु", -1, -1, nil}, {"ीं", -1, -1, nil}, {"तीं", 30, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अतीं", 31, -1, nil}, {"आतीं", 31, -1, nil}, {"ातीं", 31, -1, nil}, {"आं", -1, -1, nil}, {"ुआं", 35, -1, nil}, {"उआं", 35, -1, nil}, {"ें", -1, -1, nil}, {"ईं", -1, -1, nil}, {"आईं", 39, -1, nil}, {"ाईं", 39, -1, nil}, {"ों", -1, -1, nil}, {"इयों", 42, -1, nil}, {"आइयों", 43, -1, nil}, {"ाइयों", 43, -1, nil}, {"ियों", 42, -1, nil}, {"एं", -1, -1, nil}, {"ुएं", 47, -1, nil}, {"आएं", 47, -1, nil}, {"उएं", 47, -1, nil}, {"ाएं", 47, -1, nil}, {"ताएं", 51, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अताएं", 52, -1, nil}, {"नाएं", 51, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अनाएं", 54, -1, nil}, {"ओं", -1, -1, nil}, {"ुओं", 56, -1, nil}, {"आओं", 56, -1, nil}, {"उओं", 56, -1, nil}, {"ाओं", 56, -1, nil}, {"ताओं", 60, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अताओं", 61, -1, nil}, {"नाओं", 60, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अनाओं", 63, -1, nil}, {"ां", -1, -1, nil}, {"इयां", 65, -1, nil}, {"आइयां", 66, -1, nil}, {"ाइयां", 66, -1, nil}, {"ियां", 65, -1, nil}, {"ू", -1, -1, nil}, {"अ", -1, -1, nil}, {"आ", -1, -1, nil}, {"इ", -1, -1, nil}, {"े", -1, -1, nil}, {"ेंगे", 74, -1, nil}, {"एंगे", 74, -1, nil}, {"आएंगे", 76, -1, nil}, {"ाएंगे", 76, -1, nil}, {"ोगे", 74, -1, nil}, {"ओगे", 74, -1, nil}, {"आओगे", 80, -1, nil}, {"ाओगे", 80, -1, nil}, {"ते", 74, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अते", 83, -1, nil}, {"आते", 83, -1, nil}, {"ाते", 83, -1, nil}, {"ने", 74, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अने", 87, -1, nil}, {"आने", 87, -1, nil}, {"ाने", 87, -1, nil}, {"ई", -1, -1, nil}, {"आई", 91, -1, nil}, {"ाई", 91, -1, nil}, {"उ", -1, -1, nil}, {"ऊ", -1, -1, nil}, {"ो", -1, -1, nil}, {"्", -1, -1, nil}, {"ए", -1, -1, nil}, {"आए", 98, -1, nil}, {"इए", 98, -1, nil}, {"आइए", 100, -1, nil}, {"ाइए", 100, -1, nil}, {"ाए", 98, -1, nil}, {"िए", 98, -1, nil}, {"ओ", -1, -1, nil}, {"आओ", 105, -1, nil}, {"ाओ", 105, -1, nil}, {"कर", -1, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अकर", 108, -1, nil}, {"आकर", 108, -1, nil}, {"ाकर", 108, -1, nil}, {"ा", -1, -1, nil}, {"ूंगा", 112, -1, nil}, {"ऊंगा", 112, -1, nil}, {"आऊंगा", 114, -1, nil}, {"ाऊंगा", 114, -1, nil}, {"ेगा", 112, -1, nil}, {"एगा", 112, -1, nil}, {"आएगा", 118, -1, nil}, {"ाएगा", 118, -1, nil}, {"ता", 112, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अता", 121, -1, nil}, {"आता", 121, -1, nil}, {"ाता", 121, -1, nil}, {"ना", 112, -1, fn state -> case r_CONSONANT(state) do {:ok, s} -> s; _ -> :fail end end}, {"अना", 125, -1, nil}, {"आना", 125, -1, nil}, {"ाना", 125, -1, nil}, {"आया", 112, -1, nil}, {"ाया", 112, -1, nil}, {"ि", -1, -1, nil} ] end @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 lift(state, :fail), do: {:fail, state} defp lift(_state, %Runtime{} = s), do: {:ok, s} 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_CONSONANT(%Runtime{} = state) do lift(state, Runtime.in_grouping_b(state, @g_consonant)) end defp r_stem(%Runtime{} = state) do case (fn state -> next_codepoint(state) 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 -> case (fn state -> (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} {:ok, state} end end).() end).(state) do {:ok, state} -> {:ok, Runtime.slice_del(state)} r -> r end end).(state) {tag, %{s | cursor: old_cursor, limit_backward: old_lb}} end).(state) r -> r end end end