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 hindi.ex
Raw

lib/text/stemmer/stemmers/hindi.ex

# 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