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

lib/text/stemmer/stemmers/tamil.ex

# Generated by Snowball.Generator — do not edit by hand.
defmodule Text.Stemmer.Stemmers.Tamil do
@moduledoc """
Snowball stemmer for tamil.
Generated from the canonical Snowball algorithm source.
"""
alias Snowball.Runtime
# Among tables
@a_0 [
{"வு", -1, 3, nil},
{"வூ", -1, 4, nil},
{"வொ", -1, 2, nil},
{"வோ", -1, 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},
{"ம", -1, -1, nil},
{"ய", -1, -1, nil},
{"வ", -1, -1, nil}
]
@a_2 [
{"ீ", -1, -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}
]
@a_4 [
{"", -1, 3, nil},
{"ை", 0, 1, nil},
{"்", 0, 2, nil}
]
@a_5 [
{"னு", -1, 10, nil},
{"ுக்", -1, 8, nil},
{"ுக்க்", -1, 8, nil},
{"ட்க்", -1, 3, nil},
{"ற்க்", -1, 5, nil},
{"ங்", -1, 11, nil},
{"ட்ட்", -1, 6, nil},
{"த்த்", -1, 7, nil},
{"ந்த்", -1, 1, nil},
{"ந்", -1, 1, nil},
{"ட்ப்", -1, 3, nil},
{"ய்", -1, 2, nil},
{"ன்ற்", -1, 4, nil},
{"வ்", -1, 9, nil},
{"ந்த", -1, 1, nil},
{"ய", -1, 9, nil},
{"வ", -1, 9, nil}
]
@a_6 [
{"க", -1, -1, nil},
{"ச", -1, -1, nil},
{"ட", -1, -1, nil},
{"த", -1, -1, nil},
{"ப", -1, -1, nil},
{"ற", -1, -1, nil}
]
@a_7 [
{"க", -1, -1, nil},
{"ச", -1, -1, nil},
{"ட", -1, -1, nil},
{"த", -1, -1, nil},
{"ப", -1, -1, nil},
{"ற", -1, -1, nil}
]
@a_8 [
{"ஞ", -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}
]
@a_9 [
{"ீ", -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}
]
@a_10 [
{"அ", -1, -1, nil},
{"இ", -1, -1, nil},
{"உ", -1, -1, nil}
]
@a_11 [
{"க", -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}
]
@a_12 [
{"க", -1, -1, nil},
{"ச", -1, -1, nil},
{"ட", -1, -1, nil},
{"த", -1, -1, nil},
{"ப", -1, -1, nil},
{"ற", -1, -1, nil}
]
@a_13 [
{"கள்", -1, 4, nil},
{"ுங்கள்", 0, 1, nil},
{"ட்கள்", 0, 3, nil},
{"ற்கள்", 0, 2, nil}
]
@a_14 [
{"ே", -1, -1, nil},
{"ோ", -1, -1, nil},
{"ா", -1, -1, nil}
]
@a_15 [
{"பி", -1, -1, nil},
{"வி", -1, -1, nil}
]
@a_16 [
{"ீ", -1, -1, nil},
{"ு", -1, -1, nil},
{"ூ", -1, -1, nil},
{"ெ", -1, -1, nil},
{"ே", -1, -1, nil},
{"ை", -1, -1, nil},
{"ா", -1, -1, nil},
{"ி", -1, -1, nil}
]
@a_17 [
{"பட்டு", -1, 3, nil},
{"விட்டு", -1, 3, nil},
{"படு", -1, 3, nil},
{"விடு", -1, 3, nil},
{"பட்டது", -1, 3, nil},
{"ென்று", -1, 1, nil},
{"ுடை", -1, 1, nil},
{"ில்லை", -1, 1, nil},
{"ுடன்", -1, 1, nil},
{"ெனும்", -1, 1, nil},
{"ிடம்", -1, 1, nil},
{"ெல்லாம்", -1, 3, nil},
{"பட்ட", -1, 3, nil},
{"பட்டண", -1, 3, nil},
{"ென", -1, 1, nil},
{"தான", -1, 3, nil},
{"படிதான", 15, 3, nil},
{"ுடைய", -1, 1, nil},
{"ாகிய", -1, 1, nil},
{"குரிய", -1, 3, nil},
{"ல்ல", -1, 2, nil},
{"ுள்ள", -1, 1, nil},
{"ாகி", -1, 1, nil},
{"படி", -1, 3, nil},
{"ின்றி", -1, 1, nil},
{"பற்றி", -1, 3, nil}
]
@a_18 [
{"ீ", -1, -1, nil},
{"ு", -1, -1, nil},
{"ூ", -1, -1, nil},
{"ெ", -1, -1, nil},
{"ே", -1, -1, nil},
{"ை", -1, -1, nil},
{"ா", -1, -1, nil},
{"ி", -1, -1, nil}
]
@a_19 [
{"ீ", -1, -1, nil},
{"ு", -1, -1, nil},
{"ூ", -1, -1, nil},
{"ெ", -1, -1, nil},
{"ே", -1, -1, nil},
{"ை", -1, -1, nil},
{"ா", -1, -1, nil},
{"ி", -1, -1, nil}
]
@a_20 [
{"ீ", -1, 8, nil},
{"ொடு", -1, 2, nil},
{"ோடு", -1, 2, nil},
{"து", -1, 7, nil},
{"ிருந்து", 3, 2, nil},
{"ின்று", -1, 2, nil},
{"ுடை", -1, 2, nil},
{"னை", -1, 1, nil},
{"கண்", -1, 6, nil},
{"முன்", -1, 6, nil},
{"ின்", -1, 3, nil},
{"ிடம்", -1, 4, nil},
{"மேற்", -1, 6, nil},
{"ிற்", -1, 2, nil},
{"ல்", -1, 5, nil},
{"மேல்", 14, 6, nil},
{"ாமல்", 14, 2, nil},
{"ால்", 14, 2, nil},
{"ில்", 14, 2, nil},
{"ுள்", -1, 2, nil},
{"கீழ்", -1, 6, nil},
{"விட", -1, 2, nil}
]
@a_21 [
{"க", -1, -1, nil},
{"ச", -1, -1, nil},
{"ட", -1, -1, nil},
{"த", -1, -1, nil},
{"ப", -1, -1, nil},
{"ற", -1, -1, nil}
]
@a_22 [
{"க", -1, -1, nil},
{"ச", -1, -1, nil},
{"ட", -1, -1, nil},
{"த", -1, -1, nil},
{"ப", -1, -1, nil},
{"ற", -1, -1, nil}
]
@a_23 [
{"அ", -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},
{"ஔ", -1, -1, nil}
]
@a_24 [
{"ீ", -1, -1, nil},
{"ு", -1, -1, nil},
{"ூ", -1, -1, nil},
{"ெ", -1, -1, nil},
{"ே", -1, -1, nil},
{"ை", -1, -1, nil},
{"ா", -1, -1, nil},
{"ி", -1, -1, nil}
]
@a_25 [
{"கு", -1, 6, nil},
{"படு", -1, 1, nil},
{"து", -1, 3, nil},
{"ிற்று", -1, 1, nil},
{"னை", -1, 1, nil},
{"வை", -1, 1, nil},
{"னென்", -1, 1, nil},
{"ேன்", -1, 5, nil},
{"னன்", -1, 1, nil},
{"பன்", -1, 1, nil},
{"வன்", -1, 2, nil},
{"ான்", -1, 4, nil},
{"னான்", 11, 1, nil},
{"மின்", -1, 1, nil},
{"கும்", -1, 1, nil},
{"டும்", -1, 5, nil},
{"தும்", -1, 1, nil},
{"றும்", -1, 1, nil},
{"ெம்", -1, 5, nil},
{"ேம்", -1, 5, nil},
{"ோம்", -1, 5, nil},
{"னம்", -1, 1, nil},
{"பம்", -1, 1, nil},
{"ாம்", -1, 5, nil},
{"ாய்", -1, 5, nil},
{"ீர்", -1, 5, nil},
{"னர்", -1, 1, nil},
{"பர்", -1, 1, nil},
{"ீயர்", -1, 5, nil},
{"வர்", -1, 1, nil},
{"ார்", -1, 5, nil},
{"னார்", 30, 1, nil},
{"மார்", 30, 1, nil},
{"கொண்டிர்", -1, 1, nil},
{"னிர்", -1, 5, nil},
{"னள்", -1, 1, nil},
{"பள்", -1, 1, nil},
{"வள்", -1, 1, nil},
{"ாள்", -1, 5, nil},
{"னாள்", 38, 1, nil},
{"க", -1, 1, nil},
{"த", -1, 1, nil},
{"ன", -1, 1, nil},
{"ப", -1, 1, nil},
{"ய", -1, 1, nil},
{"ா", -1, 5, nil}
]
@a_26 [
{"கின்ற்", -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: %{found_a_match: false, found_vetrumai_urupu: false}}
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 snowball_test_b(state, fun) do
rel = state.limit - state.cursor
case fun.(state) do
{:ok, s} -> {:ok, %{s | cursor: s.limit - rel}}
{:fail, s} -> {:fail, %{s | cursor: s.limit - rel}}
end
end
defp snowball_try(state, fun) do
rel = state.limit - state.cursor
case fun.(state) do
{:ok, s} -> s
{:fail, s} -> %{s | cursor: s.limit - rel}
end
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_has_min_length(%Runtime{} = state) do
if Runtime.codepoint_length(state.current) > 4, do: {:ok, state}, else: {:fail, state}
end
defp r_fix_va_start(%Runtime{} = state) do
(fn ->
state = %{state | bra: state.cursor}
case Runtime.find_among(state, @a_0) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | ket: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_from(state, "ஓ")}
2 ->
{:ok, Runtime.slice_from(state, "ஒ")}
3 ->
{:ok, Runtime.slice_from(state, "உ")}
4 ->
{:ok, Runtime.slice_from(state, "ஊ")}
_ -> {:ok, state}
end
end
end).()
end
defp r_fix_endings(%Runtime{} = state) do
{:ok, snowball_do_f(state, fn state ->
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
case (fn state ->
r_fix_ending(state)
end).(state) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, s} -> {:ok, %{s | cursor: state.cursor}}
end
end)
end)}
end
defp r_remove_question_prefixes(%Runtime{} = state) do
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s(state, "எ"))
end).(state) do
{:ok, state} ->
case (fn state ->
(fn ->
case Runtime.find_among(state, @a_1) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s(state, "்"))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, Runtime.slice_del(state)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
r_fix_va_start(state)
end)}
end
end
r -> r
end
r -> r
end
r -> r
end
end
end
defp r_fix_ending(%Runtime{} = state) do
case (fn state ->
if Runtime.codepoint_length(state.current) > 3, do: {:ok, state}, else: {:fail, 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 ->
snowball_or(state,
fn state ->
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_5) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_del(state)}
2 ->
case (fn state ->
snowball_test_b(state, fn state ->
(fn ->
case Runtime.find_among_b(state, @a_2) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
3 ->
{:ok, Runtime.slice_from(state, "ள்")}
4 ->
{:ok, Runtime.slice_from(state, "ல்")}
5 ->
{:ok, Runtime.slice_from(state, "ல்")}
6 ->
{:ok, Runtime.slice_from(state, "டு")}
7 ->
case (fn state ->
if state.vars[:found_vetrumai_urupu], do: {:ok, state}, else: {:fail, state}
end).(state) do
{:ok, state} ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
lift(state, Runtime.eq_s_b(state, "ை"))
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "ம்")}
r -> r
end
r -> r
end
8 ->
{:ok, Runtime.slice_from(state, "்")}
9 ->
{:ok, Runtime.slice_del(state)}
10 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_3) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
11 ->
(fn ->
case Runtime.find_among_b(state, @a_4) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = s
case result do
1 ->
{:ok, Runtime.slice_del(state)}
2 ->
{:ok, Runtime.slice_del(state)}
3 ->
{:ok, Runtime.slice_from(state, "ம்")}
_ -> {:ok, s}
end
end
end).()
_ -> {:ok, state}
end
end
end).()
end,
fn state ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s_b(state, "்"))
end).(state) do
{:ok, state} ->
snowball_or(state,
fn state ->
snowball_or(state,
fn state ->
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_6) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_try(state, fn state ->
case (fn state ->
lift(state, Runtime.eq_s_b(state, "்"))
end).(state) do
{:ok, state} ->
(fn ->
case Runtime.find_among_b(state, @a_7) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
r -> r
end
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
end
end
r -> r
end
end,
fn state ->
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_8) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s_b(state, "்"))
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
end
r -> r
end
end)
end,
fn state ->
case (fn state ->
snowball_test_b(state, fn state ->
(fn ->
case Runtime.find_among_b(state, @a_9) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
end
r -> r
end
end)
r -> r
end
end
end)
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
r -> r
end
end
defp r_remove_pronoun_prefixes(%Runtime{} = state) do
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
(fn ->
case Runtime.find_among(state, @a_10) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
case (fn state ->
(fn ->
case Runtime.find_among(state, @a_11) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s(state, "்"))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, Runtime.slice_del(state)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
r_fix_va_start(state)
end)}
end
end
r -> r
end
r -> r
end
r -> r
end
end
end
defp r_remove_plural_suffix(%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 ->
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_13) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
snowball_or(state,
fn state ->
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_12) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "ுங்")}
r -> r
end
end,
fn state ->
{:ok, Runtime.slice_from(state, "்")}
end)
2 ->
{:ok, Runtime.slice_from(state, "ல்")}
3 ->
{:ok, Runtime.slice_from(state, "ள்")}
4 ->
{:ok, Runtime.slice_del(state)}
_ -> {:ok, state}
end
end
end).()
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end
defp r_remove_question_suffixes(%Runtime{} = state) do
case (fn state ->
r_has_min_length(state)
end).(state) do
{:ok, state} ->
case (fn 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 ->
{:ok, snowball_do_b(state, fn state ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_14) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
end
r -> r
end
end
end)}
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
r_fix_endings(state)
end)}
end
r -> r
end
end
defp r_remove_command_suffixes(%Runtime{} = state) do
case (fn state ->
r_has_min_length(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 ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_15) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
end
r -> r
end
end
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
r -> r
end
end
defp r_remove_um(%Runtime{} = state) do
case (fn state ->
r_has_min_length(state)
end).(state) do
{:ok, state} ->
case (fn 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 ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s_b(state, "ும்"))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
end
r -> r
end
end
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
r_fix_ending(state)
end)}
r -> r
end
r -> r
end
end
defp r_remove_common_word_endings(%Runtime{} = state) do
case (fn state ->
r_has_min_length(state)
end).(state) do
{:ok, state} ->
case (fn 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 ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_17) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_from(state, "்")}
2 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_16) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
r -> r
end
3 ->
{:ok, Runtime.slice_del(state)}
_ -> {:ok, state}
end
end
end).()
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
r_fix_endings(state)
end)}
r -> r
end
r -> r
end
end
defp r_remove_vetrumai_urupukal(%Runtime{} = state) do
case (fn state ->
{:ok, put_in(state.vars[:found_vetrumai_urupu], false)}
end).(state) do
{:ok, state} ->
case (fn state ->
r_has_min_length(state)
end).(state) do
{:ok, state} ->
case (fn 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 ->
snowball_or(state,
fn state ->
snowball_test_b(state, fn state ->
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_20) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_del(state)}
2 ->
{:ok, Runtime.slice_from(state, "்")}
3 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
lift(state, Runtime.eq_s_b(state, "ம"))
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
r -> r
end
4 ->
case (fn state ->
if Runtime.codepoint_length(state.current) >= 7, do: {:ok, state}, else: {:fail, state}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
r -> r
end
5 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_18) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
r -> r
end
6 ->
{:ok, Runtime.slice_del(state)}
7 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_19) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
8 ->
{:ok, Runtime.slice_from(state, "ி")}
_ -> {:ok, state}
end
end
end).()
end)
end,
fn state ->
snowball_test_b(state, fn state ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s_b(state, "ை"))
end).(state) do
{:ok, state} ->
case (fn state ->
snowball_or(state,
fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_21) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end,
fn state ->
snowball_test_b(state, fn state ->
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_22) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
lift(state, Runtime.eq_s_b(state, "்"))
r -> r
end
end)
end)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
end
r -> r
end
r -> r
end
end
end)
end)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, put_in(state.vars[:found_vetrumai_urupu], true)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_b(state, fn state ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
lift(state, Runtime.eq_s_b(state, "ின்"))
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
end
r -> r
end
end
end)}
end
r -> r
end
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
r_fix_endings(state)
end)}
r -> r
end
r -> r
end
end
end
defp r_remove_tense_suffixes(%Runtime{} = state) do
(fn loop_fn ->
loop_fn.(loop_fn, state)
end).(fn loop_fn, state ->
case (fn state ->
r_remove_tense_suffix(state)
end).(state) do
{:ok, s} -> loop_fn.(loop_fn, s)
{:fail, s} -> {:ok, %{s | cursor: state.cursor}}
end
end)
end
defp r_remove_tense_suffix(%Runtime{} = state) do
case (fn state ->
{:ok, put_in(state.vars[:found_a_match], false)}
end).(state) do
{:ok, state} ->
case (fn state ->
r_has_min_length(state)
end).(state) do
{:ok, state} ->
case (fn 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 ->
{:ok, snowball_do_b(state, fn state ->
snowball_test_b(state, fn state ->
case (fn state ->
(fn ->
state = %{state | ket: state.cursor}
case Runtime.find_among_b(state, @a_25) do
:fail -> {:fail, state}
{%Runtime{} = s, result} ->
state = %{s | bra: s.cursor}
case result do
1 ->
{:ok, Runtime.slice_del(state)}
2 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_23) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
3 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_24) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
4 ->
case (fn state ->
(fn state ->
saved_c = state.cursor
case (fn state ->
lift(state, Runtime.eq_s_b(state, "ச"))
end).(state) do
{:ok, s} -> {:fail, %{s | cursor: saved_c}}
{:fail, s} -> {:ok, %{s | cursor: saved_c}}
end
end).(state)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_from(state, "்")}
r -> r
end
5 ->
{:ok, Runtime.slice_from(state, "்")}
6 ->
case (fn state ->
snowball_test_b(state, fn state ->
lift(state, Runtime.eq_s_b(state, "்"))
end)
end).(state) do
{:ok, state} ->
{:ok, Runtime.slice_del(state)}
r -> r
end
_ -> {:ok, state}
end
end
end).()
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:found_a_match], true)}
r -> r
end
end)
end)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_b(state, fn state ->
case (fn state ->
{:ok, %{state | ket: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
(fn ->
case Runtime.find_among_b(state, @a_26) do
:fail -> {:fail, state}
{%Runtime{} = s, _} -> {:ok, s}
end
end).()
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, %{state | bra: state.cursor}}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, Runtime.slice_del(state)}
end).(state) do
{:ok, state} ->
{:ok, put_in(state.vars[:found_a_match], true)}
end
end
r -> r
end
end
end)}
end
end).(state)
{tag, %{s | cursor: old_cursor, limit_backward: old_lb}}
end).(state)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_fix_endings(state)
end)}
end).(state) do
{:ok, state} ->
if state.vars[:found_a_match], do: {:ok, state}, else: {:fail, state}
end
end
r -> r
end
end
end
defp r_stem(%Runtime{} = state) do
case (fn state ->
{:ok, put_in(state.vars[:found_vetrumai_urupu], false)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_fix_ending(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
r_has_min_length(state)
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_remove_question_prefixes(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_remove_pronoun_prefixes(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_remove_question_suffixes(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_remove_um(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_remove_common_word_endings(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_remove_vetrumai_urupukal(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_remove_plural_suffix(state)
end)}
end).(state) do
{:ok, state} ->
case (fn state ->
{:ok, snowball_do_f(state, fn state ->
r_remove_command_suffixes(state)
end)}
end).(state) do
{:ok, state} ->
{:ok, snowball_do_f(state, fn state ->
r_remove_tense_suffixes(state)
end)}
end
end
end
end
end
end
end
end
r -> r
end
end
end
end
end