@delali/narsil 0.1.14 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/NOTICE +54 -0
  2. package/README.md +38 -972
  3. package/dist/adapters/filesystem.mjs +1 -1
  4. package/dist/adapters/indexeddb.mjs +1 -1
  5. package/dist/{chunk-WISGW24C.mjs → chunk-AUMKFYTG.mjs} +1 -1
  6. package/dist/{chunk-HRABJLPB.mjs → chunk-BKAI2WXI.mjs} +1 -0
  7. package/dist/chunk-GHJWC2E5.mjs +9 -0
  8. package/dist/chunk-KH3YGMVT.mjs +15 -0
  9. package/dist/{chunk-ALB35PRQ.mjs → chunk-M2EDG55Y.mjs} +8 -0
  10. package/dist/{chunk-HMO6OMZ3.mjs → chunk-S6IAXOBA.mjs} +1073 -506
  11. package/dist/chunk-TGP5M5R7.mjs +880 -0
  12. package/dist/chunk-U2BKYEC7.mjs +254 -0
  13. package/dist/{chunk-MEW7HD75.mjs → chunk-XAKNSWIK.mjs} +2543 -1154
  14. package/dist/{config-CojEPOgS.d.ts → config-P27AtSn4.d.ts} +28 -7
  15. package/dist/direct-executor-2FV3MEDD.mjs +5 -0
  16. package/dist/distribution/coordinator/etcd.d.ts +2 -2
  17. package/dist/distribution/coordinator/etcd.mjs +2 -2
  18. package/dist/distribution/coordinator/in-memory.d.ts +2 -2
  19. package/dist/distribution.d.ts +10 -4
  20. package/dist/distribution.mjs +1875 -1772
  21. package/dist/embeddings/openai.mjs +1 -1
  22. package/dist/index.browser.mjs +4566 -1783
  23. package/dist/index.d.ts +14 -5
  24. package/dist/index.mjs +6 -5
  25. package/dist/{language-ONQ3iVDf.d.ts → language-CmJBHf1j.d.ts} +4 -1
  26. package/dist/languages/albanian.d.ts +5 -0
  27. package/dist/languages/albanian.mjs +103 -0
  28. package/dist/languages/amharic.d.ts +5 -0
  29. package/dist/languages/amharic.mjs +240 -0
  30. package/dist/languages/arabic.d.ts +1 -1
  31. package/dist/languages/arabic.mjs +939 -154
  32. package/dist/languages/armenian.d.ts +1 -1
  33. package/dist/languages/armenian.mjs +275 -243
  34. package/dist/languages/azerbaijani.d.ts +5 -0
  35. package/dist/languages/azerbaijani.mjs +152 -0
  36. package/dist/languages/bambara.d.ts +5 -0
  37. package/dist/languages/bambara.mjs +60 -0
  38. package/dist/languages/basque.d.ts +5 -0
  39. package/dist/languages/basque.mjs +726 -0
  40. package/dist/languages/belarusian.d.ts +5 -0
  41. package/dist/languages/belarusian.mjs +100 -0
  42. package/dist/languages/bengali.d.ts +5 -0
  43. package/dist/languages/bengali.mjs +128 -0
  44. package/dist/languages/bosnian.d.ts +5 -0
  45. package/dist/languages/bosnian.mjs +197 -0
  46. package/dist/languages/breton.d.ts +5 -0
  47. package/dist/languages/breton.mjs +96 -0
  48. package/dist/languages/bulgarian.d.ts +1 -1
  49. package/dist/languages/bulgarian.mjs +11 -2
  50. package/dist/languages/burmese.d.ts +5 -0
  51. package/dist/languages/burmese.mjs +57 -0
  52. package/dist/languages/catalan.d.ts +5 -0
  53. package/dist/languages/catalan.mjs +987 -0
  54. package/dist/languages/chinese.d.ts +1 -1
  55. package/dist/languages/chinese.mjs +4 -3
  56. package/dist/languages/croatian.d.ts +5 -0
  57. package/dist/languages/croatian.mjs +191 -0
  58. package/dist/languages/czech.d.ts +5 -0
  59. package/dist/languages/czech.mjs +628 -0
  60. package/dist/languages/dagbani.d.ts +1 -1
  61. package/dist/languages/dagbani.mjs +11 -2
  62. package/dist/languages/danish.d.ts +1 -1
  63. package/dist/languages/danish.mjs +215 -110
  64. package/dist/languages/dutch.d.ts +1 -1
  65. package/dist/languages/dutch.mjs +1248 -163
  66. package/dist/languages/english.d.ts +1 -1
  67. package/dist/languages/english.mjs +2 -1
  68. package/dist/languages/esperanto.d.ts +5 -0
  69. package/dist/languages/esperanto.mjs +689 -0
  70. package/dist/languages/estonian.d.ts +5 -0
  71. package/dist/languages/estonian.mjs +2160 -0
  72. package/dist/languages/ewe.d.ts +1 -1
  73. package/dist/languages/ewe.mjs +11 -2
  74. package/dist/languages/faroese.d.ts +5 -0
  75. package/dist/languages/faroese.mjs +93 -0
  76. package/dist/languages/fijian.d.ts +5 -0
  77. package/dist/languages/fijian.mjs +55 -0
  78. package/dist/languages/finnish.d.ts +1 -1
  79. package/dist/languages/finnish.mjs +528 -263
  80. package/dist/languages/french.d.ts +1 -1
  81. package/dist/languages/french.mjs +950 -437
  82. package/dist/languages/ga.d.ts +1 -1
  83. package/dist/languages/ga.mjs +2 -1
  84. package/dist/languages/galician.d.ts +5 -0
  85. package/dist/languages/galician.mjs +172 -0
  86. package/dist/languages/georgian.d.ts +5 -0
  87. package/dist/languages/georgian.mjs +91 -0
  88. package/dist/languages/german.d.ts +1 -1
  89. package/dist/languages/german.mjs +432 -162
  90. package/dist/languages/greek.d.ts +1 -1
  91. package/dist/languages/greek.mjs +1970 -281
  92. package/dist/languages/guarani.d.ts +5 -0
  93. package/dist/languages/guarani.mjs +132 -0
  94. package/dist/languages/gujarati.d.ts +5 -0
  95. package/dist/languages/gujarati.mjs +234 -0
  96. package/dist/languages/haitian-creole.d.ts +5 -0
  97. package/dist/languages/haitian-creole.mjs +106 -0
  98. package/dist/languages/hausa.d.ts +1 -1
  99. package/dist/languages/hausa.mjs +2 -1
  100. package/dist/languages/hawaiian.d.ts +5 -0
  101. package/dist/languages/hawaiian.mjs +69 -0
  102. package/dist/languages/hebrew.d.ts +5 -0
  103. package/dist/languages/hebrew.mjs +213 -0
  104. package/dist/languages/hindi.d.ts +1 -1
  105. package/dist/languages/hindi.mjs +175 -97
  106. package/dist/languages/hungarian.d.ts +1 -1
  107. package/dist/languages/hungarian.mjs +412 -326
  108. package/dist/languages/icelandic.d.ts +5 -0
  109. package/dist/languages/icelandic.mjs +161 -0
  110. package/dist/languages/igbo.d.ts +1 -1
  111. package/dist/languages/igbo.mjs +2 -1
  112. package/dist/languages/indonesian.d.ts +1 -1
  113. package/dist/languages/indonesian.mjs +329 -137
  114. package/dist/languages/irish.d.ts +1 -1
  115. package/dist/languages/irish.mjs +223 -139
  116. package/dist/languages/italian.d.ts +1 -1
  117. package/dist/languages/italian.mjs +703 -406
  118. package/dist/languages/japanese.d.ts +1 -1
  119. package/dist/languages/japanese.mjs +5 -108
  120. package/dist/languages/kannada.d.ts +5 -0
  121. package/dist/languages/kannada.mjs +94 -0
  122. package/dist/languages/kazakh.d.ts +5 -0
  123. package/dist/languages/kazakh.mjs +90 -0
  124. package/dist/languages/khmer.d.ts +5 -0
  125. package/dist/languages/khmer.mjs +181 -0
  126. package/dist/languages/kinyarwanda.d.ts +5 -0
  127. package/dist/languages/kinyarwanda.mjs +99 -0
  128. package/dist/languages/kirundi.d.ts +5 -0
  129. package/dist/languages/kirundi.mjs +92 -0
  130. package/dist/languages/korean.d.ts +5 -0
  131. package/dist/languages/korean.mjs +252 -0
  132. package/dist/languages/kurmanji.d.ts +5 -0
  133. package/dist/languages/kurmanji.mjs +50 -0
  134. package/dist/languages/kyrgyz.d.ts +5 -0
  135. package/dist/languages/kyrgyz.mjs +108 -0
  136. package/dist/languages/lao.d.ts +5 -0
  137. package/dist/languages/lao.mjs +63 -0
  138. package/dist/languages/latin.d.ts +5 -0
  139. package/dist/languages/latin.mjs +69 -0
  140. package/dist/languages/latvian.d.ts +5 -0
  141. package/dist/languages/latvian.mjs +173 -0
  142. package/dist/languages/lingala.d.ts +5 -0
  143. package/dist/languages/lingala.mjs +61 -0
  144. package/dist/languages/lithuanian.d.ts +5 -0
  145. package/dist/languages/lithuanian.mjs +571 -0
  146. package/dist/languages/luxembourgish.d.ts +5 -0
  147. package/dist/languages/luxembourgish.mjs +214 -0
  148. package/dist/languages/macedonian.d.ts +5 -0
  149. package/dist/languages/macedonian.mjs +808 -0
  150. package/dist/languages/malagasy.d.ts +5 -0
  151. package/dist/languages/malagasy.mjs +67 -0
  152. package/dist/languages/malay.d.ts +5 -0
  153. package/dist/languages/malay.mjs +482 -0
  154. package/dist/languages/malayalam.d.ts +5 -0
  155. package/dist/languages/malayalam.mjs +122 -0
  156. package/dist/languages/maltese.d.ts +5 -0
  157. package/dist/languages/maltese.mjs +139 -0
  158. package/dist/languages/maori.d.ts +5 -0
  159. package/dist/languages/maori.mjs +79 -0
  160. package/dist/languages/marathi.d.ts +5 -0
  161. package/dist/languages/marathi.mjs +111 -0
  162. package/dist/languages/nepali.d.ts +1 -1
  163. package/dist/languages/nepali.mjs +209 -99
  164. package/dist/languages/norwegian.d.ts +1 -1
  165. package/dist/languages/norwegian.mjs +218 -85
  166. package/dist/languages/oromo.d.ts +5 -0
  167. package/dist/languages/oromo.mjs +78 -0
  168. package/dist/languages/persian.d.ts +5 -0
  169. package/dist/languages/persian.mjs +710 -0
  170. package/dist/languages/polish.d.ts +5 -0
  171. package/dist/languages/polish.mjs +614 -0
  172. package/dist/languages/portuguese.d.ts +1 -1
  173. package/dist/languages/portuguese.mjs +613 -380
  174. package/dist/languages/punjabi.d.ts +5 -0
  175. package/dist/languages/punjabi.mjs +197 -0
  176. package/dist/languages/romanian.d.ts +1 -1
  177. package/dist/languages/romanian.mjs +561 -382
  178. package/dist/languages/russian.d.ts +1 -1
  179. package/dist/languages/russian.mjs +373 -244
  180. package/dist/languages/samoan.d.ts +5 -0
  181. package/dist/languages/samoan.mjs +63 -0
  182. package/dist/languages/sanskrit.d.ts +1 -1
  183. package/dist/languages/sanskrit.mjs +2 -2
  184. package/dist/languages/scottish-gaelic.d.ts +5 -0
  185. package/dist/languages/scottish-gaelic.mjs +370 -0
  186. package/dist/languages/serbian.d.ts +1 -1
  187. package/dist/languages/serbian.mjs +3635 -155
  188. package/dist/languages/shona.d.ts +5 -0
  189. package/dist/languages/shona.mjs +91 -0
  190. package/dist/languages/sinhala.d.ts +5 -0
  191. package/dist/languages/sinhala.mjs +182 -0
  192. package/dist/languages/slovak.d.ts +5 -0
  193. package/dist/languages/slovak.mjs +430 -0
  194. package/dist/languages/slovenian.d.ts +1 -1
  195. package/dist/languages/slovenian.mjs +11 -2
  196. package/dist/languages/sorani.d.ts +5 -0
  197. package/dist/languages/sorani.mjs +156 -0
  198. package/dist/languages/spanish.d.ts +1 -1
  199. package/dist/languages/spanish.mjs +676 -374
  200. package/dist/languages/swahili.d.ts +1 -1
  201. package/dist/languages/swahili.mjs +2 -1
  202. package/dist/languages/swedish.d.ts +1 -1
  203. package/dist/languages/swedish.mjs +237 -95
  204. package/dist/languages/tagalog.d.ts +5 -0
  205. package/dist/languages/tagalog.mjs +159 -0
  206. package/dist/languages/tamil.d.ts +1 -1
  207. package/dist/languages/tamil.mjs +836 -64
  208. package/dist/languages/tatar.d.ts +5 -0
  209. package/dist/languages/tatar.mjs +1017 -0
  210. package/dist/languages/telugu.d.ts +5 -0
  211. package/dist/languages/telugu.mjs +62 -0
  212. package/dist/languages/thai.d.ts +5 -0
  213. package/dist/languages/thai.mjs +65 -0
  214. package/dist/languages/tibetan.d.ts +5 -0
  215. package/dist/languages/tibetan.mjs +119 -0
  216. package/dist/languages/tigrinya.d.ts +5 -0
  217. package/dist/languages/tigrinya.mjs +194 -0
  218. package/dist/languages/tongan.d.ts +5 -0
  219. package/dist/languages/tongan.mjs +56 -0
  220. package/dist/languages/turkish.d.ts +1 -1
  221. package/dist/languages/turkish.mjs +1246 -393
  222. package/dist/languages/twi.d.ts +1 -1
  223. package/dist/languages/twi.mjs +13 -2
  224. package/dist/languages/ukrainian.d.ts +1 -1
  225. package/dist/languages/ukrainian.mjs +125 -47
  226. package/dist/languages/urdu.d.ts +5 -0
  227. package/dist/languages/urdu.mjs +528 -0
  228. package/dist/languages/vietnamese.d.ts +5 -0
  229. package/dist/languages/vietnamese.mjs +277 -0
  230. package/dist/languages/welsh.d.ts +5 -0
  231. package/dist/languages/welsh.mjs +446 -0
  232. package/dist/languages/wolof.d.ts +5 -0
  233. package/dist/languages/wolof.mjs +79 -0
  234. package/dist/languages/xhosa.d.ts +5 -0
  235. package/dist/languages/xhosa.mjs +95 -0
  236. package/dist/languages/yoruba.d.ts +1 -1
  237. package/dist/languages/yoruba.mjs +1 -0
  238. package/dist/languages/zulu.d.ts +1 -1
  239. package/dist/languages/zulu.mjs +2 -1
  240. package/dist/narsil-CMZRPDlQ.d.ts +159 -0
  241. package/dist/persistence/durability/checkpoint-worker.d.ts +13 -0
  242. package/dist/persistence/durability/checkpoint-worker.mjs +6 -5
  243. package/dist/{schema-DCgkO1j4.d.ts → schema-BnvLvjRp.d.ts} +5 -3
  244. package/dist/server.d.ts +12 -3
  245. package/dist/server.mjs +183 -64
  246. package/dist/{types-DHX6zGeD.d.ts → types-BRTcBgAp.d.ts} +1 -1
  247. package/dist/workers/entry.mjs +2 -2
  248. package/package.json +10 -3
  249. package/dist/chunk-TW6BXTOL.mjs +0 -338
  250. package/dist/direct-executor-E52FFGDE.mjs +0 -4
  251. package/dist/narsil-D-84Nvm4.d.ts +0 -72
@@ -1,297 +1,564 @@
1
- // src/languages/finnish.ts
2
- var VOWELS = "aeiouy\xE4\xF6";
3
- var LONG_VOWELS = ["aa", "ee", "ii", "oo", "uu", "\xE4\xE4", "\xF6\xF6"];
4
- var CONSONANT_PATTERN = /[a-zäö]/;
5
- var PARTICLES = ["kaan", "k\xE4\xE4n", "han", "h\xE4n", "kin", "ko", "k\xF6", "pa", "p\xE4"];
6
- var BACK_VOWEL_ENDINGS = ["lla", "na", "ssa", "ta", "lta", "sta"];
7
- var FRONT_VOWEL_ENDINGS = ["ll\xE4", "n\xE4", "ss\xE4", "t\xE4", "lt\xE4", "st\xE4"];
8
- var NEUTRAL_ENDINGS = ["lle", "ine"];
9
- var H_SUFFIXES = [
10
- { suffix: "han", requiredPreceding: "a" },
11
- { suffix: "hen", requiredPreceding: "e" },
12
- { suffix: "hin", requiredPreceding: "i" },
13
- { suffix: "hon", requiredPreceding: "o" },
14
- { suffix: "hun", requiredPreceding: "u" },
15
- { suffix: "hyn", requiredPreceding: "y" },
16
- { suffix: "h\xE4n", requiredPreceding: "\xE4" },
17
- { suffix: "h\xF6n", requiredPreceding: "\xF6" }
1
+ import { BaseStemmer } from '../chunk-U2BKYEC7.mjs';
2
+
3
+ // src/languages/snowball/finnish.ts
4
+ var a_0 = [
5
+ ["pa", 1],
6
+ ["sti", 2],
7
+ ["kaan", 1],
8
+ ["han", 1],
9
+ ["kin", 1],
10
+ ["h\xE4n", 1],
11
+ ["k\xE4\xE4n", 1],
12
+ ["ko", 1],
13
+ ["p\xE4", 1],
14
+ ["k\xF6", 1]
18
15
  ];
19
- var SIMPLE_SUFFIXES = ["ssa", "ss\xE4", "sta", "st\xE4", "lla", "ll\xE4", "lta", "lt\xE4", "lle", "ine", "ksi"];
20
- var STEP4_SUFFIXES = [
21
- { text: "impa", checkPo: false },
22
- { text: "imp\xE4", checkPo: false },
23
- { text: "impi", checkPo: true },
24
- { text: "imma", checkPo: false },
25
- { text: "imm\xE4", checkPo: false },
26
- { text: "immi", checkPo: true },
27
- { text: "eja", checkPo: false },
28
- { text: "ej\xE4", checkPo: false },
29
- { text: "mpa", checkPo: false },
30
- { text: "mp\xE4", checkPo: false },
31
- { text: "mpi", checkPo: true },
32
- { text: "mma", checkPo: false },
33
- { text: "mm\xE4", checkPo: false },
34
- { text: "mmi", checkPo: true }
16
+ var a_1 = [
17
+ ["lla", -1],
18
+ ["na", -1],
19
+ ["ssa", -1],
20
+ ["ta", -1],
21
+ ["lta", -1, 1],
22
+ ["sta", -1, 2]
35
23
  ];
36
- function isVowel(ch) {
37
- return VOWELS.includes(ch);
38
- }
39
- function isConsonant(ch) {
40
- return ch.length === 1 && !isVowel(ch) && CONSONANT_PATTERN.test(ch);
41
- }
42
- function endsWithLongVowel(word) {
43
- if (word.length < 2) return false;
44
- const tail = word.slice(-2);
45
- return LONG_VOWELS.includes(tail);
46
- }
47
- function computeRegions(word) {
48
- let r1 = word.length;
49
- let r2 = word.length;
50
- let foundVowel = false;
51
- for (let i = 0; i < word.length; i++) {
52
- if (foundVowel && !isVowel(word[i])) {
53
- r1 = i + 1;
54
- break;
55
- }
56
- if (isVowel(word[i])) {
57
- foundVowel = true;
58
- }
59
- }
60
- foundVowel = false;
61
- for (let i = r1; i < word.length; i++) {
62
- if (foundVowel && !isVowel(word[i])) {
63
- r2 = i + 1;
64
- break;
65
- }
66
- if (isVowel(word[i])) {
67
- foundVowel = true;
68
- }
69
- }
70
- return { r1, r2 };
71
- }
72
- function suffixInR1(word, suffix, r1) {
73
- return word.endsWith(suffix) && word.length - suffix.length >= r1;
74
- }
75
- function suffixInR2(word, suffix, r2) {
76
- return word.endsWith(suffix) && word.length - suffix.length >= r2;
77
- }
78
- function step1(word, r1, r2) {
79
- for (const p of PARTICLES) {
80
- if (suffixInR1(word, p, r1)) {
81
- const charBefore = word[word.length - p.length - 1];
82
- if (charBefore && (isVowel(charBefore) || charBefore === "n")) {
83
- return word.slice(0, -p.length);
84
- }
85
- }
86
- }
87
- if (suffixInR2(word, "sti", r2)) {
88
- return word.slice(0, -3);
89
- }
90
- return word;
91
- }
92
- function step2(word, r1) {
93
- if (suffixInR1(word, "nsa", r1)) return word.slice(0, -3);
94
- if (suffixInR1(word, "ns\xE4", r1)) return word.slice(0, -3);
95
- if (suffixInR1(word, "mme", r1)) return word.slice(0, -3);
96
- if (suffixInR1(word, "nne", r1)) return word.slice(0, -3);
97
- if (suffixInR1(word, "si", r1)) {
98
- const base = word.slice(0, -2);
99
- if (base.endsWith("k")) return base;
100
- if (base.endsWith("kse")) return `${base.slice(0, -3)}ksi`;
101
- return base;
102
- }
103
- if (suffixInR1(word, "ni", r1)) {
104
- const base = word.slice(0, -2);
105
- if (base.endsWith("kse")) return `${base.slice(0, -3)}ksi`;
106
- return base;
107
- }
108
- if (suffixInR1(word, "an", r1)) {
109
- const base = word.slice(0, -2);
110
- for (const ending of BACK_VOWEL_ENDINGS) {
111
- if (base.endsWith(ending)) return base;
24
+ var a_2 = [
25
+ ["ll\xE4", -1],
26
+ ["n\xE4", -1],
27
+ ["ss\xE4", -1],
28
+ ["t\xE4", -1],
29
+ ["lt\xE4", -1, 1],
30
+ ["st\xE4", -1, 2]
31
+ ];
32
+ var a_3 = [
33
+ ["lle", -1],
34
+ ["ine", -1]
35
+ ];
36
+ var a_4 = [
37
+ ["nsa", 3],
38
+ ["mme", 3],
39
+ ["nne", 3],
40
+ ["ni", 2],
41
+ ["si", 1],
42
+ ["an", 4],
43
+ ["en", 6],
44
+ ["\xE4n", 5],
45
+ ["ns\xE4", 3]
46
+ ];
47
+ var a_5 = [
48
+ ["aa", -1],
49
+ ["ee", -1],
50
+ ["ii", -1],
51
+ ["oo", -1],
52
+ ["uu", -1],
53
+ ["\xE4\xE4", -1],
54
+ ["\xF6\xF6", -1]
55
+ ];
56
+ var a_6 = [
57
+ ["'", -1],
58
+ ["ai", -1],
59
+ ["ei", -1],
60
+ ["ii", -1],
61
+ ["oi", -1],
62
+ ["ui", -1],
63
+ ["\xE4i", -1],
64
+ ["\xF6i", -1]
65
+ ];
66
+ var a_7 = [
67
+ ["a", 2],
68
+ ["lla", -1, 1],
69
+ ["na", -1, 2],
70
+ ["ssa", -1, 3],
71
+ ["ta", -1, 4],
72
+ ["lta", -1, 1],
73
+ ["sta", -1, 2],
74
+ ["tta", 3, 3],
75
+ ["lle", -1],
76
+ ["ine", -1],
77
+ ["ksi", -1],
78
+ ["n", 1],
79
+ ["han", -1, 1, 3],
80
+ ["den", -1, 2, 8],
81
+ ["seen", -1, 3, 9],
82
+ ["hen", -1, 4, 4],
83
+ ["tten", -1, 5, 8],
84
+ ["hin", -1, 6, 5],
85
+ ["siin", -1, 7, 8],
86
+ ["hon", -1, 8, 6],
87
+ ["hun", -1, 9, 7],
88
+ ["h\xE4n", -1, 10, 1],
89
+ ["h\xF6n", -1, 11, 2],
90
+ ["\xE4", 2],
91
+ ["ll\xE4", -1, 1],
92
+ ["n\xE4", -1, 2],
93
+ ["ss\xE4", -1, 3],
94
+ ["t\xE4", -1, 4],
95
+ ["lt\xE4", -1, 1],
96
+ ["st\xE4", -1, 2],
97
+ ["tt\xE4", 3, 3]
98
+ ];
99
+ var a_8 = [
100
+ ["eja", -1],
101
+ ["mma", 1],
102
+ ["imma", -1, 1],
103
+ ["mpa", 1],
104
+ ["impa", -1, 1],
105
+ ["mmi", 1],
106
+ ["immi", -1, 1],
107
+ ["mpi", 1],
108
+ ["impi", -1, 1],
109
+ ["ej\xE4", -1],
110
+ ["mm\xE4", 1],
111
+ ["imm\xE4", -1, 1],
112
+ ["mp\xE4", 1],
113
+ ["imp\xE4", -1, 1]
114
+ ];
115
+ var a_9 = [
116
+ ["i", -1],
117
+ ["j", -1]
118
+ ];
119
+ var a_10 = [
120
+ ["mma", 1],
121
+ ["imma", -1, 1]
122
+ ];
123
+ var g_AEI = [17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8];
124
+ var g_C = [119, 223, 119, 1];
125
+ var g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32];
126
+ var g_particle_end = [17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32];
127
+ var FinnishStemmer = class extends BaseStemmer {
128
+ #af_7() {
129
+ switch (this.af) {
130
+ case 1:
131
+ return this.#r_A_();
132
+ case 2:
133
+ return this.#r_O_();
134
+ case 3:
135
+ return this.#r_A();
136
+ case 4:
137
+ return this.#r_E();
138
+ case 5:
139
+ return this.#r_I();
140
+ case 6:
141
+ return this.#r_O();
142
+ case 7:
143
+ return this.#r_U();
144
+ case 8:
145
+ return this.#r_VI();
146
+ case 9:
147
+ return this.#r_LV();
112
148
  }
149
+ return false;
113
150
  }
114
- if (suffixInR1(word, "\xE4n", r1)) {
115
- const base = word.slice(0, -2);
116
- for (const ending of FRONT_VOWEL_ENDINGS) {
117
- if (base.endsWith(ending)) return base;
118
- }
151
+ #r_LV() {
152
+ return this.find_among_b(a_5) !== 0;
119
153
  }
120
- if (suffixInR1(word, "en", r1)) {
121
- const base = word.slice(0, -2);
122
- for (const ending of NEUTRAL_ENDINGS) {
123
- if (base.endsWith(ending)) return base;
124
- }
154
+ #r_VI() {
155
+ return this.find_among_b(a_6) !== 0;
125
156
  }
126
- return word;
127
- }
128
- function step3(word, r1) {
129
- for (const { suffix, requiredPreceding } of H_SUFFIXES) {
130
- if (suffixInR1(word, suffix, r1)) {
131
- const base = word.slice(0, -suffix.length);
132
- if (base.length > 0 && base[base.length - 1] === requiredPreceding) {
133
- return { word: base, caseRemoved: true };
157
+ #r_A() {
158
+ lab0: {
159
+ lab1: {
160
+ if (!this.eq_s_b("a")) break lab1;
161
+ break lab0;
134
162
  }
163
+ if (!this.eq_s_b("'")) return false;
135
164
  }
165
+ return true;
136
166
  }
137
- if (suffixInR1(word, "siin", r1)) {
138
- const base = word.slice(0, -4);
139
- if (base.length >= 2 && isConsonant(base[base.length - 1])) {
140
- return { word: base, caseRemoved: true };
141
- }
142
- }
143
- if (suffixInR1(word, "seen", r1)) {
144
- const base = word.slice(0, -4);
145
- if (endsWithLongVowel(base)) {
146
- return { word: base, caseRemoved: true };
147
- }
148
- }
149
- if (suffixInR1(word, "den", r1)) {
150
- const base = word.slice(0, -3);
151
- if (base.length >= 2 && isConsonant(base[base.length - 1])) {
152
- return { word: base, caseRemoved: true };
167
+ #r_E() {
168
+ lab0: {
169
+ lab1: {
170
+ if (!this.eq_s_b("e")) break lab1;
171
+ break lab0;
172
+ }
173
+ if (!this.eq_s_b("'")) return false;
153
174
  }
175
+ return true;
154
176
  }
155
- if (suffixInR1(word, "tten", r1)) {
156
- const base = word.slice(0, -4);
157
- if (base.length >= 2 && isConsonant(base[base.length - 1])) {
158
- return { word: base, caseRemoved: true };
177
+ #r_I() {
178
+ lab0: {
179
+ lab1: {
180
+ if (!this.eq_s_b("i")) break lab1;
181
+ break lab0;
182
+ }
183
+ if (!this.eq_s_b("'")) return false;
159
184
  }
185
+ return true;
160
186
  }
161
- for (const suffix of SIMPLE_SUFFIXES) {
162
- if (suffixInR1(word, suffix, r1)) {
163
- return { word: word.slice(0, -suffix.length), caseRemoved: true };
187
+ #r_O() {
188
+ lab0: {
189
+ lab1: {
190
+ if (!this.eq_s_b("o")) break lab1;
191
+ break lab0;
192
+ }
193
+ if (!this.eq_s_b("'")) return false;
164
194
  }
195
+ return true;
165
196
  }
166
- if (suffixInR1(word, "na", r1)) return { word: word.slice(0, -2), caseRemoved: true };
167
- if (suffixInR1(word, "n\xE4", r1)) return { word: word.slice(0, -2), caseRemoved: true };
168
- if (suffixInR1(word, "tta", r1)) {
169
- const base = word.slice(0, -3);
170
- if (base.length > 0 && isVowel(base[base.length - 1])) {
171
- return { word: base, caseRemoved: true };
197
+ #r_U() {
198
+ lab0: {
199
+ lab1: {
200
+ if (!this.eq_s_b("u")) break lab1;
201
+ break lab0;
202
+ }
203
+ if (!this.eq_s_b("'")) return false;
172
204
  }
205
+ return true;
173
206
  }
174
- if (suffixInR1(word, "tt\xE4", r1)) {
175
- const base = word.slice(0, -3);
176
- if (base.length > 0 && isVowel(base[base.length - 1])) {
177
- return { word: base, caseRemoved: true };
207
+ #r_A_() {
208
+ lab0: {
209
+ lab1: {
210
+ if (!this.eq_s_b("\xE4")) break lab1;
211
+ break lab0;
212
+ }
213
+ if (!this.eq_s_b("'")) return false;
178
214
  }
215
+ return true;
179
216
  }
180
- if (suffixInR1(word, "ta", r1)) return { word: word.slice(0, -2), caseRemoved: true };
181
- if (suffixInR1(word, "t\xE4", r1)) return { word: word.slice(0, -2), caseRemoved: true };
182
- if (suffixInR1(word, "n", r1)) {
183
- const base = word.slice(0, -1);
184
- if (endsWithLongVowel(base)) {
185
- return { word: base.slice(0, -1), caseRemoved: true };
186
- }
187
- if (base.endsWith("ie")) {
188
- return { word: base, caseRemoved: true };
189
- }
190
- if (base.length > 0 && isVowel(base[base.length - 1]) && isConsonant(base[base.length - 2])) {
191
- return { word: base, caseRemoved: true };
217
+ #r_O_() {
218
+ lab0: {
219
+ lab1: {
220
+ if (!this.eq_s_b("\xF6")) break lab1;
221
+ break lab0;
222
+ }
223
+ lab2: {
224
+ if (!this.eq_s_b("\xF8")) break lab2;
225
+ break lab0;
226
+ }
227
+ if (!this.eq_s_b("'")) return false;
192
228
  }
229
+ return true;
193
230
  }
194
- if (suffixInR1(word, "a", r1)) {
195
- const base = word.slice(0, -1);
196
- if (base.length >= 2 && isVowel(base[base.length - 1]) && isConsonant(base[base.length - 2])) {
197
- return { word: base, caseRemoved: true };
231
+ #stem() {
232
+ let a;
233
+ let B_ending_removed;
234
+ let S_x;
235
+ let I_p2;
236
+ let I_p1;
237
+ const v_1 = this.c;
238
+ lab0: {
239
+ I_p1 = this.limit;
240
+ I_p2 = this.limit;
241
+ if (!this.go_out_grouping(g_v, 97, 246)) break lab0;
242
+ this.c++;
243
+ if (!this.go_in_grouping(g_v, 97, 246)) break lab0;
244
+ this.c++;
245
+ I_p1 = this.c;
246
+ if (!this.go_out_grouping(g_v, 97, 246)) break lab0;
247
+ this.c++;
248
+ if (!this.go_in_grouping(g_v, 97, 246)) break lab0;
249
+ this.c++;
250
+ I_p2 = this.c;
198
251
  }
199
- }
200
- if (suffixInR1(word, "\xE4", r1)) {
201
- const base = word.slice(0, -1);
202
- if (base.length >= 2 && isVowel(base[base.length - 1]) && isConsonant(base[base.length - 2])) {
203
- return { word: base, caseRemoved: true };
252
+ this.c = v_1;
253
+ B_ending_removed = false;
254
+ this.limit_backward = this.c;
255
+ this.c = this.limit;
256
+ const v_2 = this.limit - this.c;
257
+ lab1: {
258
+ if (this.c < I_p1) break lab1;
259
+ const v_3 = this.limit_backward;
260
+ this.limit_backward = I_p1;
261
+ this.ket = this.c;
262
+ a = this.find_among_b(a_0);
263
+ if (a === 0) {
264
+ this.limit_backward = v_3;
265
+ break lab1;
266
+ }
267
+ this.bra = this.c;
268
+ this.limit_backward = v_3;
269
+ switch (a) {
270
+ case 1: {
271
+ if (!this.in_grouping_b(g_particle_end, 97, 246)) break lab1;
272
+ break;
273
+ }
274
+ case 2: {
275
+ if (
276
+ /**@type {boolean}*/
277
+ I_p2 > this.c
278
+ ) break lab1;
279
+ break;
280
+ }
281
+ }
282
+ this.slice_del();
204
283
  }
205
- }
206
- return { word, caseRemoved: false };
207
- }
208
- function step4(word, r2) {
209
- for (const { text, checkPo } of STEP4_SUFFIXES) {
210
- if (suffixInR2(word, text, r2)) {
211
- if (checkPo) {
212
- const base = word.slice(0, -text.length);
213
- if (base.endsWith("po")) continue;
284
+ this.c = this.limit - v_2;
285
+ const v_4 = this.limit - this.c;
286
+ lab2: {
287
+ if (this.c < I_p1) break lab2;
288
+ const v_5 = this.limit_backward;
289
+ this.limit_backward = I_p1;
290
+ this.ket = this.c;
291
+ a = this.find_among_b(a_4);
292
+ if (a === 0) {
293
+ this.limit_backward = v_5;
294
+ break lab2;
295
+ }
296
+ this.bra = this.c;
297
+ this.limit_backward = v_5;
298
+ switch (a) {
299
+ case 1: {
300
+ lab3: {
301
+ if (!this.eq_s_b("k")) break lab3;
302
+ break lab2;
303
+ }
304
+ this.slice_del();
305
+ break;
306
+ }
307
+ case 2: {
308
+ this.slice_del();
309
+ this.ket = this.c;
310
+ if (!this.eq_s_b("kse")) break lab2;
311
+ this.bra = this.c;
312
+ this.slice_from("ksi");
313
+ break;
314
+ }
315
+ case 3: {
316
+ this.slice_del();
317
+ break;
318
+ }
319
+ case 4: {
320
+ if (this.find_among_b(a_1) === 0) break lab2;
321
+ this.slice_del();
322
+ break;
323
+ }
324
+ case 5: {
325
+ if (this.find_among_b(a_2) === 0) break lab2;
326
+ this.slice_del();
327
+ break;
328
+ }
329
+ case 6: {
330
+ if (this.find_among_b(a_3) === 0) break lab2;
331
+ this.slice_del();
332
+ break;
333
+ }
214
334
  }
215
- return word.slice(0, -text.length);
216
335
  }
217
- }
218
- return word;
219
- }
220
- function step5(word, r1, caseRemoved) {
221
- if (!caseRemoved) return word;
222
- if (suffixInR1(word, "j", r1)) {
223
- const base = word.slice(0, -1);
224
- if (base.endsWith("o") || base.endsWith("u")) {
225
- return base;
336
+ this.c = this.limit - v_4;
337
+ const v_6 = this.limit - this.c;
338
+ lab4: {
339
+ if (this.c < I_p1) break lab4;
340
+ const v_7 = this.limit_backward;
341
+ this.limit_backward = I_p1;
342
+ this.ket = this.c;
343
+ a = this.find_among_b(a_7, this.#af_7);
344
+ if (a === 0) {
345
+ this.limit_backward = v_7;
346
+ break lab4;
347
+ }
348
+ this.bra = this.c;
349
+ this.limit_backward = v_7;
350
+ switch (a) {
351
+ case 1: {
352
+ const v_8 = this.limit - this.c;
353
+ lab5: {
354
+ const v_9 = this.limit - this.c;
355
+ lab6: {
356
+ const v_10 = this.limit - this.c;
357
+ lab7: {
358
+ if (!this.#r_LV()) break lab7;
359
+ break lab6;
360
+ }
361
+ this.c = this.limit - v_10;
362
+ if (!this.eq_s_b("ie")) {
363
+ this.c = this.limit - v_8;
364
+ break lab5;
365
+ }
366
+ }
367
+ this.c = this.limit - v_9;
368
+ if (this.c <= this.limit_backward) {
369
+ this.c = this.limit - v_8;
370
+ break lab5;
371
+ }
372
+ this.c--;
373
+ this.bra = this.c;
374
+ }
375
+ break;
376
+ }
377
+ case 2: {
378
+ if (!this.in_grouping_b(g_v, 97, 246)) break lab4;
379
+ if (!this.in_grouping_b(g_C, 98, 122)) break lab4;
380
+ break;
381
+ }
382
+ case 3: {
383
+ if (!this.eq_s_b("e")) break lab4;
384
+ break;
385
+ }
386
+ }
387
+ this.slice_del();
388
+ B_ending_removed = true;
226
389
  }
227
- }
228
- if (suffixInR1(word, "o", r1)) {
229
- const base = word.slice(0, -1);
230
- if (base.endsWith("j")) {
231
- return base;
390
+ this.c = this.limit - v_6;
391
+ const v_11 = this.limit - this.c;
392
+ lab8: {
393
+ if (this.c < I_p2) break lab8;
394
+ const v_12 = this.limit_backward;
395
+ this.limit_backward = I_p2;
396
+ this.ket = this.c;
397
+ a = this.find_among_b(a_8);
398
+ if (a === 0) {
399
+ this.limit_backward = v_12;
400
+ break lab8;
401
+ }
402
+ this.bra = this.c;
403
+ this.limit_backward = v_12;
404
+ switch (a) {
405
+ case 1: {
406
+ lab9: {
407
+ if (!this.eq_s_b("po")) break lab9;
408
+ break lab8;
409
+ }
410
+ break;
411
+ }
412
+ }
413
+ this.slice_del();
232
414
  }
233
- }
234
- if (suffixInR1(word, "i", r1)) {
235
- return word.slice(0, -1);
236
- }
237
- return word;
238
- }
239
- function step6(word, r1, r2, caseRemoved) {
240
- if (caseRemoved) return word;
241
- if (suffixInR1(word, "t", r1)) {
242
- const base = word.slice(0, -1);
243
- if (base.length > 0 && isVowel(base[base.length - 1])) {
244
- word = base;
245
- if (suffixInR2(word, "imma", r2)) {
246
- return word.slice(0, -4);
415
+ this.c = this.limit - v_11;
416
+ lab10: {
417
+ lab11: {
418
+ if (!B_ending_removed) break lab11;
419
+ const v_13 = this.limit - this.c;
420
+ lab12: {
421
+ if (this.c < I_p1) break lab12;
422
+ const v_14 = this.limit_backward;
423
+ this.limit_backward = I_p1;
424
+ this.ket = this.c;
425
+ if (this.find_among_b(a_9) === 0) {
426
+ this.limit_backward = v_14;
427
+ break lab12;
428
+ }
429
+ this.bra = this.c;
430
+ this.limit_backward = v_14;
431
+ this.slice_del();
432
+ }
433
+ this.c = this.limit - v_13;
434
+ break lab10;
247
435
  }
248
- if (suffixInR2(word, "mma", r2)) {
249
- const beforeMma = word.slice(0, -3);
250
- if (!beforeMma.endsWith("po")) {
251
- return beforeMma;
436
+ const v_15 = this.limit - this.c;
437
+ lab13: {
438
+ if (this.c < I_p1) break lab13;
439
+ const v_16 = this.limit_backward;
440
+ this.limit_backward = I_p1;
441
+ this.ket = this.c;
442
+ if (!this.eq_s_b("t")) {
443
+ this.limit_backward = v_16;
444
+ break lab13;
445
+ }
446
+ this.bra = this.c;
447
+ const v_17 = this.limit - this.c;
448
+ if (!this.in_grouping_b(g_v, 97, 246)) {
449
+ this.limit_backward = v_16;
450
+ break lab13;
451
+ }
452
+ this.c = this.limit - v_17;
453
+ this.slice_del();
454
+ this.limit_backward = v_16;
455
+ if (this.c < I_p2) break lab13;
456
+ const v_18 = this.limit_backward;
457
+ this.limit_backward = I_p2;
458
+ this.ket = this.c;
459
+ a = this.find_among_b(a_10);
460
+ if (a === 0) {
461
+ this.limit_backward = v_18;
462
+ break lab13;
463
+ }
464
+ this.bra = this.c;
465
+ this.limit_backward = v_18;
466
+ switch (a) {
467
+ case 1: {
468
+ lab14: {
469
+ if (!this.eq_s_b("po")) break lab14;
470
+ break lab13;
471
+ }
472
+ break;
473
+ }
252
474
  }
475
+ this.slice_del();
253
476
  }
477
+ this.c = this.limit - v_15;
254
478
  }
255
- }
256
- return word;
257
- }
258
- function step7(word, r1) {
259
- if (word.length >= 2 && word.length - 1 >= r1 && endsWithLongVowel(word)) {
260
- word = word.slice(0, -1);
261
- }
262
- let trimmed = word;
263
- while (trimmed.length > r1) {
264
- const last = trimmed[trimmed.length - 1];
265
- if (!isConsonant(last)) break;
266
- trimmed = trimmed.slice(0, -1);
267
- }
268
- if (trimmed.length > 0 && isVowel(trimmed[trimmed.length - 1])) {
269
- const afterVowel = word.slice(trimmed.length);
270
- if (afterVowel.length >= 2) {
271
- const first = afterVowel[0];
272
- const second = afterVowel[1];
273
- if (isConsonant(first) && first === second) {
274
- word = word.slice(0, trimmed.length) + first + afterVowel.slice(2);
479
+ const v_19 = this.limit - this.c;
480
+ lab15: {
481
+ if (this.c < I_p1) break lab15;
482
+ const v_20 = this.limit_backward;
483
+ this.limit_backward = I_p1;
484
+ const v_21 = this.limit - this.c;
485
+ lab16: {
486
+ const v_22 = this.limit - this.c;
487
+ if (!this.#r_LV()) break lab16;
488
+ this.c = this.limit - v_22;
489
+ this.ket = this.c;
490
+ if (this.c <= this.limit_backward) break lab16;
491
+ this.c--;
492
+ this.bra = this.c;
493
+ this.slice_del();
494
+ }
495
+ this.c = this.limit - v_21;
496
+ const v_23 = this.limit - this.c;
497
+ lab17: {
498
+ this.ket = this.c;
499
+ if (!this.in_grouping_b(g_AEI, 97, 228)) break lab17;
500
+ this.bra = this.c;
501
+ if (!this.in_grouping_b(g_C, 98, 122)) break lab17;
502
+ this.slice_del();
275
503
  }
504
+ this.c = this.limit - v_23;
505
+ const v_24 = this.limit - this.c;
506
+ lab18: {
507
+ this.ket = this.c;
508
+ if (!this.eq_s_b("j")) break lab18;
509
+ this.bra = this.c;
510
+ lab19: {
511
+ lab20: {
512
+ if (!this.eq_s_b("o")) break lab20;
513
+ break lab19;
514
+ }
515
+ if (!this.eq_s_b("u")) break lab18;
516
+ }
517
+ this.slice_del();
518
+ }
519
+ this.c = this.limit - v_24;
520
+ const v_25 = this.limit - this.c;
521
+ lab21: {
522
+ this.ket = this.c;
523
+ if (!this.eq_s_b("o")) break lab21;
524
+ this.bra = this.c;
525
+ if (!this.eq_s_b("j")) break lab21;
526
+ this.slice_del();
527
+ }
528
+ this.c = this.limit - v_25;
529
+ this.limit_backward = v_20;
530
+ const v_26 = this.limit - this.c;
531
+ lab22: {
532
+ if (!this.go_in_grouping_b(g_v, 97, 246)) break lab22;
533
+ this.ket = this.c;
534
+ if (!this.in_grouping_b(g_C, 98, 122)) break lab22;
535
+ this.bra = this.c;
536
+ S_x = this.slice_to();
537
+ if (!this.eq_s_b(S_x)) break lab22;
538
+ this.slice_del();
539
+ }
540
+ this.c = this.limit - v_26;
541
+ this.ket = this.c;
542
+ if (!this.eq_s_b("'")) break lab15;
543
+ this.bra = this.c;
544
+ this.slice_del();
276
545
  }
546
+ this.c = this.limit - v_19;
547
+ this.c = this.limit_backward;
548
+ return true;
277
549
  }
278
- return word;
279
- }
280
- function stem(word) {
281
- if (word.length < 3) return word;
282
- word = word.toLowerCase();
283
- const { r1, r2 } = computeRegions(word);
284
- word = step1(word, r1, r2);
285
- word = step2(word, r1);
286
- const result = step3(word, r1);
287
- word = result.word;
288
- const caseRemoved = result.caseRemoved;
289
- word = step4(word, r2);
290
- word = step5(word, r1, caseRemoved);
291
- word = step6(word, r1, r2, caseRemoved);
292
- word = step7(word, r1);
293
- return word;
550
+ stem(input) {
551
+ this.setCurrent(input);
552
+ this.#stem();
553
+ return this.getCurrent();
554
+ }
555
+ };
556
+ var shared = new FinnishStemmer();
557
+ function stem(token) {
558
+ return shared.stem(token);
294
559
  }
560
+
561
+ // src/languages/finnish.ts
295
562
  var stopWords = /* @__PURE__ */ new Set([
296
563
  "olla",
297
564
  "olen",
@@ -412,7 +679,6 @@ var stopWords = /* @__PURE__ */ new Set([
412
679
  "sill\xE4",
413
680
  "silt\xE4",
414
681
  "sille",
415
- "sin\xE4",
416
682
  "siksi",
417
683
  "n\xE4m\xE4",
418
684
  "n\xE4iden",
@@ -479,7 +745,6 @@ var stopWords = /* @__PURE__ */ new Set([
479
745
  "mill\xE4",
480
746
  "milt\xE4",
481
747
  "mille",
482
- "min\xE4",
483
748
  "miksi",
484
749
  "mitk\xE4",
485
750
  "joka",
@@ -512,7 +777,6 @@ var stopWords = /* @__PURE__ */ new Set([
512
777
  "mutta",
513
778
  "niin",
514
779
  "sek\xE4",
515
- "sill\xE4",
516
780
  "tai",
517
781
  "vaan",
518
782
  "vai",
@@ -528,9 +792,10 @@ var stopWords = /* @__PURE__ */ new Set([
528
792
  ]);
529
793
  var finnish = {
530
794
  name: "finnish",
795
+ revision: "cd95cb543801a620",
531
796
  stemmer: stem,
532
797
  stopWords,
533
- tokenizer: { splitPattern: /[^a-z0-9äö]+/gi }
798
+ tokenizer: { splitPattern: /[^a-z0-9äöš]+/gi }
534
799
  };
535
800
 
536
801
  export { finnish };