@delali/narsil 0.1.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 (103) hide show
  1. package/LICENSE +201 -0
  2. package/dist/adapters/filesystem.d.ts +8 -0
  3. package/dist/adapters/filesystem.mjs +107 -0
  4. package/dist/adapters/indexeddb.d.ts +9 -0
  5. package/dist/adapters/indexeddb.mjs +153 -0
  6. package/dist/adapters/memory.d.ts +5 -0
  7. package/dist/adapters/memory.mjs +30 -0
  8. package/dist/adapters-XODT2F3h.d.ts +30 -0
  9. package/dist/chunk-5HXMVMSM.mjs +3147 -0
  10. package/dist/chunk-JKIBUPAY.mjs +42 -0
  11. package/dist/chunk-N37VMC62.mjs +18 -0
  12. package/dist/chunk-WYC635GI.mjs +335 -0
  13. package/dist/direct-executor-MQD7JRD4.mjs +3 -0
  14. package/dist/index.d.ts +386 -0
  15. package/dist/index.mjs +1099 -0
  16. package/dist/invalidation/broadcast-channel.d.ts +8 -0
  17. package/dist/invalidation/broadcast-channel.mjs +46 -0
  18. package/dist/invalidation/filesystem.d.ts +10 -0
  19. package/dist/invalidation/filesystem.mjs +159 -0
  20. package/dist/invalidation/noop.d.ts +5 -0
  21. package/dist/invalidation/noop.mjs +13 -0
  22. package/dist/language-ClUGLuoC.d.ts +13 -0
  23. package/dist/languages/arabic.d.ts +5 -0
  24. package/dist/languages/arabic.mjs +631 -0
  25. package/dist/languages/armenian.d.ts +5 -0
  26. package/dist/languages/armenian.mjs +306 -0
  27. package/dist/languages/bulgarian.d.ts +5 -0
  28. package/dist/languages/bulgarian.mjs +330 -0
  29. package/dist/languages/chinese.d.ts +5 -0
  30. package/dist/languages/chinese.mjs +250 -0
  31. package/dist/languages/dagbani.d.ts +5 -0
  32. package/dist/languages/dagbani.mjs +85 -0
  33. package/dist/languages/danish.d.ts +5 -0
  34. package/dist/languages/danish.mjs +224 -0
  35. package/dist/languages/dutch.d.ts +5 -0
  36. package/dist/languages/dutch.mjs +296 -0
  37. package/dist/languages/english.d.ts +5 -0
  38. package/dist/languages/english.mjs +1 -0
  39. package/dist/languages/ewe.d.ts +5 -0
  40. package/dist/languages/ewe.mjs +85 -0
  41. package/dist/languages/finnish.d.ts +5 -0
  42. package/dist/languages/finnish.mjs +536 -0
  43. package/dist/languages/french.d.ts +5 -0
  44. package/dist/languages/french.mjs +635 -0
  45. package/dist/languages/ga.d.ts +5 -0
  46. package/dist/languages/ga.mjs +69 -0
  47. package/dist/languages/german.d.ts +5 -0
  48. package/dist/languages/german.mjs +414 -0
  49. package/dist/languages/greek.d.ts +5 -0
  50. package/dist/languages/greek.mjs +888 -0
  51. package/dist/languages/hausa.d.ts +5 -0
  52. package/dist/languages/hausa.mjs +243 -0
  53. package/dist/languages/hindi.d.ts +5 -0
  54. package/dist/languages/hindi.mjs +333 -0
  55. package/dist/languages/hungarian.d.ts +5 -0
  56. package/dist/languages/hungarian.mjs +600 -0
  57. package/dist/languages/igbo.d.ts +5 -0
  58. package/dist/languages/igbo.mjs +96 -0
  59. package/dist/languages/indonesian.d.ts +5 -0
  60. package/dist/languages/indonesian.mjs +896 -0
  61. package/dist/languages/irish.d.ts +5 -0
  62. package/dist/languages/irish.mjs +268 -0
  63. package/dist/languages/italian.d.ts +5 -0
  64. package/dist/languages/italian.mjs +713 -0
  65. package/dist/languages/japanese.d.ts +5 -0
  66. package/dist/languages/japanese.mjs +210 -0
  67. package/dist/languages/nepali.d.ts +5 -0
  68. package/dist/languages/nepali.mjs +262 -0
  69. package/dist/languages/norwegian.d.ts +5 -0
  70. package/dist/languages/norwegian.mjs +274 -0
  71. package/dist/languages/portuguese.d.ts +5 -0
  72. package/dist/languages/portuguese.mjs +606 -0
  73. package/dist/languages/romanian.d.ts +5 -0
  74. package/dist/languages/romanian.mjs +634 -0
  75. package/dist/languages/russian.d.ts +5 -0
  76. package/dist/languages/russian.mjs +424 -0
  77. package/dist/languages/sanskrit.d.ts +5 -0
  78. package/dist/languages/sanskrit.mjs +155 -0
  79. package/dist/languages/serbian.d.ts +5 -0
  80. package/dist/languages/serbian.mjs +277 -0
  81. package/dist/languages/slovenian.d.ts +5 -0
  82. package/dist/languages/slovenian.mjs +522 -0
  83. package/dist/languages/spanish.d.ts +5 -0
  84. package/dist/languages/spanish.mjs +606 -0
  85. package/dist/languages/swahili.d.ts +5 -0
  86. package/dist/languages/swahili.mjs +212 -0
  87. package/dist/languages/swedish.d.ts +5 -0
  88. package/dist/languages/swedish.mjs +224 -0
  89. package/dist/languages/tamil.d.ts +5 -0
  90. package/dist/languages/tamil.mjs +186 -0
  91. package/dist/languages/turkish.d.ts +5 -0
  92. package/dist/languages/turkish.mjs +675 -0
  93. package/dist/languages/twi.d.ts +5 -0
  94. package/dist/languages/twi.mjs +84 -0
  95. package/dist/languages/ukrainian.d.ts +5 -0
  96. package/dist/languages/ukrainian.mjs +444 -0
  97. package/dist/languages/yoruba.d.ts +5 -0
  98. package/dist/languages/yoruba.mjs +103 -0
  99. package/dist/languages/zulu.d.ts +5 -0
  100. package/dist/languages/zulu.mjs +113 -0
  101. package/dist/workers/entry.d.ts +3 -0
  102. package/dist/workers/entry.mjs +106 -0
  103. package/package.json +87 -0
@@ -0,0 +1,536 @@
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" }
18
+ ];
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 }
35
+ ];
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;
112
+ }
113
+ }
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
+ }
119
+ }
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
+ }
125
+ }
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 };
134
+ }
135
+ }
136
+ }
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 };
153
+ }
154
+ }
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 };
159
+ }
160
+ }
161
+ for (const suffix of SIMPLE_SUFFIXES) {
162
+ if (suffixInR1(word, suffix, r1)) {
163
+ return { word: word.slice(0, -suffix.length), caseRemoved: true };
164
+ }
165
+ }
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 };
172
+ }
173
+ }
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 };
178
+ }
179
+ }
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 };
192
+ }
193
+ }
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 };
198
+ }
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 };
204
+ }
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;
214
+ }
215
+ return word.slice(0, -text.length);
216
+ }
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;
226
+ }
227
+ }
228
+ if (suffixInR1(word, "o", r1)) {
229
+ const base = word.slice(0, -1);
230
+ if (base.endsWith("j")) {
231
+ return base;
232
+ }
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);
247
+ }
248
+ if (suffixInR2(word, "mma", r2)) {
249
+ const beforeMma = word.slice(0, -3);
250
+ if (!beforeMma.endsWith("po")) {
251
+ return beforeMma;
252
+ }
253
+ }
254
+ }
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);
275
+ }
276
+ }
277
+ }
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;
294
+ }
295
+ var stopWords = /* @__PURE__ */ new Set([
296
+ "olla",
297
+ "olen",
298
+ "olet",
299
+ "on",
300
+ "olemme",
301
+ "olette",
302
+ "ovat",
303
+ "ole",
304
+ "oli",
305
+ "olisi",
306
+ "olisit",
307
+ "olisin",
308
+ "olisimme",
309
+ "olisitte",
310
+ "olisivat",
311
+ "olit",
312
+ "olin",
313
+ "olimme",
314
+ "olitte",
315
+ "olivat",
316
+ "ollut",
317
+ "olleet",
318
+ "en",
319
+ "et",
320
+ "ei",
321
+ "emme",
322
+ "ette",
323
+ "eiv\xE4t",
324
+ "min\xE4",
325
+ "minun",
326
+ "minut",
327
+ "minua",
328
+ "minussa",
329
+ "minusta",
330
+ "minuun",
331
+ "minulla",
332
+ "minulta",
333
+ "minulle",
334
+ "sin\xE4",
335
+ "sinun",
336
+ "sinut",
337
+ "sinua",
338
+ "sinussa",
339
+ "sinusta",
340
+ "sinuun",
341
+ "sinulla",
342
+ "sinulta",
343
+ "sinulle",
344
+ "h\xE4n",
345
+ "h\xE4nen",
346
+ "h\xE4net",
347
+ "h\xE4nt\xE4",
348
+ "h\xE4ness\xE4",
349
+ "h\xE4nest\xE4",
350
+ "h\xE4neen",
351
+ "h\xE4nell\xE4",
352
+ "h\xE4nelt\xE4",
353
+ "h\xE4nelle",
354
+ "me",
355
+ "meid\xE4n",
356
+ "meid\xE4t",
357
+ "meit\xE4",
358
+ "meiss\xE4",
359
+ "meist\xE4",
360
+ "meihin",
361
+ "meill\xE4",
362
+ "meilt\xE4",
363
+ "meille",
364
+ "te",
365
+ "teid\xE4n",
366
+ "teid\xE4t",
367
+ "teit\xE4",
368
+ "teiss\xE4",
369
+ "teist\xE4",
370
+ "teihin",
371
+ "teill\xE4",
372
+ "teilt\xE4",
373
+ "teille",
374
+ "he",
375
+ "heid\xE4n",
376
+ "heid\xE4t",
377
+ "heit\xE4",
378
+ "heiss\xE4",
379
+ "heist\xE4",
380
+ "heihin",
381
+ "heill\xE4",
382
+ "heilt\xE4",
383
+ "heille",
384
+ "t\xE4m\xE4",
385
+ "t\xE4m\xE4n",
386
+ "t\xE4t\xE4",
387
+ "t\xE4ss\xE4",
388
+ "t\xE4st\xE4",
389
+ "t\xE4h\xE4n",
390
+ "t\xE4ll\xE4",
391
+ "t\xE4lt\xE4",
392
+ "t\xE4lle",
393
+ "t\xE4n\xE4",
394
+ "t\xE4ksi",
395
+ "tuo",
396
+ "tuon",
397
+ "tuota",
398
+ "tuossa",
399
+ "tuosta",
400
+ "tuohon",
401
+ "tuolla",
402
+ "tuolta",
403
+ "tuolle",
404
+ "tuona",
405
+ "tuoksi",
406
+ "se",
407
+ "sen",
408
+ "sit\xE4",
409
+ "siin\xE4",
410
+ "siit\xE4",
411
+ "siihen",
412
+ "sill\xE4",
413
+ "silt\xE4",
414
+ "sille",
415
+ "sin\xE4",
416
+ "siksi",
417
+ "n\xE4m\xE4",
418
+ "n\xE4iden",
419
+ "n\xE4it\xE4",
420
+ "n\xE4iss\xE4",
421
+ "n\xE4ist\xE4",
422
+ "n\xE4ihin",
423
+ "n\xE4ill\xE4",
424
+ "n\xE4ilt\xE4",
425
+ "n\xE4ille",
426
+ "n\xE4in\xE4",
427
+ "n\xE4iksi",
428
+ "nuo",
429
+ "noiden",
430
+ "noita",
431
+ "noissa",
432
+ "noista",
433
+ "noihin",
434
+ "noilla",
435
+ "noilta",
436
+ "noille",
437
+ "noina",
438
+ "noiksi",
439
+ "ne",
440
+ "niiden",
441
+ "niit\xE4",
442
+ "niiss\xE4",
443
+ "niist\xE4",
444
+ "niihin",
445
+ "niill\xE4",
446
+ "niilt\xE4",
447
+ "niille",
448
+ "niin\xE4",
449
+ "niiksi",
450
+ "kuka",
451
+ "kenen",
452
+ "kenet",
453
+ "ket\xE4",
454
+ "keness\xE4",
455
+ "kenest\xE4",
456
+ "keneen",
457
+ "kenell\xE4",
458
+ "kenelt\xE4",
459
+ "kenelle",
460
+ "kenen\xE4",
461
+ "keneksi",
462
+ "ketk\xE4",
463
+ "keiden",
464
+ "keit\xE4",
465
+ "keiss\xE4",
466
+ "keist\xE4",
467
+ "keihin",
468
+ "keill\xE4",
469
+ "keilt\xE4",
470
+ "keille",
471
+ "kein\xE4",
472
+ "keiksi",
473
+ "mik\xE4",
474
+ "mink\xE4",
475
+ "mit\xE4",
476
+ "miss\xE4",
477
+ "mist\xE4",
478
+ "mihin",
479
+ "mill\xE4",
480
+ "milt\xE4",
481
+ "mille",
482
+ "min\xE4",
483
+ "miksi",
484
+ "mitk\xE4",
485
+ "joka",
486
+ "jonka",
487
+ "jota",
488
+ "jossa",
489
+ "josta",
490
+ "johon",
491
+ "jolla",
492
+ "jolta",
493
+ "jolle",
494
+ "jona",
495
+ "joksi",
496
+ "jotka",
497
+ "joiden",
498
+ "joita",
499
+ "joissa",
500
+ "joista",
501
+ "joihin",
502
+ "joilla",
503
+ "joilta",
504
+ "joille",
505
+ "joina",
506
+ "joiksi",
507
+ "ett\xE4",
508
+ "ja",
509
+ "jos",
510
+ "koska",
511
+ "kuin",
512
+ "mutta",
513
+ "niin",
514
+ "sek\xE4",
515
+ "sill\xE4",
516
+ "tai",
517
+ "vaan",
518
+ "vai",
519
+ "vaikka",
520
+ "kanssa",
521
+ "mukaan",
522
+ "noin",
523
+ "poikki",
524
+ "yli",
525
+ "kun",
526
+ "nyt",
527
+ "itse"
528
+ ]);
529
+ var finnish = {
530
+ name: "finnish",
531
+ stemmer: stem,
532
+ stopWords,
533
+ tokenizer: { splitPattern: /[^a-z0-9äö]+/gi }
534
+ };
535
+
536
+ export { finnish };
@@ -0,0 +1,5 @@
1
+ import { L as LanguageModule } from '../language-ClUGLuoC.js';
2
+
3
+ declare const french: LanguageModule;
4
+
5
+ export { french };