bekindprofanityfilter 0.0.1

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 (82) hide show
  1. package/CONTRIBUTORS.md +106 -0
  2. package/LICENSE +22 -0
  3. package/README.md +1015 -0
  4. package/allprofanity.config.example.json +35 -0
  5. package/bin/init.js +49 -0
  6. package/config.schema.json +163 -0
  7. package/dist/algos/aho-corasick.d.ts +75 -0
  8. package/dist/algos/aho-corasick.js +238 -0
  9. package/dist/algos/aho-corasick.js.map +1 -0
  10. package/dist/algos/bloom-filter.d.ts +103 -0
  11. package/dist/algos/bloom-filter.js +208 -0
  12. package/dist/algos/bloom-filter.js.map +1 -0
  13. package/dist/algos/context-patterns.d.ts +102 -0
  14. package/dist/algos/context-patterns.js +484 -0
  15. package/dist/algos/context-patterns.js.map +1 -0
  16. package/dist/index.d.ts +1332 -0
  17. package/dist/index.js +2631 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/innocence-scoring.d.ts +23 -0
  20. package/dist/innocence-scoring.js +118 -0
  21. package/dist/innocence-scoring.js.map +1 -0
  22. package/dist/language-detector.d.ts +162 -0
  23. package/dist/language-detector.js +952 -0
  24. package/dist/language-detector.js.map +1 -0
  25. package/dist/language-dicts.d.ts +60 -0
  26. package/dist/language-dicts.js +2718 -0
  27. package/dist/language-dicts.js.map +1 -0
  28. package/dist/languages/arabic-words.d.ts +10 -0
  29. package/dist/languages/arabic-words.js +1649 -0
  30. package/dist/languages/arabic-words.js.map +1 -0
  31. package/dist/languages/bengali-words.d.ts +10 -0
  32. package/dist/languages/bengali-words.js +1696 -0
  33. package/dist/languages/bengali-words.js.map +1 -0
  34. package/dist/languages/brazilian-words.d.ts +10 -0
  35. package/dist/languages/brazilian-words.js +2122 -0
  36. package/dist/languages/brazilian-words.js.map +1 -0
  37. package/dist/languages/chinese-words.d.ts +10 -0
  38. package/dist/languages/chinese-words.js +2728 -0
  39. package/dist/languages/chinese-words.js.map +1 -0
  40. package/dist/languages/english-primary-all-languages.d.ts +23 -0
  41. package/dist/languages/english-primary-all-languages.js +36894 -0
  42. package/dist/languages/english-primary-all-languages.js.map +1 -0
  43. package/dist/languages/english-words.d.ts +5 -0
  44. package/dist/languages/english-words.js +5156 -0
  45. package/dist/languages/english-words.js.map +1 -0
  46. package/dist/languages/french-words.d.ts +10 -0
  47. package/dist/languages/french-words.js +2326 -0
  48. package/dist/languages/french-words.js.map +1 -0
  49. package/dist/languages/german-words.d.ts +10 -0
  50. package/dist/languages/german-words.js +2633 -0
  51. package/dist/languages/german-words.js.map +1 -0
  52. package/dist/languages/hindi-words.d.ts +10 -0
  53. package/dist/languages/hindi-words.js +2341 -0
  54. package/dist/languages/hindi-words.js.map +1 -0
  55. package/dist/languages/innocent-words.d.ts +41 -0
  56. package/dist/languages/innocent-words.js +109 -0
  57. package/dist/languages/innocent-words.js.map +1 -0
  58. package/dist/languages/italian-words.d.ts +10 -0
  59. package/dist/languages/italian-words.js +2287 -0
  60. package/dist/languages/italian-words.js.map +1 -0
  61. package/dist/languages/japanese-words.d.ts +11 -0
  62. package/dist/languages/japanese-words.js +2557 -0
  63. package/dist/languages/japanese-words.js.map +1 -0
  64. package/dist/languages/korean-words.d.ts +10 -0
  65. package/dist/languages/korean-words.js +2509 -0
  66. package/dist/languages/korean-words.js.map +1 -0
  67. package/dist/languages/russian-words.d.ts +10 -0
  68. package/dist/languages/russian-words.js +2175 -0
  69. package/dist/languages/russian-words.js.map +1 -0
  70. package/dist/languages/spanish-words.d.ts +11 -0
  71. package/dist/languages/spanish-words.js +2536 -0
  72. package/dist/languages/spanish-words.js.map +1 -0
  73. package/dist/languages/tamil-words.d.ts +10 -0
  74. package/dist/languages/tamil-words.js +1722 -0
  75. package/dist/languages/tamil-words.js.map +1 -0
  76. package/dist/languages/telugu-words.d.ts +10 -0
  77. package/dist/languages/telugu-words.js +1739 -0
  78. package/dist/languages/telugu-words.js.map +1 -0
  79. package/dist/romanization-detector.d.ts +50 -0
  80. package/dist/romanization-detector.js +779 -0
  81. package/dist/romanization-detector.js.map +1 -0
  82. package/package.json +79 -0
@@ -0,0 +1,2718 @@
1
+ /**
2
+ * Language dictionary data and trie structures for vocabulary-based language detection.
3
+ *
4
+ * Extracted from language-detector.ts to keep the large vocabulary database
5
+ * separate from the detection logic.
6
+ */
7
+ export const VOCABULARY = {
8
+ en: {
9
+ words: [
10
+ // Function words & pronouns
11
+ "the", "be", "to", "of", "and", "a", "in", "that", "have", "it",
12
+ "for", "not", "on", "with", "he", "as", "you", "do", "at", "this",
13
+ "but", "his", "by", "from", "they", "we", "say", "her", "she", "or",
14
+ "an", "will", "my", "one", "all", "would", "there", "their", "what",
15
+ "so", "up", "out", "if", "about", "who", "get", "which", "go", "me",
16
+ "when", "can", "like", "just", "him", "know", "take", "people",
17
+ "into", "year", "your", "good", "some", "could", "them", "than",
18
+ "other", "very", "after", "also", "did", "many", "before", "must",
19
+ "hello", "goodbye", "please", "sorry", "thanks", "yes", "no",
20
+ "okay", "really", "right", "every", "much", "world",
21
+ "each", "thing", "things", "been", "done", "these", "those",
22
+ "only", "well", "back", "over", "where", "here", "still", "now",
23
+ "myself", "yourself", "himself", "herself", "itself", "ourselves",
24
+ "themselves", "anybody", "anyone", "anything", "everybody", "everyone",
25
+ "everything", "nobody", "nothing", "somebody", "someone", "something",
26
+ // Common verbs
27
+ "think", "make", "want", "give", "use", "find", "tell", "ask",
28
+ "work", "seem", "feel", "try", "leave", "call", "keep", "let",
29
+ "begin", "show", "hear", "play", "run", "move", "live", "believe",
30
+ "bring", "happen", "write", "provide", "sit", "stand", "lose",
31
+ "pay", "meet", "include", "continue", "set", "learn", "change",
32
+ "lead", "understand", "watch", "follow", "stop", "create", "speak",
33
+ "read", "allow", "add", "spend", "grow", "open", "walk", "win",
34
+ "offer", "remember", "love", "consider", "appear", "buy", "wait",
35
+ "serve", "die", "send", "expect", "build", "stay", "fall", "cut",
36
+ "reach", "kill", "remain", "suggest", "raise", "pass", "sell",
37
+ "eat", "drink", "sleep", "drive", "shop", "cook", "clean", "swim",
38
+ "sing", "dance", "draw", "teach", "study", "travel", "visit",
39
+ "wear", "carry", "pull", "push", "throw", "catch", "pick", "drop",
40
+ "climb", "jump", "kick", "hit", "break", "fix", "choose", "fight",
41
+ "forget", "guess", "hate", "hope", "hurry", "laugh", "listen",
42
+ "miss", "need", "notice", "order", "plan", "promise", "refuse",
43
+ "relax", "reply", "save", "search", "smile", "stare", "suppose",
44
+ "taste", "touch", "trust", "wake", "warn", "wish", "worry",
45
+ "agree", "argue", "arrive", "belong", "borrow", "breathe",
46
+ "celebrate", "compare", "complain", "deliver", "describe", "destroy",
47
+ "discover", "discuss", "divide", "doubt", "earn", "enjoy", "enter",
48
+ "escape", "examine", "exchange", "exist", "explain", "explore",
49
+ "express", "fail", "feed", "finish", "fly", "fold", "gather",
50
+ "handle", "hang", "hide", "hold", "hunt", "hurry", "imagine",
51
+ "improve", "invent", "invite", "join", "lend", "lift", "lock",
52
+ "measure", "mention", "mind", "multiply", "obey", "owe",
53
+ "pack", "paint", "perform", "permit", "pour", "pray", "prefer",
54
+ "prepare", "press", "prevent", "print", "produce", "protect",
55
+ "prove", "punish", "receive", "recognize", "recommend", "record",
56
+ "reduce", "reflect", "refuse", "relate", "release", "repair",
57
+ "repeat", "replace", "report", "represent", "request", "require",
58
+ "respect", "retire", "return", "reveal", "ride", "ring", "roll",
59
+ "rush", "satisfy", "scare", "scream", "separate", "settle",
60
+ "shake", "share", "shout", "shut", "slip", "smoke", "sneeze",
61
+ "solve", "sort", "spread", "squeeze", "steal", "stick", "stretch",
62
+ "strike", "struggle", "succeed", "suffer", "supply", "support",
63
+ "surprise", "surround", "survive", "suspect", "swear", "sweep",
64
+ "swing", "switch", "tear", "tend", "threaten", "tidy", "tie",
65
+ "translate", "trap", "treat", "trick", "trouble", "turn", "twist",
66
+ "unite", "upset", "vote", "wander", "waste", "wave", "weigh",
67
+ "welcome", "whisper", "wonder", "wrap", "yell",
68
+ // Common nouns
69
+ "time", "way", "day", "man", "woman", "child", "world", "life",
70
+ "hand", "part", "place", "case", "week", "company", "system",
71
+ "program", "question", "government", "number", "night", "point",
72
+ "home", "water", "room", "mother", "area", "money", "story",
73
+ "fact", "month", "lot", "right", "study", "book", "eye", "job",
74
+ "word", "business", "issue", "side", "kind", "head", "house",
75
+ "service", "friend", "father", "power", "hour", "game", "line",
76
+ "end", "member", "law", "car", "city", "community", "name",
77
+ "president", "team", "minute", "idea", "body", "information",
78
+ "back", "parent", "face", "others", "level", "office", "door",
79
+ "health", "person", "art", "war", "history", "party", "result",
80
+ "morning", "reason", "research", "girl", "guy", "moment", "air",
81
+ "teacher", "force", "education", "food", "school", "church",
82
+ // Technology
83
+ "computer", "phone", "internet", "email", "website", "software",
84
+ "keyboard", "screen", "battery", "download", "upload", "password",
85
+ "username", "browser", "laptop", "desktop", "tablet", "bluetooth",
86
+ "wifi", "streaming", "podcast", "app", "database", "algorithm",
87
+ // Food & drink
88
+ "breakfast", "lunch", "dinner", "coffee", "chicken", "bread",
89
+ "cheese", "butter", "sugar", "salt", "pepper", "soup", "salad",
90
+ "sandwich", "steak", "bacon", "sausage", "pie", "cake", "cookie",
91
+ "chocolate", "candy", "juice", "milk", "tea", "beer", "wine",
92
+ "beef", "pork", "lamb", "turkey", "shrimp", "lobster", "tuna",
93
+ "potato", "tomato", "onion", "garlic", "mushroom", "lettuce",
94
+ "corn", "bean", "rice", "noodle", "flour", "dough", "gravy",
95
+ "ketchup", "mustard", "vinegar", "honey", "jam", "cereal",
96
+ "pancake", "waffle", "muffin", "donut", "bagel", "pretzel",
97
+ // Time & calendar
98
+ "today", "tomorrow", "yesterday", "monday", "tuesday", "wednesday",
99
+ "thursday", "friday", "saturday", "sunday", "january", "february",
100
+ "march", "april", "may", "june", "july", "august", "september",
101
+ "october", "november", "december", "spring", "summer", "autumn",
102
+ "winter", "midnight", "noon", "afternoon", "evening", "weekend",
103
+ "tonight", "daily", "weekly", "monthly", "yearly", "forever",
104
+ // Numbers
105
+ "zero", "one", "two", "three", "four", "five", "six", "seven",
106
+ "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
107
+ "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty",
108
+ "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety",
109
+ "hundred", "thousand", "million", "billion", "dozen", "half",
110
+ "quarter", "third", "twice", "once",
111
+ // Relationships & people
112
+ "boyfriend", "girlfriend", "husband", "wife", "brother", "sister",
113
+ "daughter", "son", "uncle", "aunt", "cousin", "nephew", "niece",
114
+ "grandfather", "grandmother", "grandparent", "stepfather", "stepmother",
115
+ "neighbor", "stranger", "colleague", "boss", "employee", "customer",
116
+ "patient", "passenger", "audience", "crowd", "citizen", "volunteer",
117
+ // Places & buildings
118
+ "airport", "hospital", "restaurant", "hotel", "library", "museum",
119
+ "stadium", "theater", "cinema", "mall", "supermarket", "pharmacy",
120
+ "bakery", "bank", "factory", "warehouse", "garage", "basement",
121
+ "apartment", "building", "bridge", "highway", "sidewalk", "parking",
122
+ "bedroom", "bathroom", "kitchen", "garden", "backyard", "rooftop",
123
+ "classroom", "playground", "gymnasium", "cafeteria", "hallway",
124
+ // Transport
125
+ "bus", "train", "bicycle", "motorcycle", "truck", "subway",
126
+ "ferry", "helicopter", "airplane", "taxi", "traffic", "commute",
127
+ // Clothing & accessories
128
+ "shirt", "pants", "dress", "skirt", "jacket", "coat", "sweater",
129
+ "boots", "sneakers", "sandals", "hat", "scarf", "gloves", "belt",
130
+ "pocket", "zipper", "button", "collar", "sleeve", "helmet",
131
+ // Body parts
132
+ "finger", "thumb", "wrist", "elbow", "shoulder", "knee", "ankle",
133
+ "toe", "heel", "chest", "stomach", "throat", "tongue", "teeth",
134
+ "lip", "cheek", "chin", "forehead", "eyebrow", "eyelash", "brain",
135
+ "heart", "lung", "muscle", "bone", "skin", "blood", "nail",
136
+ // Nature & weather
137
+ "rain", "snow", "wind", "cloud", "sunshine", "storm", "thunder",
138
+ "lightning", "rainbow", "flood", "drought", "earthquake", "volcano",
139
+ "river", "lake", "ocean", "beach", "mountain", "valley", "forest",
140
+ "desert", "island", "cliff", "waterfall", "meadow", "swamp",
141
+ "tree", "flower", "grass", "leaf", "branch", "root", "seed",
142
+ // Animals
143
+ "dog", "cat", "bird", "fish", "horse", "cow", "sheep", "pig",
144
+ "chicken", "duck", "rabbit", "mouse", "deer", "bear", "wolf",
145
+ "fox", "snake", "frog", "turtle", "whale", "dolphin", "shark",
146
+ "eagle", "owl", "penguin", "butterfly", "spider", "bee", "ant",
147
+ // Emotions & states
148
+ "happy", "sad", "angry", "scared", "tired", "bored", "excited",
149
+ "nervous", "confused", "surprised", "proud", "jealous", "lonely",
150
+ "guilty", "ashamed", "grateful", "curious", "anxious", "calm",
151
+ "comfortable", "disappointed", "embarrassed", "frustrated", "hopeful",
152
+ // Everyday objects
153
+ "table", "chair", "bed", "lamp", "mirror", "clock", "window",
154
+ "pillow", "blanket", "towel", "soap", "toothbrush", "comb",
155
+ "umbrella", "wallet", "purse", "backpack", "suitcase", "basket",
156
+ "bottle", "cup", "plate", "bowl", "spoon", "fork", "knife",
157
+ "scissors", "needle", "thread", "tape", "glue", "rope", "chain",
158
+ "key", "lock", "bell", "candle", "match", "lighter", "battery",
159
+ // Entertainment & hobbies
160
+ "movie", "music", "song", "dance", "painting", "drawing",
161
+ "photograph", "guitar", "piano", "drum", "violin", "concert",
162
+ "festival", "carnival", "circus", "puzzle", "chess", "camping",
163
+ "hiking", "fishing", "gardening", "cooking", "sewing", "knitting",
164
+ // Sports
165
+ "baseball", "basketball", "football", "soccer", "tennis", "golf",
166
+ "volleyball", "hockey", "boxing", "wrestling", "swimming", "running",
167
+ "cycling", "skiing", "skateboard", "surfing", "bowling", "archery",
168
+ // Abstract & misc
169
+ "truth", "freedom", "justice", "peace", "danger", "safety",
170
+ "success", "failure", "chance", "choice", "trouble", "secret",
171
+ "mistake", "lesson", "experience", "knowledge", "wisdom", "skill",
172
+ "talent", "effort", "progress", "growth", "dream", "goal",
173
+ "purpose", "value", "worth", "meaning", "beauty", "strength",
174
+ "courage", "patience", "kindness", "honesty", "loyalty", "respect",
175
+ "pride", "shame", "anger", "fear", "joy", "grief", "pain",
176
+ "pleasure", "comfort", "relief", "burden", "struggle", "victory",
177
+ "defeat", "reward", "punishment", "blame", "praise", "criticism",
178
+ // Common adjectives (expanded)
179
+ "new", "old", "great", "big", "small", "long", "high", "little",
180
+ "own", "young", "important", "few", "public", "bad", "same",
181
+ "able", "last", "large", "social", "sure", "early", "real",
182
+ "clear", "different", "whole", "possible", "full", "special",
183
+ "free", "strong", "human", "local", "best", "better", "true",
184
+ "hard", "white", "black", "close", "common", "short", "natural",
185
+ "cool", "awesome", "amazing", "nice", "pretty", "funny", "weird",
186
+ "crazy", "stupid", "smart", "clever", "brilliant", "gorgeous",
187
+ "ugly", "tiny", "huge", "thick", "thin", "narrow", "wide",
188
+ "deep", "shallow", "rough", "smooth", "sharp", "dull", "loud",
189
+ "quiet", "bright", "dark", "warm", "cold", "hot", "fresh",
190
+ "stale", "wet", "dry", "clean", "dirty", "empty", "crowded",
191
+ "cheap", "expensive", "rich", "poor", "busy", "lazy", "strict",
192
+ "gentle", "fierce", "mild", "severe", "obvious", "subtle",
193
+ "ordinary", "strange", "familiar", "foreign", "ancient", "modern",
194
+ "previous", "current", "recent", "sudden", "gradual", "steady",
195
+ "rapid", "slow", "quick", "fast", "heavy", "light", "soft",
196
+ "tough", "loose", "tight", "straight", "crooked", "flat", "steep",
197
+ "hollow", "solid", "raw", "ripe", "rotten", "bitter", "sweet",
198
+ "sour", "spicy", "salty", "delicious", "disgusting", "awful",
199
+ "wonderful", "terrible", "fantastic", "incredible", "ridiculous",
200
+ "jealous", "selfish", "generous", "greedy", "humble", "arrogant",
201
+ // Common adverbs & connectors
202
+ "then", "too", "really", "already", "always", "never", "often",
203
+ "still", "even", "here", "enough", "well", "actually", "probably",
204
+ "maybe", "perhaps", "however", "although", "because", "since",
205
+ "while", "though", "whether", "between", "without", "through",
206
+ "during", "under", "around", "among", "until", "toward",
207
+ "together", "sometimes", "usually", "certainly", "especially",
208
+ "barely", "hardly", "merely", "nearly", "quite", "rather",
209
+ "somewhat", "entire", "complete", "absolute", "definite",
210
+ "obvious", "apparent", "basic", "essential", "literal",
211
+ "serious", "honest", "frank", "hopeful", "fortunate",
212
+ "unfortunate", "meanwhile", "nevertheless",
213
+ "furthermore", "moreover", "otherwise", "therefore",
214
+ "regardless", "besides", "instead", "anyway", "somehow", "somewhere",
215
+ "nowhere", "everywhere", "anywhere", "whenever", "wherever",
216
+ "whatever", "whoever", "whichever",
217
+ // International words (shared across many languages — also present in respective language vocabs)
218
+ "bar", "film", "sport", "metro", "tram", "motor", "boot", "brief",
219
+ "park", "bank", "album", "radar", "yoga", "safari", "guru",
220
+ "cycle", "lorry", "launch", "jacket", "belt", "auto",
221
+ "rail", "coat", "sandal", "pant", "sweater",
222
+ ],
223
+ phrases: [
224
+ "how are you", "thank you", "good morning", "what is this",
225
+ "where is it", "how much", "what time", "where are you from",
226
+ "can you help", "nice to meet you", "good evening", "good night",
227
+ "see you later", "i don't know", "i think so", "of course",
228
+ "no problem", "excuse me", "i'm sorry", "what do you mean",
229
+ "how do you", "let me know", "take care", "by the way",
230
+ "as soon as", "in order to", "a lot of", "kind of",
231
+ "sort of", "used to", "going to", "have to", "want to",
232
+ "need to", "supposed to", "looking for", "waiting for",
233
+ "talking about", "thinking about", "right now", "so far",
234
+ "at least", "at first", "on the other hand", "for example",
235
+ ],
236
+ },
237
+ es: {
238
+ words: [
239
+ // Articles, prepositions, conjunctions
240
+ "el", "la", "los", "las", "de", "que", "y", "en", "un", "una",
241
+ "por", "con", "para", "como", "está", "más", "pero", "su", "se",
242
+ "ha", "es", "lo", "ya", "todo", "al", "del", "le", "les", "nos",
243
+ "sin", "sobre", "entre", "hasta", "desde", "hacia", "según",
244
+ "durante", "mediante", "contra", "ante", "tras",
245
+ "aunque", "porque", "sino", "mientras", "cuando", "donde",
246
+ "pues", "luego", "ni", "ambos", "cualquier", "demás",
247
+ // Pronouns
248
+ "yo", "tú", "él", "ella", "nosotros", "vosotros", "ellos", "ellas",
249
+ "usted", "ustedes", "me", "te", "nos", "os", "mío", "tuyo", "suyo",
250
+ "nuestro", "vuestro", "este", "ese", "aquel", "esto", "eso", "aquello",
251
+ "alguien", "nadie", "algo", "nada", "cada", "ambas", "cuyo", "cuya",
252
+ // Common verbs (infinitives)
253
+ "ser", "estar", "tener", "hacer", "poder", "decir", "ir", "ver",
254
+ "dar", "saber", "querer", "llegar", "pasar", "deber", "poner",
255
+ "parecer", "quedar", "creer", "hablar", "llevar", "dejar", "seguir",
256
+ "encontrar", "llamar", "venir", "pensar", "salir", "volver",
257
+ "tomar", "conocer", "vivir", "sentir", "tratar", "mirar",
258
+ "contar", "empezar", "esperar", "buscar", "existir", "entrar",
259
+ "trabajar", "escribir", "perder", "producir", "ocurrir", "entender",
260
+ "pedir", "recibir", "recordar", "terminar", "permitir", "aparecer",
261
+ "conseguir", "comenzar", "servir", "sacar", "necesitar", "mantener",
262
+ "tiene", "puede", "hace", "soy", "fue", "sido", "siendo",
263
+ "comer", "beber", "dormir", "correr", "nadar", "bailar", "cantar",
264
+ "cocinar", "limpiar", "comprar", "vender", "pagar", "ganar",
265
+ "jugar", "estudiar", "enseñar", "aprender", "leer", "abrir",
266
+ "cerrar", "subir", "bajar", "caer", "tirar", "empujar", "romper",
267
+ "construir", "dibujar", "pintar", "conducir", "manejar", "viajar",
268
+ "caminar", "gritar", "llorar", "reír", "sonreír", "soñar",
269
+ "despertar", "acostar", "vestir", "elegir", "ofrecer", "cumplir",
270
+ "olvidar", "imaginar", "intentar", "lograr", "mejorar", "cambiar",
271
+ "crecer", "morir", "nacer", "sufrir", "disfrutar", "celebrar",
272
+ "explicar", "preguntar", "responder", "agradecer", "disculpar",
273
+ "prometer", "confiar", "mentir", "robar", "escapar", "proteger",
274
+ "destruir", "luchar", "gastar", "ahorrar", "invertir", "mover",
275
+ // Common nouns
276
+ "vida", "tiempo", "mundo", "casa", "trabajo", "amigo", "familia",
277
+ "comida", "agua", "dinero", "día", "noche", "mañana", "tarde",
278
+ "semana", "mes", "año", "hombre", "mujer", "niño", "niña",
279
+ "ciudad", "país", "pueblo", "calle", "lugar", "parte", "gobierno",
280
+ "empresa", "escuela", "grupo", "problema", "punto", "momento",
281
+ "persona", "forma", "ejemplo", "historia", "cosa", "manera",
282
+ "derecho", "estado", "guerra", "razón", "verdad", "fuerza",
283
+ "tierra", "hijo", "padre", "madre", "hermano", "hermana",
284
+ "corazón", "puerta", "cuerpo", "cabeza", "mano", "ojo",
285
+ "libro", "palabra", "camino", "iglesia", "nombre", "muerte",
286
+ // Family & people
287
+ "abuelo", "abuela", "tío", "tía", "primo", "prima", "sobrino",
288
+ "sobrina", "esposo", "esposa", "novio", "novia", "vecino", "vecina",
289
+ // Food & drink
290
+ "desayuno", "almuerzo", "cena", "pan", "leche", "queso", "huevo",
291
+ "arroz", "carne", "pollo", "pescado", "fruta", "verdura", "sopa",
292
+ "ensalada", "postre", "helado", "galleta", "cerveza", "vino",
293
+ "aceite", "sal", "azúcar", "pimienta", "ajo", "cebolla", "tomate",
294
+ "manzana", "naranja", "plátano", "fresa", "uva", "limón",
295
+ // Days, months, seasons
296
+ "lunes", "martes", "miércoles", "jueves", "viernes", "sábado",
297
+ "domingo", "enero", "febrero", "marzo", "abril", "mayo", "junio",
298
+ "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre",
299
+ "primavera", "verano", "otoño", "invierno",
300
+ // Numbers
301
+ "cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete",
302
+ "ocho", "nueve", "diez", "once", "doce", "veinte", "treinta",
303
+ "cuarenta", "cincuenta", "cien", "mil", "millón",
304
+ // Body parts
305
+ "brazo", "pierna", "pie", "rodilla", "hombro", "dedo", "espalda",
306
+ "estómago", "pecho", "cuello", "nariz", "oreja", "boca", "diente",
307
+ "labio", "mejilla", "frente", "pelo", "piel", "hueso", "sangre",
308
+ // Nature & weather
309
+ "lluvia", "nieve", "viento", "nube", "sol", "tormenta", "trueno",
310
+ "relámpago", "río", "lago", "mar", "playa", "montaña", "bosque",
311
+ "desierto", "isla", "árbol", "flor", "hierba", "hoja", "piedra",
312
+ // Animals
313
+ "perro", "gato", "pájaro", "pez", "caballo", "vaca", "oveja",
314
+ "cerdo", "conejo", "ratón", "oso", "lobo", "serpiente", "rana",
315
+ "tortuga", "ballena", "tiburón", "águila", "mariposa", "hormiga",
316
+ // Places
317
+ "aeropuerto", "hospital", "restaurante", "biblioteca", "museo",
318
+ "estación", "mercado", "tienda", "farmacia", "panadería", "banco",
319
+ "cocina", "habitación", "jardín", "terraza", "balcón", "escalera",
320
+ // Clothing
321
+ "camisa", "pantalón", "vestido", "falda", "chaqueta", "abrigo",
322
+ "zapato", "bota", "sombrero", "bufanda", "guante", "cinturón",
323
+ // Abstract
324
+ "libertad", "justicia", "paz", "peligro", "seguridad", "éxito",
325
+ "fracaso", "sueño", "esperanza", "miedo", "alegría", "tristeza",
326
+ "amor", "odio", "culpa", "orgullo", "vergüenza", "paciencia",
327
+ "confianza", "respeto", "valor", "belleza", "fuerza", "salud",
328
+ // Common adjectives
329
+ "bueno", "malo", "grande", "pequeño", "nuevo", "viejo", "mejor",
330
+ "peor", "primero", "último", "mismo", "largo", "joven", "alto",
331
+ "bajo", "bonito", "importante", "diferente", "posible", "cierto",
332
+ "claro", "fuerte", "libre", "lleno", "solo", "propio", "siguiente",
333
+ "hermoso", "feo", "gordo", "flaco", "delgado", "ancho", "estrecho",
334
+ "profundo", "caliente", "frío", "tibio", "seco", "húmedo",
335
+ "limpio", "sucio", "vacío", "lleno", "barato", "caro", "rico",
336
+ "pobre", "rápido", "lento", "suave", "duro", "blando", "amargo",
337
+ "dulce", "salado", "picante", "sabroso", "asqueroso", "maravilloso",
338
+ "terrible", "fantástico", "increíble", "ridículo", "gracioso",
339
+ "aburrido", "emocionante", "tranquilo", "nervioso", "orgulloso",
340
+ "celoso", "generoso", "amable", "grosero", "tonto", "inteligente",
341
+ // Colors
342
+ "rojo", "azul", "verde", "amarillo", "negro", "blanco", "gris",
343
+ "marrón", "rosa", "morado", "naranja", "dorado", "plateado",
344
+ // Common adverbs
345
+ "también", "siempre", "nunca", "ahora", "después", "antes",
346
+ "aquí", "allí", "muy", "bien", "mal", "bastante", "todavía",
347
+ "casi", "menos", "además", "quizás", "tampoco", "apenas",
348
+ "incluso", "sólo", "solamente", "realmente", "normalmente",
349
+ "rápido", "lento", "fácil", "difícil",
350
+ "completo", "exacto", "probable", "seguro",
351
+ "final", "general", "especial", "principal",
352
+ ],
353
+ phrases: [
354
+ "cómo estás", "buenos días", "qué es esto", "dónde está",
355
+ "cuánto cuesta", "qué hora es", "de dónde eres",
356
+ "puedes ayudarme", "mucho gusto", "buenas tardes", "buenas noches",
357
+ "hasta luego", "nos vemos", "con permiso", "lo siento",
358
+ "no sé", "creo que", "por favor", "por supuesto", "claro que sí",
359
+ "qué tal", "qué pasa", "no hay problema", "está bien",
360
+ "me llamo", "tengo que", "hay que", "a veces", "en seguida",
361
+ "sin embargo", "por ejemplo", "al menos", "en realidad",
362
+ "cada vez", "tal vez", "sobre todo", "de acuerdo", "a menudo",
363
+ "al final", "más o menos", "poco a poco", "en cambio",
364
+ ],
365
+ },
366
+ fr: {
367
+ words: [
368
+ // Articles, prepositions, conjunctions
369
+ "le", "la", "les", "de", "un", "une", "des", "et", "en", "que",
370
+ "est", "pour", "dans", "par", "avec", "plus", "son", "ou", "mais",
371
+ "ce", "qui", "il", "elle", "on", "nous", "vous", "ils", "elles",
372
+ "au", "aux", "du", "entre", "vers", "chez", "sans", "sous", "sur",
373
+ "depuis", "pendant", "avant", "après", "contre", "selon",
374
+ // Pronouns
375
+ "je", "tu", "moi", "toi", "lui", "eux", "soi", "ceux", "celles",
376
+ "mon", "ton", "notre", "votre", "leur", "tout", "celui", "celle",
377
+ "rien", "personne", "quelqu'un", "chacun", "chaque", "aucun",
378
+ "ceci", "cela", "lequel", "laquelle", "lesquels", "lesquelles",
379
+ // Common verbs
380
+ "être", "avoir", "faire", "dire", "aller", "voir", "savoir",
381
+ "pouvoir", "falloir", "vouloir", "venir", "prendre", "trouver",
382
+ "donner", "parler", "mettre", "devoir", "passer", "regarder",
383
+ "aimer", "croire", "demander", "rester", "répondre", "entendre",
384
+ "penser", "arriver", "connaître", "devenir", "sentir", "sembler",
385
+ "tenir", "comprendre", "rendre", "attendre", "sortir", "vivre",
386
+ "chercher", "porter", "revenir", "mourir", "écrire", "ouvrir",
387
+ "appeler", "perdre", "permettre", "commencer", "suivre", "montrer",
388
+ "servir", "recevoir", "finir", "lire", "tomber", "manger",
389
+ "boire", "dormir", "courir", "nager", "danser", "chanter",
390
+ "cuisiner", "nettoyer", "acheter", "vendre", "payer", "gagner",
391
+ "jouer", "étudier", "enseigner", "apprendre", "conduire",
392
+ "voyager", "marcher", "crier", "pleurer", "rire", "sourire",
393
+ "rêver", "réveiller", "habiller", "choisir", "offrir", "oublier",
394
+ "imaginer", "essayer", "réussir", "améliorer", "grandir",
395
+ "naître", "souffrir", "profiter", "célébrer", "expliquer",
396
+ "remercier", "excuser", "promettre", "mentir", "voler",
397
+ "protéger", "détruire", "lutter", "dépenser", "économiser",
398
+ "construire", "dessiner", "peindre", "coudre", "jardiner",
399
+ "embrasser", "caresser", "emménager", "déménager", "réfléchir",
400
+ "partager", "préparer", "ranger", "réparer", "découvrir",
401
+ // Common nouns
402
+ "homme", "femme", "enfant", "jour", "temps", "monde", "vie",
403
+ "chose", "main", "maison", "pays", "moment", "heure", "place",
404
+ "travail", "tête", "yeux", "voix", "porte", "cas", "eau",
405
+ "corps", "ville", "nom", "terre", "ami", "droit", "état",
406
+ "problème", "exemple", "groupe", "raison", "guerre", "force",
407
+ "mot", "livre", "histoire", "école", "famille", "gouvernement",
408
+ "père", "mère", "frère", "sœur", "fils", "fille", "cœur",
409
+ "rue", "nuit", "matin", "soir", "semaine", "mois", "année",
410
+ // Family
411
+ "oncle", "tante", "neveu", "nièce", "cousin", "cousine",
412
+ "grand-père", "grand-mère", "époux", "épouse", "copain", "copine",
413
+ "voisin", "voisine", "bébé", "adolescent",
414
+ // Food & drink
415
+ "petit-déjeuner", "déjeuner", "dîner", "pain", "lait", "fromage",
416
+ "beurre", "œuf", "riz", "viande", "poulet", "poisson", "fruit",
417
+ "légume", "soupe", "salade", "dessert", "glace", "gâteau",
418
+ "biscuit", "bière", "vin", "café", "thé", "sucre", "sel",
419
+ "poivre", "huile", "ail", "oignon", "pomme", "orange", "fraise",
420
+ "croissant", "baguette", "crêpe", "quiche", "confiture",
421
+ // Days, months, seasons
422
+ "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi",
423
+ "dimanche", "janvier", "février", "mars", "avril", "mai", "juin",
424
+ "juillet", "août", "septembre", "octobre", "novembre", "décembre",
425
+ "printemps", "été", "automne", "hiver",
426
+ // Numbers
427
+ "zéro", "deux", "trois", "quatre", "cinq", "six", "sept",
428
+ "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze",
429
+ "quinze", "seize", "vingt", "trente", "quarante", "cinquante",
430
+ "soixante", "cent", "mille", "million",
431
+ // Body parts
432
+ "bras", "jambe", "pied", "genou", "épaule", "doigt", "dos",
433
+ "ventre", "poitrine", "cou", "nez", "oreille", "bouche", "dent",
434
+ "lèvre", "joue", "front", "cheveux", "peau", "sang",
435
+ // Nature & weather
436
+ "pluie", "neige", "vent", "nuage", "soleil", "tempête", "tonnerre",
437
+ "éclair", "rivière", "lac", "mer", "plage", "montagne", "forêt",
438
+ "désert", "île", "arbre", "fleur", "herbe", "feuille", "pierre",
439
+ "ciel", "étoile", "lune",
440
+ // Animals
441
+ "chien", "chat", "oiseau", "cheval", "vache", "mouton", "cochon",
442
+ "lapin", "souris", "ours", "loup", "serpent", "grenouille",
443
+ "tortue", "baleine", "requin", "aigle", "papillon", "fourmi",
444
+ // Places
445
+ "aéroport", "hôpital", "restaurant", "bibliothèque", "musée",
446
+ "gare", "marché", "magasin", "pharmacie", "boulangerie", "banque",
447
+ "cuisine", "chambre", "jardin", "terrasse", "escalier", "bureau",
448
+ // Clothing
449
+ "chemise", "pantalon", "robe", "jupe", "veste", "manteau",
450
+ "chaussure", "botte", "chapeau", "écharpe", "ceinture",
451
+ // Abstract
452
+ "liberté", "justice", "paix", "danger", "sécurité", "succès",
453
+ "échec", "rêve", "espoir", "peur", "joie", "tristesse",
454
+ "amour", "haine", "bonheur", "malheur", "courage", "patience",
455
+ "confiance", "respect", "beauté", "vérité", "sagesse",
456
+ // Common adjectives
457
+ "bien", "mal", "grand", "petit", "bon", "mauvais", "beau",
458
+ "jeune", "vieux", "nouveau", "ancien", "premier", "dernier",
459
+ "autre", "même", "aussi", "très", "ici", "donc", "puis",
460
+ "quand", "comme", "long", "haut", "bas", "gros", "seul",
461
+ "fort", "plein", "vrai", "faux", "meilleur", "pire", "libre",
462
+ "important", "différent", "possible", "certain", "clair",
463
+ "beau", "laid", "mince", "épais", "chaud", "froid", "tiède",
464
+ "sec", "humide", "propre", "sale", "vide", "plein", "doux",
465
+ "dur", "mou", "amer", "sucré", "salé", "épicé", "délicieux",
466
+ "merveilleux", "terrible", "fantastique", "incroyable", "drôle",
467
+ "ennuyeux", "passionnant", "tranquille", "nerveux", "fier",
468
+ "jaloux", "généreux", "gentil", "méchant", "intelligent",
469
+ // Colors
470
+ "rouge", "bleu", "vert", "jaune", "noir", "blanc", "gris",
471
+ "marron", "rose", "violet", "orange", "doré", "argenté",
472
+ // Common adverbs
473
+ "toujours", "jamais", "souvent", "parfois", "maintenant",
474
+ "encore", "déjà", "bientôt", "ensemble", "vraiment", "surtout",
475
+ "assez", "trop", "peu", "beaucoup", "autant", "presque",
476
+ "ailleurs", "autrement", "cependant", "pourtant", "néanmoins",
477
+ "davantage", "seulement", "évidemment", "absolument",
478
+ "rapide", "lent", "facile", "difficile",
479
+ "complet", "exact", "probable", "final", "général", "spécial",
480
+ "principal", "simple", "double", "triple", "seul",
481
+ ],
482
+ phrases: [
483
+ "comment allez-vous", "bonjour", "où est", "combien ça coûte",
484
+ "quelle heure", "pouvez-vous", "enchanté", "je suis", "il y a",
485
+ "bonne nuit", "bonsoir", "au revoir", "à bientôt", "s'il vous plaît",
486
+ "merci beaucoup", "de rien", "je ne sais pas", "je pense que",
487
+ "bien sûr", "pas de problème", "comment ça va", "ça va bien",
488
+ "qu'est-ce que", "est-ce que", "il faut", "en fait", "par exemple",
489
+ "tout à fait", "c'est-à-dire", "en train de", "à cause de",
490
+ "grâce à", "au lieu de", "de temps en temps", "peu à peu",
491
+ "de plus en plus", "tout de suite", "en même temps",
492
+ "peut-être", "n'est-ce pas", "quand même", "je voudrais",
493
+ ],
494
+ },
495
+ de: {
496
+ words: [
497
+ // Articles, prepositions, conjunctions
498
+ "der", "die", "das", "und", "in", "den", "von", "zu", "mit",
499
+ "sich", "des", "auf", "für", "ist", "im", "dem", "nicht", "ein",
500
+ "eine", "als", "auch", "es", "an", "werden", "aus", "er", "hat",
501
+ "dass", "sie", "nach", "bei", "um", "am", "noch", "wie", "über",
502
+ "so", "nur", "oder", "aber", "vor", "bis", "durch", "gegen",
503
+ "ohne", "seit", "während", "wegen", "trotz", "ich", "wir",
504
+ "unter", "zwischen", "neben", "hinter", "außer", "statt",
505
+ // Pronouns
506
+ "mein", "dein", "sein", "ihr", "unser", "euer", "dieser", "jener",
507
+ "welcher", "jeder", "alle", "manche", "einige", "kein", "niemand",
508
+ "jemand", "etwas", "nichts", "man", "selbst", "mir", "dir", "ihm",
509
+ // Common verbs
510
+ "haben", "sein", "werden", "können", "müssen", "sollen", "wollen",
511
+ "dürfen", "mögen", "machen", "gehen", "kommen", "sehen", "geben",
512
+ "nehmen", "finden", "denken", "sagen", "sprechen", "stehen",
513
+ "lassen", "halten", "bringen", "leben", "fahren", "meinen",
514
+ "fragen", "kennen", "gelten", "stellen", "spielen", "arbeiten",
515
+ "brauchen", "folgen", "lernen", "bestehen", "verstehen", "setzen",
516
+ "bekommen", "beginnen", "erzählen", "versuchen", "schreiben",
517
+ "laufen", "erklären", "entsprechen", "sitzen", "ziehen", "scheinen",
518
+ "fallen", "gehören", "entstehen", "erhalten", "treffen", "suchen",
519
+ "legen", "vorstellen", "handeln", "erreichen", "tragen", "schaffen",
520
+ "lesen", "verlieren", "darstellen", "erkennen", "entwickeln",
521
+ "essen", "trinken", "schlafen", "schwimmen", "tanzen", "singen",
522
+ "kochen", "putzen", "kaufen", "verkaufen", "bezahlen", "gewinnen",
523
+ "studieren", "unterrichten", "öffnen", "schließen",
524
+ "steigen", "fallen", "werfen", "fangen", "brechen", "bauen",
525
+ "zeichnen", "malen", "reisen", "wandern", "schreien", "weinen",
526
+ "lachen", "lächeln", "träumen", "aufwachen", "anziehen",
527
+ "wählen", "vergessen", "verbessern", "wachsen", "sterben",
528
+ "leiden", "genießen", "feiern", "versprechen", "lügen",
529
+ "stehlen", "schützen", "zerstören", "kämpfen", "sparen",
530
+ "fliegen", "rennen", "springen", "klettern", "reparieren",
531
+ // Common nouns (lowercased for trie matching)
532
+ "zeit", "jahr", "mensch", "tag", "welt", "haus", "kind", "frau",
533
+ "mann", "teil", "arbeit", "land", "stadt", "frage", "geld",
534
+ "hand", "leben", "seite", "wasser", "kopf", "auge", "wort",
535
+ "buch", "schule", "familie", "freund", "name", "straße", "kirche",
536
+ "nacht", "morgen", "abend", "woche", "monat", "stunde", "minute",
537
+ "mutter", "vater", "bruder", "schwester", "sohn", "tochter",
538
+ "herz", "tür", "körper", "regierung", "geschichte", "gruppe",
539
+ "beispiel", "problem", "grund", "recht", "krieg", "kraft",
540
+ // Family
541
+ "onkel", "tante", "neffe", "nichte", "großvater", "großmutter",
542
+ "ehemann", "ehefrau", "freundin", "nachbar", "nachbarin",
543
+ // Food & drink
544
+ "frühstück", "mittagessen", "abendessen", "brot", "milch", "käse",
545
+ "butter", "ei", "reis", "fleisch", "hähnchen", "fisch", "obst",
546
+ "gemüse", "suppe", "salat", "kuchen", "keks", "bier", "wein",
547
+ "kaffee", "tee", "zucker", "salz", "pfeffer", "kartoffel",
548
+ "zwiebel", "knoblauch", "apfel", "birne", "erdbeere", "traube",
549
+ "brötchen", "wurst", "schinken", "marmelade", "honig",
550
+ // Days, months, seasons
551
+ "montag", "dienstag", "mittwoch", "donnerstag", "freitag",
552
+ "samstag", "sonntag", "januar", "februar", "märz", "april",
553
+ "mai", "juni", "juli", "august", "september", "oktober",
554
+ "november", "dezember", "frühling", "sommer", "herbst", "winter",
555
+ // Numbers
556
+ "null", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben",
557
+ "acht", "neun", "zehn", "elf", "zwölf", "zwanzig", "dreißig",
558
+ "vierzig", "fünfzig", "hundert", "tausend",
559
+ // Body parts
560
+ "arm", "bein", "fuß", "knie", "schulter", "finger", "rücken",
561
+ "bauch", "brust", "hals", "nase", "ohr", "mund", "zahn",
562
+ "lippe", "stirn", "haar", "haut", "knochen", "blut", "gehirn",
563
+ // Nature & weather
564
+ "regen", "schnee", "wind", "wolke", "sonne", "sturm", "donner",
565
+ "blitz", "fluss", "see", "meer", "strand", "berg", "wald",
566
+ "wüste", "insel", "baum", "blume", "gras", "blatt", "stein",
567
+ "himmel", "stern", "mond",
568
+ // Animals
569
+ "hund", "katze", "vogel", "pferd", "kuh", "schaf", "schwein",
570
+ "kaninchen", "maus", "bär", "wolf", "schlange", "frosch",
571
+ "schildkröte", "wal", "adler", "schmetterling", "ameise",
572
+ // Places
573
+ "flughafen", "krankenhaus", "bibliothek", "bahnhof", "markt",
574
+ "laden", "apotheke", "bäckerei", "küche", "schlafzimmer",
575
+ "badezimmer", "garten", "balkon", "treppe", "büro", "fabrik",
576
+ // Clothing
577
+ "hemd", "hose", "kleid", "rock", "jacke", "mantel", "schuh",
578
+ "stiefel", "hut", "schal", "handschuh", "gürtel", "tasche",
579
+ // Abstract
580
+ "freiheit", "gerechtigkeit", "frieden", "gefahr", "sicherheit",
581
+ "erfolg", "traum", "hoffnung", "angst", "freude", "traurigkeit",
582
+ "liebe", "hass", "glück", "unglück", "mut", "geduld",
583
+ "vertrauen", "respekt", "schönheit", "wahrheit", "weisheit",
584
+ // Words with ä, ö, ü, ß (strong discriminators)
585
+ "ärger", "überraschung", "öffentlich", "müdigkeit", "gemütlich",
586
+ "größe", "fähigkeit", "regelmäßig", "fußball", "süßigkeit",
587
+ "glücklich", "hübsch", "nützlich", "gewöhnlich", "natürlich",
588
+ "höflich", "ärztlich", "üblich", "tüchtig", "plötzlich",
589
+ "vergnügen", "prüfung", "übung", "lösung", "erklärung",
590
+ "veränderung", "enttäuschung", "entschädigung", "beförderung",
591
+ "beschäftigung", "verfügung", "verpflichtung", "gründlich",
592
+ // Common adjectives
593
+ "gut", "schlecht", "groß", "klein", "neu", "alt", "lang", "kurz",
594
+ "hoch", "niedrig", "stark", "schwach", "schnell", "langsam",
595
+ "schön", "wichtig", "richtig", "falsch", "frei", "voll", "leer",
596
+ "möglich", "nötig", "sicher", "klar", "einfach", "schwer",
597
+ "verschieden", "besonder", "eigen", "ganz", "halb", "einzig",
598
+ "dunkel", "hell", "warm", "kalt", "heiß", "nass", "trocken",
599
+ "sauber", "schmutzig", "billig", "teuer", "reich", "arm",
600
+ "dick", "dünn", "breit", "eng", "tief", "flach", "glatt",
601
+ "rau", "weich", "hart", "bitter", "süß", "sauer", "scharf",
602
+ "lecker", "wunderbar", "schrecklich", "fantastisch", "lustig",
603
+ "langweilig", "aufregend", "ruhig", "nervös", "stolz",
604
+ "eifersüchtig", "großzügig", "freundlich", "dumm", "klug",
605
+ // Colors
606
+ "rot", "blau", "grün", "gelb", "schwarz", "weiß", "grau",
607
+ "braun", "rosa", "lila", "orange", "golden", "silbern",
608
+ // Common adverbs
609
+ "schon", "immer", "wieder", "sehr", "hier", "da", "dort",
610
+ "jetzt", "heute", "gestern", "morgen", "dann", "vielleicht",
611
+ "genau", "wirklich", "natürlich", "eigentlich", "überhaupt",
612
+ "besonders", "allerdings", "außerdem", "trotzdem", "deshalb",
613
+ "deswegen", "zuerst", "zunächst", "schließlich", "endlich",
614
+ "wahrscheinlich", "tatsächlich", "offenbar", "anscheinend",
615
+ "sofort", "manchmal", "niemals", "oben", "unten", "links",
616
+ "rechts", "draußen", "drinnen", "irgendwo", "überall", "nirgends",
617
+ // Discourse particles (strong German markers)
618
+ "doch", "halt", "eben", "mal", "wohl", "ja", "nein",
619
+ "bitte", "danke", "stimmt", "genau", "ach", "na",
620
+ ],
621
+ phrases: [
622
+ "wie geht es", "guten morgen", "was ist das", "wo ist",
623
+ "wie viel kostet", "wie spät", "woher kommen", "können sie",
624
+ "freut mich", "ich bin", "guten tag", "guten abend", "gute nacht",
625
+ "auf wiedersehen", "bis bald", "tut mir leid", "entschuldigung",
626
+ "bitte schön", "danke schön", "ich weiß nicht", "ich glaube",
627
+ "natürlich", "kein problem", "zum beispiel", "es gibt",
628
+ "ich möchte", "ich hätte gern", "das heißt", "auf jeden fall",
629
+ "im gegenteil", "vor allem", "nach und nach", "so bald wie möglich",
630
+ "meiner meinung nach", "was für ein", "wie bitte",
631
+ "ich verstehe", "es tut mir leid", "um so besser",
632
+ ],
633
+ },
634
+ it: {
635
+ words: [
636
+ // Articles, prepositions, conjunctions
637
+ "il", "lo", "la", "gli", "le", "di", "che", "non", "un", "una",
638
+ "per", "con", "da", "su", "del", "della", "dei", "delle", "dello",
639
+ "degli", "nel", "nella", "nei", "nelle", "nello", "negli",
640
+ "al", "alla", "ai", "alle", "allo", "agli", "tra", "fra",
641
+ "come", "più", "ma", "anche", "ancora",
642
+ // Pronouns
643
+ "io", "tu", "lui", "lei", "noi", "voi", "loro", "questo", "quello",
644
+ "quella", "chi", "cosa", "quando", "dove", "perché", "quanto",
645
+ "quale", "mio", "tuo", "suo", "nostro", "vostro", "ogni",
646
+ "qualcuno", "nessuno", "qualcosa", "niente", "nulla", "ciascuno",
647
+ "stesso", "altro", "tutto", "poco", "molto", "tanto", "troppo",
648
+ // Common verbs
649
+ "essere", "avere", "fare", "dire", "andare", "vedere", "dare",
650
+ "sapere", "potere", "volere", "venire", "dovere", "stare",
651
+ "prendere", "trovare", "parlare", "mettere", "pensare", "credere",
652
+ "portare", "passare", "guardare", "lasciare", "seguire",
653
+ "restare", "chiamare", "sentire", "tenere", "capire", "vivere",
654
+ "aprire", "scrivere", "leggere", "perdere", "conoscere",
655
+ "cominciare", "finire", "mangiare", "bere", "dormire", "correre",
656
+ "tornare", "morire", "uscire", "entrare", "ricordare", "sembrare",
657
+ "cambiare", "lavorare", "giocare", "aiutare", "aspettare",
658
+ // Common nouns
659
+ "uomo", "donna", "bambino", "tempo", "anno", "giorno", "mondo",
660
+ "vita", "volta", "casa", "parte", "mano", "occhio", "testa",
661
+ "acqua", "lavoro", "sera", "notte", "mattina", "settimana",
662
+ "mese", "padre", "madre", "figlio", "figlia", "fratello", "sorella",
663
+ "amico", "nome", "città", "paese", "strada", "porta", "corpo",
664
+ "cuore", "parola", "libro", "storia", "scuola", "famiglia",
665
+ "governo", "esempio", "problema", "ragione", "guerra", "forza",
666
+ "chiesa", "terra", "stato", "diritto", "gruppo",
667
+ // Common adjectives
668
+ "buono", "cattivo", "grande", "piccolo", "nuovo", "vecchio",
669
+ "bello", "brutto", "alto", "basso", "lungo", "corto", "forte",
670
+ "debole", "giovane", "importante", "diverso", "possibile",
671
+ "vero", "falso", "libero", "pieno", "vuoto", "solo", "primo",
672
+ "ultimo", "migliore", "peggiore", "certo", "chiaro", "semplice",
673
+ // Common adverbs
674
+ "bene", "male", "sempre", "mai", "spesso", "già", "poi",
675
+ "così", "ora", "dopo", "prima", "qui", "ancora", "anche",
676
+ "molto", "poco", "troppo", "abbastanza", "subito", "insieme",
677
+ "davvero", "forse", "comunque", "tuttavia", "inoltre", "soprattutto",
678
+ "certamente", "probabilmente", "praticamente", "veramente",
679
+ // Food
680
+ "pasta", "pizza", "risotto", "gelato", "pane", "formaggio", "prosciutto",
681
+ "olio", "aceto", "aglio", "cipolla", "pomodoro", "basilico", "pepe",
682
+ "sale", "zucchero", "burro", "latte", "uovo", "riso", "farina",
683
+ "carne", "pesce", "pollo", "maiale", "manzo", "vitello", "agnello",
684
+ "insalata", "minestra", "zuppa", "frutta", "mela", "arancia", "limone",
685
+ "fragola", "uva", "pesca", "ciliegia", "melone", "banana", "pera",
686
+ "vino", "birra", "caffè", "cappuccino", "espresso", "grappa",
687
+ "focaccia", "bruschetta", "lasagna", "ravioli", "gnocchi", "polenta",
688
+ "tiramisu", "panna", "biscotto", "torta", "cornetto", "brioche",
689
+ // Body
690
+ "braccio", "gamba", "piede", "ginocchio", "spalla", "dito",
691
+ "schiena", "pancia", "petto", "collo", "naso", "orecchio",
692
+ "bocca", "labbro", "faccia", "fronte", "capelli", "pelle",
693
+ "osso", "sangue", "cervello", "muscolo", "stomaco",
694
+ // Family
695
+ "nonno", "nonna", "zio", "zia", "cugino", "cugina", "nipote",
696
+ "suocero", "suocera", "cognato", "cognata", "genero", "nuora",
697
+ "fidanzato", "fidanzata", "marito", "moglie", "sposo", "sposa",
698
+ // Animals
699
+ "cane", "gatto", "cavallo", "mucca", "pecora", "maiale", "coniglio",
700
+ "topo", "orso", "lupo", "serpente", "rana", "tartaruga",
701
+ "balena", "squalo", "aquila", "farfalla", "formica", "ape",
702
+ "leone", "tigre", "elefante", "scimmia", "cervo", "volpe",
703
+ "gallina", "uccello", "pesce", "delfino", "cinghiale",
704
+ // Nature
705
+ "pioggia", "neve", "vento", "nuvola", "sole", "tempesta", "tuono",
706
+ "fulmine", "arcobaleno", "fiume", "lago", "mare", "spiaggia",
707
+ "montagna", "collina", "foresta", "bosco", "deserto", "isola",
708
+ "albero", "fiore", "erba", "foglia", "radice", "seme",
709
+ "pietra", "sabbia", "cielo", "stella", "luna",
710
+ // Colors
711
+ "rosso", "blu", "verde", "giallo", "nero", "bianco", "grigio",
712
+ "marrone", "rosa", "viola", "arancione", "oro", "argento",
713
+ // Places
714
+ "ospedale", "parco", "negozio", "ristorante", "bar", "albergo",
715
+ "stazione", "aeroporto", "biblioteca", "museo", "teatro", "cinema",
716
+ "farmacia", "banca", "ufficio", "fabbrica", "mercato", "piazza",
717
+ "cucina", "camera", "bagno", "giardino", "balcone", "terrazzo",
718
+ // Numbers
719
+ "zero", "uno", "due", "tre", "quattro", "cinque", "sei",
720
+ "sette", "otto", "nove", "dieci", "cento", "mille", "milione",
721
+ // Days/Time
722
+ "lunedì", "martedì", "mercoledì", "giovedì", "venerdì",
723
+ "sabato", "domenica", "gennaio", "febbraio", "marzo", "aprile",
724
+ "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre",
725
+ "novembre", "dicembre", "primavera", "estate", "autunno", "inverno",
726
+ "ieri", "oggi", "domani", "adesso", "presto", "tardi",
727
+ // Clothing
728
+ "camicia", "pantaloni", "gonna", "giacca", "scarpe", "cappello",
729
+ "sciarpa", "guanti", "cintura", "calze", "vestito", "maglietta",
730
+ "maglione", "cappotto", "stivali", "sandali", "borsa", "ombrello",
731
+ // Emotions
732
+ "felice", "triste", "arrabbiato", "spaventato", "stanco", "annoiato",
733
+ "nervoso", "confuso", "sorpreso", "orgoglioso", "geloso", "ansioso",
734
+ "preoccupato", "emozionato", "calmo", "contento", "deluso",
735
+ // Transport
736
+ "macchina", "treno", "autobus", "bicicletta", "aereo", "nave",
737
+ "moto", "taxi", "metro", "tram", "traghetto", "camion",
738
+ // Abstract
739
+ "libertà", "giustizia", "pace", "pericolo", "sicurezza",
740
+ "successo", "fallimento", "sogno", "speranza", "paura",
741
+ "felicità", "tristezza", "amore", "odio", "coraggio", "pazienza",
742
+ "fiducia", "rispetto", "bellezza", "verità", "saggezza",
743
+ // Common verbs (extended)
744
+ "pagare", "comprare", "vendere", "cucinare", "pulire", "lavare",
745
+ "guidare", "viaggiare", "nuotare", "cantare", "ballare", "disegnare",
746
+ "insegnare", "imparare", "decidere", "scegliere", "provare",
747
+ "rompere", "riparare", "costruire", "distruggere", "promettere",
748
+ "soffrire", "ridere", "piangere", "gridare", "sussurrare",
749
+ "dormire", "svegliarsi", "vestirsi", "pregare", "sognare",
750
+ "raccogliere", "lanciare", "cadere", "salire", "scendere",
751
+ // Common nouns (extended)
752
+ "cielo", "fuoco", "luce", "ombra", "voce", "silenzio", "rumore",
753
+ "musica", "canzone", "film", "gioco", "sport", "calcio", "squadra",
754
+ "idea", "sogno", "segreto", "regalo", "lettera", "messaggio",
755
+ "telefono", "tavolo", "sedia", "letto", "finestra", "specchio",
756
+ "chiave", "orologio", "bottiglia", "bicchiere", "piatto", "coltello",
757
+ "forchetta", "cucchiaio", "tazza", "pentola", "padella",
758
+ // Slang & informal
759
+ "boh", "mamma", "ciao", "ragazzi", "amici", "figurati",
760
+ "magari", "basta", "bravo", "prego", "ecco", "allora",
761
+ "dunque", "insomma", "appunto", "uffa", "accidenti",
762
+ // Common profanity
763
+ "cazzo", "stronzo", "minchia", "merda", "vaffanculo", "porca",
764
+ "madonna", "troia", "puttana", "bastardo", "coglione", "figa",
765
+ ],
766
+ phrases: [
767
+ "come stai", "buongiorno", "quanto costa", "che ora",
768
+ "da dove vieni", "puoi aiutarmi", "piacere", "mi chiamo",
769
+ "buona sera", "buona notte", "arrivederci", "a presto",
770
+ "mi dispiace", "scusa", "per favore", "grazie mille",
771
+ "di niente", "non lo so", "penso che", "certo che sì",
772
+ "nessun problema", "per esempio", "in realtà", "a volte",
773
+ "poco a poco", "prima o poi", "in ogni caso", "tutto sommato",
774
+ "d'altra parte", "allo stesso tempo", "come si dice",
775
+ "vorrei sapere", "che cosa", "non importa",
776
+ ],
777
+ },
778
+ pt: {
779
+ words: [
780
+ // Articles, prepositions, conjunctions
781
+ "os", "as", "de", "que", "em", "um", "uma", "para", "com",
782
+ "por", "como", "mais", "ou", "mas", "seu", "sua", "seus", "suas",
783
+ "no", "na", "nos", "nas", "do", "da", "dos", "das", "ao", "aos",
784
+ "pelo", "pela", "pelos", "pelas", "entre", "sobre", "até", "sem",
785
+ "desde", "contra", "durante", "mediante", "perante", "segundo",
786
+ // Pronouns
787
+ "eu", "tu", "ele", "ela", "nós", "vós", "eles", "elas", "você",
788
+ "vocês", "meu", "minha", "meus", "minhas", "teu", "tua", "nosso",
789
+ "nossa", "deles", "delas", "este", "esta", "esse", "essa", "aquele",
790
+ "aquela", "isto", "aquilo", "quem", "qual", "cujo", "cuja",
791
+ "alguém", "ninguém", "algo", "nada", "cada", "todo", "tudo",
792
+ // Common verbs
793
+ "ser", "estar", "ter", "haver", "fazer", "poder", "dizer", "dar",
794
+ "ir", "ver", "saber", "querer", "ficar", "dever", "pôr", "parecer",
795
+ "passar", "deixar", "chegar", "levar", "encontrar", "chamar",
796
+ "vir", "pensar", "sair", "voltar", "tomar", "conhecer", "viver",
797
+ "sentir", "olhar", "contar", "começar", "esperar", "buscar",
798
+ "trabalhar", "escrever", "perder", "entender", "pedir", "receber",
799
+ "lembrar", "acabar", "conseguir", "servir", "precisar", "manter",
800
+ "abrir", "ler", "comer", "beber", "dormir", "correr", "morrer",
801
+ "andar", "ouvir", "falar", "gostar", "ajudar", "mudar", "jogar",
802
+ // Common nouns
803
+ "vida", "tempo", "mundo", "casa", "trabalho", "homem", "mulher",
804
+ "dia", "noite", "manhã", "tarde", "semana", "mês", "ano",
805
+ "cidade", "país", "rua", "lugar", "parte", "governo", "escola",
806
+ "grupo", "problema", "momento", "pessoa", "forma", "exemplo",
807
+ "história", "coisa", "maneira", "direito", "estado", "guerra",
808
+ "razão", "verdade", "força", "terra", "filho", "filha",
809
+ "pai", "mãe", "irmão", "irmã", "amigo", "nome", "porta",
810
+ "corpo", "cabeça", "mão", "olho", "coração", "água", "livro",
811
+ "palavra", "caminho", "igreja", "família", "dinheiro",
812
+ // Common adjectives
813
+ "bom", "mau", "grande", "pequeno", "novo", "velho", "melhor",
814
+ "pior", "primeiro", "último", "mesmo", "longo", "jovem", "alto",
815
+ "baixo", "bonito", "importante", "diferente", "possível", "certo",
816
+ "claro", "forte", "livre", "cheio", "vazio", "próprio",
817
+ // Common adverbs
818
+ "muito", "também", "ainda", "agora", "depois", "antes",
819
+ "onde", "quando", "como", "porque", "então", "sempre", "nunca",
820
+ "bem", "mal", "aqui", "ali", "já", "quase", "talvez",
821
+ "realmente", "certamente", "provavelmente", "principalmente",
822
+ "normalmente", "geralmente", "especialmente", "simplesmente",
823
+ // Food
824
+ "arroz", "feijão", "pão", "queijo", "carne", "frango", "peixe",
825
+ "leite", "ovo", "sal", "açúcar", "manteiga", "azeite", "vinagre",
826
+ "alho", "cebola", "tomate", "batata", "cenoura", "alface",
827
+ "maçã", "laranja", "limão", "morango", "uva", "banana", "manga",
828
+ "café", "chá", "cerveja", "vinho", "suco", "sorvete", "bolo",
829
+ "pastel", "coxinha", "farofa", "feijoada", "churrasco", "brigadeiro",
830
+ "tapioca", "açaí", "paçoca", "pudim", "caipirinha", "guaraná",
831
+ // Body
832
+ "braço", "perna", "joelho", "ombro", "dedo", "costas",
833
+ "barriga", "peito", "pescoço", "nariz", "orelha", "boca",
834
+ "lábio", "rosto", "testa", "cabelo", "pele", "osso",
835
+ "sangue", "cérebro", "músculo", "estômago", "pulmão",
836
+ // Family
837
+ "avô", "avó", "tio", "tia", "primo", "prima", "sobrinho",
838
+ "sogro", "sogra", "cunhado", "cunhada", "genro", "nora",
839
+ "noivo", "noiva", "marido", "esposa", "namorado", "namorada",
840
+ // Animals
841
+ "cachorro", "gato", "cavalo", "vaca", "ovelha", "porco", "coelho",
842
+ "rato", "urso", "lobo", "cobra", "sapo", "tartaruga",
843
+ "baleia", "tubarão", "águia", "borboleta", "formiga", "abelha",
844
+ "leão", "tigre", "elefante", "macaco", "veado", "raposa",
845
+ "galinha", "pássaro", "golfinho", "jacaré", "papagaio",
846
+ // Nature
847
+ "chuva", "neve", "vento", "nuvem", "sol", "tempestade", "trovão",
848
+ "relâmpago", "arco-íris", "rio", "lago", "praia", "montanha",
849
+ "colina", "floresta", "selva", "deserto", "ilha", "vale",
850
+ "árvore", "flor", "grama", "folha", "raiz", "semente",
851
+ "pedra", "areia", "céu", "estrela", "lua", "mar",
852
+ // Colors
853
+ "vermelho", "azul", "verde", "amarelo", "preto", "branco", "cinza",
854
+ "marrom", "rosa", "roxo", "laranja", "dourado", "prateado",
855
+ // Places
856
+ "hospital", "parque", "loja", "restaurante", "hotel", "estação",
857
+ "aeroporto", "biblioteca", "museu", "teatro", "cinema", "farmácia",
858
+ "banco", "escritório", "fábrica", "mercado", "praça", "prédio",
859
+ "cozinha", "quarto", "banheiro", "jardim", "varanda", "garagem",
860
+ // Numbers
861
+ "zero", "dois", "três", "quatro", "cinco", "seis", "sete",
862
+ "oito", "nove", "dez", "cem", "mil", "milhão",
863
+ // Days/Time
864
+ "segunda", "terça", "quarta", "quinta", "sexta", "sábado",
865
+ "domingo", "janeiro", "fevereiro", "março", "abril", "maio",
866
+ "junho", "julho", "agosto", "setembro", "outubro", "novembro",
867
+ "dezembro", "primavera", "verão", "outono", "inverno",
868
+ "ontem", "hoje", "amanhã", "cedo", "tarde",
869
+ // Clothing
870
+ "camisa", "calça", "saia", "jaqueta", "sapato", "chapéu",
871
+ "cachecol", "luva", "cinto", "meia", "vestido", "camiseta",
872
+ "casaco", "bota", "sandália", "bolsa", "guarda-chuva",
873
+ // Emotions
874
+ "feliz", "triste", "bravo", "assustado", "cansado", "entediado",
875
+ "nervoso", "confuso", "surpreso", "orgulhoso", "ansioso",
876
+ "preocupado", "animado", "calmo", "contente", "decepcionado",
877
+ // Transport
878
+ "carro", "trem", "ônibus", "bicicleta", "avião", "navio",
879
+ "moto", "táxi", "metrô", "caminhão", "barco", "helicóptero",
880
+ // Abstract
881
+ "liberdade", "justiça", "paz", "perigo", "segurança",
882
+ "sucesso", "fracasso", "sonho", "esperança", "medo",
883
+ "felicidade", "tristeza", "amor", "ódio", "coragem", "paciência",
884
+ "confiança", "respeito", "beleza", "sabedoria",
885
+ // Common verbs (extended)
886
+ "pagar", "comprar", "vender", "cozinhar", "limpar", "lavar",
887
+ "dirigir", "viajar", "nadar", "cantar", "dançar", "desenhar",
888
+ "ensinar", "aprender", "decidir", "escolher", "tentar",
889
+ "quebrar", "consertar", "construir", "destruir", "prometer",
890
+ "sofrer", "rir", "chorar", "gritar", "sussurrar",
891
+ "acordar", "vestir", "rezar", "sonhar", "subir", "descer",
892
+ // Common nouns (extended)
893
+ "fogo", "luz", "sombra", "voz", "silêncio", "barulho",
894
+ "música", "filme", "jogo", "futebol", "time", "ideia",
895
+ "segredo", "presente", "carta", "mensagem", "telefone",
896
+ "mesa", "cadeira", "cama", "janela", "espelho", "chave",
897
+ "relógio", "garrafa", "copo", "prato", "faca", "garfo",
898
+ "colher", "xícara", "panela", "frigideira",
899
+ // Slang & informal
900
+ "cara", "gente", "beleza", "valeu", "massa",
901
+ "bacana", "maneiro", "pô", "mano", "mina", "tá", "né",
902
+ "opa", "eita", "nossa", "caramba", "puxa", "olha",
903
+ // Common profanity
904
+ "porra", "caralho", "merda", "foda", "buceta", "puta",
905
+ "viado", "cuzão", "piranha", "desgraça", "filho da puta",
906
+ ],
907
+ phrases: [
908
+ "como você está", "obrigado", "bom dia", "o que é isso",
909
+ "onde está", "quanto custa", "que horas são", "de onde você é",
910
+ "pode me ajudar", "prazer", "boa tarde", "boa noite",
911
+ "até logo", "até mais", "com licença", "desculpa",
912
+ "por favor", "muito obrigado", "de nada", "eu não sei",
913
+ "eu acho que", "claro que sim", "sem problema", "por exemplo",
914
+ "na verdade", "às vezes", "pouco a pouco", "de vez em quando",
915
+ "ao mesmo tempo", "em todo caso", "cada vez mais",
916
+ "mais ou menos", "pelo menos", "além disso", "no entanto",
917
+ "apesar de", "por causa de", "em relação a", "tudo bem",
918
+ ],
919
+ },
920
+ nl: {
921
+ words: [
922
+ // Articles, prepositions, conjunctions
923
+ "de", "het", "en", "van", "dat", "die", "een", "voor", "met",
924
+ "zijn", "op", "aan", "bij", "ook", "als", "er", "maar", "om",
925
+ "ze", "zich", "deze", "dit", "uit", "tot", "naar", "door",
926
+ "over", "onder", "tussen", "achter", "naast", "tegen", "langs",
927
+ "zonder", "tijdens", "sinds", "ondanks", "behalve", "wegens",
928
+ // Pronouns
929
+ "ik", "jij", "hij", "zij", "wij", "jullie", "hen", "hun",
930
+ "wie", "wat", "waar", "wanneer", "waarom", "hoe", "welk",
931
+ "mijn", "jouw", "haar", "ons", "iedereen", "niemand", "iets",
932
+ "niets", "alles", "zelf", "elkaar", "elke", "sommige", "beide",
933
+ // Common verbs
934
+ "hebben", "zijn", "worden", "kunnen", "moeten", "zullen",
935
+ "willen", "mogen", "maken", "gaan", "komen", "zien", "geven",
936
+ "nemen", "vinden", "denken", "zeggen", "spreken", "staan",
937
+ "laten", "houden", "brengen", "leven", "rijden", "menen",
938
+ "vragen", "kennen", "gelden", "stellen", "spelen", "werken",
939
+ "nodig", "volgen", "leren", "bestaan", "begrijpen", "zetten",
940
+ "krijgen", "beginnen", "vertellen", "proberen", "schrijven",
941
+ "lopen", "zitten", "trekken", "schijnen", "vallen", "behoren",
942
+ "zoeken", "leggen", "bereiken", "dragen", "lezen", "verliezen",
943
+ // Common nouns
944
+ "tijd", "jaar", "mens", "dag", "wereld", "huis", "kind", "vrouw",
945
+ "deel", "werk", "land", "stad", "vraag", "hand",
946
+ "leven", "kant", "water", "hoofd", "oog", "woord", "boek",
947
+ "school", "familie", "vriend", "naam", "straat", "kerk",
948
+ "nacht", "ochtend", "avond", "week", "maand", "uur", "minuut",
949
+ "moeder", "vader", "broer", "zus", "zoon", "dochter",
950
+ "hart", "deur", "lichaam", "regering", "geschiedenis", "groep",
951
+ "voorbeeld", "probleem", "reden", "recht", "oorlog", "kracht",
952
+ // Common adjectives
953
+ "goed", "slecht", "groot", "klein", "nieuw", "oud", "lang",
954
+ "kort", "hoog", "laag", "sterk", "zwak", "snel", "langzaam",
955
+ "mooi", "lelijk", "jong", "belangrijk", "juist", "vrij", "vol",
956
+ "leeg", "mogelijk", "zeker", "duidelijk", "eenvoudig", "moeilijk",
957
+ "verscheiden", "bijzonder", "eigen", "heel", "veel", "weinig",
958
+ // Common adverbs
959
+ "niet", "wel", "nog", "dan", "al", "toch", "altijd", "nooit",
960
+ "vaak", "soms", "nu", "hier", "daar", "misschien", "precies",
961
+ "echt", "natuurlijk", "eigenlijk", "helemaal", "vooral",
962
+ "overigens", "trouwens", "desondanks", "daarom", "daarnaast",
963
+ "bovendien", "tenslotte", "uiteindelijk", "waarschijnlijk",
964
+ // Food
965
+ "brood", "kaas", "boter", "melk", "vlees", "kip", "vis",
966
+ "ei", "rijst", "aardappel", "wortel", "tomaat", "ui", "knoflook",
967
+ "zout", "suiker", "peper", "olie", "azijn", "sla", "soep",
968
+ "appel", "peer", "aardbei", "druif", "citroen", "sinaasappel",
969
+ "banaan", "kers", "pruim", "bier", "wijn", "koffie", "thee",
970
+ "sap", "taart", "koek", "ijs", "chocolade", "pannenkoek",
971
+ "stamppot", "hutspot", "kroket", "frikandel", "stroopwafel",
972
+ "hagelslag", "drop", "haring", "poffertjes", "bitterballen",
973
+ // Body
974
+ "arm", "been", "voet", "knie", "schouder", "vinger",
975
+ "rug", "buik", "borst", "nek", "neus", "oor",
976
+ "mond", "lip", "gezicht", "voorhoofd", "haar", "huid",
977
+ "bot", "bloed", "hersenen", "spier", "maag", "long",
978
+ // Family
979
+ "opa", "oma", "oom", "tante", "neef", "nicht", "kleinzoon",
980
+ "schoonvader", "schoonmoeder", "zwager", "schoonzus",
981
+ "verloofde", "echtgenoot", "echtgenote", "vriend", "vriendin",
982
+ // Animals
983
+ "hond", "kat", "paard", "koe", "schaap", "varken", "konijn",
984
+ "muis", "beer", "wolf", "slang", "kikker", "schildpad",
985
+ "walvis", "haai", "adelaar", "vlinder", "mier", "bij",
986
+ "leeuw", "tijger", "olifant", "aap", "hert", "vos",
987
+ "kip", "vogel", "dolfijn", "eend", "zwaan", "uil",
988
+ // Nature
989
+ "regen", "sneeuw", "wind", "wolk", "zon", "storm", "donder",
990
+ "bliksem", "regenboog", "rivier", "meer", "zee", "strand",
991
+ "berg", "heuvel", "bos", "woestijn", "eiland", "dal",
992
+ "boom", "bloem", "gras", "blad", "wortel", "zaad",
993
+ "steen", "zand", "hemel", "ster", "maan", "vuur",
994
+ // Colors
995
+ "rood", "blauw", "groen", "geel", "zwart", "wit", "grijs",
996
+ "bruin", "roze", "paars", "oranje", "goud", "zilver",
997
+ // Places
998
+ "ziekenhuis", "winkel", "restaurant", "hotel", "station",
999
+ "luchthaven", "bibliotheek", "museum", "theater", "bioscoop",
1000
+ "apotheek", "kantoor", "fabriek", "markt", "plein",
1001
+ "keuken", "slaapkamer", "badkamer", "tuin", "balkon", "garage",
1002
+ // Numbers
1003
+ "nul", "twee", "drie", "vier", "vijf", "zes", "zeven",
1004
+ "acht", "negen", "tien", "honderd", "duizend", "miljoen",
1005
+ // Days/Time
1006
+ "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag",
1007
+ "zaterdag", "zondag", "januari", "februari", "maart", "april",
1008
+ "mei", "juni", "juli", "augustus", "september", "oktober",
1009
+ "november", "december", "lente", "zomer", "herfst", "winter",
1010
+ "gisteren", "vandaag", "morgen", "vroeg", "laat",
1011
+ // Clothing
1012
+ "hemd", "broek", "rok", "jas", "schoen", "hoed",
1013
+ "sjaal", "handschoen", "riem", "sok", "jurk", "trui",
1014
+ "laars", "sandaal", "tas", "paraplu",
1015
+ // Emotions
1016
+ "blij", "verdrietig", "boos", "bang", "moe", "verveeld",
1017
+ "zenuwachtig", "verward", "verrast", "trots", "jaloers",
1018
+ "bezorgd", "opgewonden", "rustig", "tevreden", "teleurgesteld",
1019
+ // Transport
1020
+ "auto", "trein", "bus", "fiets", "vliegtuig", "schip",
1021
+ "motor", "vrachtwagen", "tram", "veerboot", "boot",
1022
+ // Abstract
1023
+ "vrijheid", "gerechtigheid", "vrede", "gevaar", "veiligheid",
1024
+ "succes", "mislukking", "droom", "hoop", "angst",
1025
+ "geluk", "verdriet", "liefde", "haat", "moed", "geduld",
1026
+ "vertrouwen", "respect", "schoonheid", "waarheid", "wijsheid",
1027
+ // Common verbs (extended)
1028
+ "betalen", "kopen", "verkopen", "koken", "schoonmaken", "wassen",
1029
+ "rijden", "reizen", "zwemmen", "zingen", "dansen", "tekenen",
1030
+ "beslissen", "kiezen", "breken", "repareren", "bouwen",
1031
+ "beloven", "lijden", "lachen", "huilen", "schreeuwen", "fluisteren",
1032
+ "dromen", "bidden", "klimmen", "springen", "gooien", "vangen",
1033
+ // Common nouns (extended)
1034
+ "licht", "schaduw", "stem", "stilte", "geluid", "muziek",
1035
+ "lied", "spel", "voetbal", "idee", "geheim", "cadeau",
1036
+ "brief", "bericht", "tafel", "stoel", "bed", "raam",
1037
+ "spiegel", "sleutel", "klok", "fles", "glas", "bord",
1038
+ "mes", "vork", "lepel", "kopje", "pan",
1039
+ // Slang & informal
1040
+ "lekker", "gezellig", "gaaf", "tof", "hartstikke", "vet",
1041
+ "geinig", "gek", "leuk", "joh", "hè", "zeg", "hoor",
1042
+ "nou", "goh", "oké", "doei", "mazzel", "eikel",
1043
+ // Common profanity
1044
+ "godverdomme", "kut", "lul", "klootzak", "hoer", "teef",
1045
+ "tering", "kanker", "tyfus", "mierenneuker", "kutwijf",
1046
+ ],
1047
+ phrases: [
1048
+ "hoe gaat het", "dank je", "goedemorgen", "wat is dit",
1049
+ "waar is het", "hoeveel kost", "hoe laat", "waar kom je vandaan",
1050
+ "kun je me helpen", "aangenaam", "goedemiddag", "goedenavond",
1051
+ "goede nacht", "tot ziens", "tot straks", "het spijt me",
1052
+ "alstublieft", "dank u wel", "geen probleem", "ik weet het niet",
1053
+ "ik denk dat", "natuurlijk", "bijvoorbeeld", "in feite",
1054
+ "af en toe", "in ieder geval", "over het algemeen",
1055
+ "op dit moment", "aan de andere kant", "zo snel mogelijk",
1056
+ ],
1057
+ },
1058
+ tr: {
1059
+ words: [
1060
+ // Conjunctions, postpositions, particles
1061
+ "ve", "bir", "bu", "ile", "için", "olan", "ama", "daha", "gibi",
1062
+ "çok", "da", "de", "mi", "mı", "mu", "mü", "ki", "hem",
1063
+ "ya", "eğer", "ancak", "fakat", "lakin", "hatta", "üstelik",
1064
+ "ayrıca", "oysa", "yoksa", "zira", "çünkü", "dolayısıyla",
1065
+ // Pronouns
1066
+ "ben", "sen", "biz", "siz", "onlar", "ne", "nasıl",
1067
+ "nerede", "neden", "kim", "hangi", "kaç", "kimin", "kime",
1068
+ "benim", "senin", "onun", "bizim", "sizin", "onların",
1069
+ "bana", "sana", "ona", "bize", "size", "bunlar", "şunlar",
1070
+ "kendim", "kendin", "kendisi", "herkes", "hiçbir", "bazı",
1071
+ // Common verbs
1072
+ "olmak", "etmek", "yapmak", "gelmek", "gitmek", "vermek",
1073
+ "almak", "görmek", "bilmek", "istemek", "söylemek", "demek",
1074
+ "bakmak", "bulmak", "düşünmek", "kalmak", "geçmek", "başlamak",
1075
+ "çalışmak", "konuşmak", "tutmak", "yaşamak", "açmak", "okumak",
1076
+ "yazmak", "anlamak", "beklemek", "durmak", "oturmak", "kalkmak",
1077
+ "koymak", "taşımak", "sevmek", "hatırlamak", "unutmak",
1078
+ "yardım", "değişmek", "öğrenmek", "öğretmek", "kullanmak",
1079
+ // Common nouns
1080
+ "var", "yok", "değil", "zaman", "gün", "yıl", "ay", "hafta",
1081
+ "saat", "dakika", "adam", "kadın", "çocuk", "insan", "dünya",
1082
+ "hayat", "iş", "ev", "yer", "yol", "şehir", "ülke", "devlet",
1083
+ "okul", "aile", "arkadaş", "isim", "kapı", "göz", "baş",
1084
+ "el", "kalp", "vücut", "su", "para", "kitap", "söz",
1085
+ "tarih", "savaş", "güç", "hak", "grup", "örnek", "sorun",
1086
+ "gece", "sabah", "akşam", "anne", "baba", "kardeş", "oğul", "kız",
1087
+ // Common adjectives
1088
+ "iyi", "kötü", "büyük", "küçük", "yeni", "eski", "uzun",
1089
+ "kısa", "yüksek", "alçak", "güçlü", "zayıf", "hızlı", "yavaş",
1090
+ "güzel", "çirkin", "genç", "yaşlı", "önemli", "doğru", "yanlış",
1091
+ "özgür", "dolu", "boş", "basit", "zor", "kolay", "farklı",
1092
+ // Common adverbs
1093
+ "olarak", "sonra", "önce", "şimdi", "artık", "bile", "sadece",
1094
+ "evet", "hayır", "belki", "lütfen", "tamam", "başka", "her",
1095
+ "hiç", "hep", "bazen", "genellikle", "gerçekten", "kesinlikle",
1096
+ "tabii", "aslında", "özellikle", "muhtemelen", "neredeyse",
1097
+ // Food
1098
+ "ekmek", "peynir", "tereyağı", "süt", "yumurta", "pirinç",
1099
+ "makarna", "çorba", "salata", "domates", "biber", "soğan",
1100
+ "sarımsak", "tuz", "şeker", "bal", "zeytinyağı", "sirke",
1101
+ "elma", "portakal", "limon", "çilek", "üzüm", "karpuz", "muz",
1102
+ "kiraz", "armut", "erik", "kayısı", "şeftali", "incir", "nar",
1103
+ "kebap", "döner", "lahmacun", "pide", "börek", "dolma", "pilav",
1104
+ "köfte", "baklava", "lokum", "simit", "ayran", "rakı", "çay",
1105
+ "kahve", "tavuk", "kuzu", "balık", "dana",
1106
+ // Body
1107
+ "kol", "bacak", "ayak", "diz", "omuz", "parmak",
1108
+ "sırt", "karın", "göğüs", "boyun", "burun", "kulak",
1109
+ "ağız", "dudak", "yüz", "alın", "saç", "deri",
1110
+ "kemik", "kan", "beyin", "kas", "mide", "akciğer",
1111
+ // Family
1112
+ "dede", "nine", "amca", "hala", "dayı", "teyze", "kuzen",
1113
+ "kayınpeder", "kaynana", "enişte", "yenge", "damat", "gelin",
1114
+ "nişanlı", "koca", "karı", "eş", "çift", "torun",
1115
+ // Animals
1116
+ "köpek", "kedi", "at", "inek", "koyun", "keçi", "tavşan",
1117
+ "fare", "ayı", "kurt", "yılan", "kurbağa", "kaplumbağa",
1118
+ "balina", "köpekbalığı", "kartal", "kelebek", "karınca", "arı",
1119
+ "aslan", "kaplan", "fil", "maymun", "geyik", "tilki",
1120
+ "tavuk", "kuş", "yunus", "eşek", "deve", "domuz",
1121
+ // Nature
1122
+ "yağmur", "kar", "rüzgar", "bulut", "güneş", "fırtına", "gök",
1123
+ "yıldırım", "gökkuşağı", "nehir", "göl", "deniz", "kumsal",
1124
+ "dağ", "tepe", "orman", "çöl", "ada", "vadi",
1125
+ "ağaç", "çiçek", "çimen", "yaprak", "kök", "tohum",
1126
+ "taş", "kum", "toprak", "yıldız", "ay",
1127
+ // Colors
1128
+ "kırmızı", "mavi", "yeşil", "sarı", "siyah", "beyaz", "gri",
1129
+ "kahverengi", "pembe", "mor", "turuncu", "altın", "gümüş",
1130
+ // Places
1131
+ "hastane", "bahçe", "dükkan", "restoran", "otel", "istasyon",
1132
+ "havaalanı", "kütüphane", "müze", "tiyatro", "sinema", "eczane",
1133
+ "banka", "ofis", "fabrika", "pazar", "meydan", "cami", "kilise",
1134
+ "mutfak", "yatak", "banyo", "salon", "balkon", "garaj",
1135
+ // Numbers
1136
+ "sıfır", "iki", "üç", "dört", "beş", "altı", "yedi",
1137
+ "sekiz", "dokuz", "on", "yüz", "bin", "milyon",
1138
+ // Days/Time
1139
+ "pazartesi", "salı", "çarşamba", "perşembe", "cuma",
1140
+ "cumartesi", "pazar", "ocak", "şubat", "mart", "nisan",
1141
+ "mayıs", "haziran", "temmuz", "ağustos", "eylül", "ekim",
1142
+ "kasım", "aralık", "ilkbahar", "yaz", "sonbahar", "kış",
1143
+ "dün", "bugün", "yarın", "erken", "geç",
1144
+ // Clothing
1145
+ "gömlek", "pantolon", "etek", "ceket", "ayakkabı", "şapka",
1146
+ "atkı", "eldiven", "kemer", "çorap", "elbise", "kazak",
1147
+ "mont", "çizme", "çanta", "şemsiye",
1148
+ // Emotions
1149
+ "mutlu", "üzgün", "kızgın", "korkmuş", "yorgun", "sıkılmış",
1150
+ "gergin", "şaşkın", "gururlu", "kıskanç", "endişeli",
1151
+ "heyecanlı", "sakin", "memnun", "hayal", "kırık",
1152
+ // Transport
1153
+ "araba", "tren", "otobüs", "bisiklet", "uçak", "gemi",
1154
+ "motosiklet", "taksi", "tramvay", "kamyon", "tekne",
1155
+ // Abstract
1156
+ "özgürlük", "adalet", "barış", "tehlike", "güvenlik",
1157
+ "başarı", "başarısızlık", "rüya", "umut", "korku",
1158
+ "mutluluk", "üzüntü", "sevgi", "nefret", "cesaret", "sabır",
1159
+ "güven", "saygı", "güzellik", "gerçek", "bilgelik",
1160
+ // Common verbs (extended)
1161
+ "ödemek", "satın", "satmak", "pişirmek", "temizlemek", "yıkamak",
1162
+ "sürmek", "yüzmek", "şarkı", "dans", "çizmek", "resim",
1163
+ "karar", "seçmek", "kırmak", "tamir", "inşa", "yıkmak",
1164
+ "söz", "acı", "gülmek", "ağlamak", "bağırmak", "fısıldamak",
1165
+ "uyanmak", "giymek", "dua", "tırmanmak", "atlamak", "fırlatmak",
1166
+ // Common nouns (extended)
1167
+ "ateş", "ışık", "gölge", "ses", "sessizlik", "gürültü",
1168
+ "müzik", "şarkı", "oyun", "futbol", "takım", "fikir",
1169
+ "sır", "hediye", "mektup", "mesaj", "telefon",
1170
+ "masa", "sandalye", "yatak", "pencere", "ayna", "anahtar",
1171
+ "saat", "şişe", "bardak", "tabak", "bıçak", "çatal",
1172
+ "kaşık", "fincan", "tencere", "tava",
1173
+ // Slang & informal
1174
+ "abi", "abla", "lan", "kanka", "moruk", "hadi",
1175
+ "yav", "ulan", "valla", "eyvah", "hay", "tabi",
1176
+ "canım", "koçum", "birader", "hemşerim",
1177
+ // Common profanity
1178
+ "amk", "orospu", "sik", "yarrak", "göt", "piç",
1179
+ "pezevenk", "ibne", "puşt", "hıyar", "gerizekalı",
1180
+ ],
1181
+ phrases: [
1182
+ "nasılsın", "günaydın", "bu nedir", "ne kadar",
1183
+ "saat kaç", "nerelisin", "yardım edebilir misin",
1184
+ "memnun oldum", "teşekkürler", "iyi akşamlar", "iyi geceler",
1185
+ "hoşça kal", "görüşürüz", "özür dilerim", "bir şey değil",
1186
+ "bilmiyorum", "bence", "tabii ki", "sorun değil",
1187
+ "lütfen", "çok teşekkürler", "nasıl gidiyor", "ne yapıyorsun",
1188
+ "bir dakika", "ne demek", "yani", "mesela", "her zaman",
1189
+ "bir şekilde", "aynı zamanda", "en azından", "her halükarda",
1190
+ ],
1191
+ },
1192
+ // ── Romanized non-Latin languages ──
1193
+ // These catch text written in Latin characters that is clearly not English.
1194
+ // Common words, particles, and romanized forms that signal the language.
1195
+ ru: {
1196
+ words: [
1197
+ // Common romanized Russian (transliteration) — basic words
1198
+ "da", "net", "khorosho", "spasibo", "pozhaluysta", "privet", "poka",
1199
+ "kak", "dela", "zdes", "tam", "ochen", "bolshoy", "malenkiy",
1200
+ "chelovek", "zhenshchina", "muzhchina", "rebyonok", "dom", "rabota",
1201
+ "vremya", "den", "noch", "segodnya", "zavtra", "vchera",
1202
+ "pochemu", "kogda", "gde", "kto", "chto", "skolko",
1203
+ // Pronouns & particles
1204
+ "ya", "ty", "on", "ona", "my", "vy", "oni", "eto", "tot", "eta",
1205
+ "moy", "tvoy", "nash", "vash", "svoy", "ves", "vsyo", "kazhdyy",
1206
+ "nikto", "nichto", "kto-to", "chto-to",
1207
+ // Common verbs (romanized)
1208
+ "byt", "imet", "delat", "govorit", "idti", "videt", "davat",
1209
+ "znat", "mozhno", "khotet", "prikhodit", "brat", "nayti",
1210
+ "dumat", "skazat", "stoyat", "ostavlyat", "derzhat", "zhit",
1211
+ "pisat", "chitat", "rabotat", "igrat", "lyubit", "pomogat",
1212
+ "spat", "est", "pit", "begat", "umirat", "otkryvat",
1213
+ "zakryvat", "slyshat", "govorit", "smotret", "zhdat",
1214
+ // Common nouns (romanized)
1215
+ "lyudi", "mir", "strana", "gorod", "ulitsa", "dom", "shkola",
1216
+ "semya", "drug", "imya", "dver", "glaz", "golova", "ruka",
1217
+ "serdtse", "telo", "voda", "dengi", "kniga", "slovo",
1218
+ "istoriya", "voyna", "sila", "pravo", "gruppa", "primer",
1219
+ "problema", "noch", "utro", "vecher", "nedelya", "mesyats",
1220
+ "chas", "minuta", "mat", "otets", "brat", "sestra", "syn", "doch",
1221
+ // Common adjectives (romanized)
1222
+ "khoroshiy", "plokhoy", "bolshoy", "malenkiy", "novyy", "staryy",
1223
+ "dlinnyy", "korotkiy", "vysokiy", "nizkiy", "silnyy", "slabyy",
1224
+ "bystryy", "medlennyy", "krasivyy", "molodoy", "vazhnyy",
1225
+ "pravilnyy", "nepravilnyy", "svobodnyy",
1226
+ // Common adverbs (romanized)
1227
+ "vsegda", "nikogda", "chasto", "inogda", "seychas", "potom",
1228
+ "pered", "zdes", "tam", "mozhet", "konechno", "naprimer",
1229
+ "na samom dele", "uzhe", "yeshchyo",
1230
+ // Food (romanized)
1231
+ "khleb", "maslo", "moloko", "syr", "myaso", "kuritsa", "ryba",
1232
+ "yaytso", "ris", "kartoshka", "morkov", "pomidor", "luk", "chesnok",
1233
+ "sol", "sakhar", "myod", "uксус", "salat", "sup", "kascha",
1234
+ "yabloko", "apelsin", "limon", "klubnika", "vinograd", "arbuz",
1235
+ "banan", "grusha", "vishnya", "persik", "malina", "smetana",
1236
+ "tvorog", "kefir", "kompot", "borsht", "pelmeni", "bliny",
1237
+ "pirog", "vareniki", "shashlik", "solyanka", "okroshka",
1238
+ "vodka", "chay", "kofe", "kvas", "sok",
1239
+ // Body (romanized)
1240
+ "ruka", "noga", "stopa", "koleno", "plecho", "palets",
1241
+ "spina", "zhivot", "grud", "sheya", "nos", "ukho",
1242
+ "rot", "guba", "litso", "lob", "volosy", "kozha",
1243
+ "kost", "krov", "mozg", "myshtsa", "zheludok", "lyogkoe",
1244
+ // Family (romanized)
1245
+ "dedushka", "babushka", "dyadya", "tyotya", "dvoyurodniy",
1246
+ "svyokor", "svekrov", "zayats", "nevesta", "zhenikh",
1247
+ "muzh", "zhena", "vnuk", "vnuchka", "plemyannik",
1248
+ // Animals (romanized)
1249
+ "sobaka", "koshka", "loshad", "korova", "ovtsa", "svinya", "krolik",
1250
+ "mysh", "medved", "volk", "zmeya", "lyagushka", "cherepakha",
1251
+ "kit", "akula", "oryol", "babochka", "muravey", "pchela",
1252
+ "lev", "tigr", "slon", "obezyana", "olen", "lisa",
1253
+ "kuritsa", "ptitsa", "delfin", "osyol", "verblyud",
1254
+ // Nature (romanized)
1255
+ "dozhd", "sneg", "veter", "oblako", "solntse", "burya", "grom",
1256
+ "molniya", "raduga", "reka", "ozero", "more", "plyazh",
1257
+ "gora", "kholm", "les", "pustynya", "ostrov", "dolina",
1258
+ "derevo", "tsvetok", "trava", "list", "koren", "semya",
1259
+ "kamen", "pesok", "nebo", "zvezda", "luna", "ogon",
1260
+ // Colors (romanized)
1261
+ "krasnyy", "siniy", "zelonyy", "zholtyy", "chornyy", "belyy", "seryy",
1262
+ "korichnevyy", "rozovyy", "fioletovyy", "oranzhevyy", "zolotoy", "serebristyy",
1263
+ // Places (romanized)
1264
+ "bolnitsa", "sad", "magazin", "restoran", "gostinitsa", "vokzal",
1265
+ "aeroport", "biblioteka", "muzey", "teatr", "kino", "apteka",
1266
+ "ofis", "fabrika", "rynok", "ploshchad", "tserkov", "mechet",
1267
+ "kukhnya", "spalnya", "vannaya", "balkon", "garazh",
1268
+ // Numbers (romanized)
1269
+ "nol", "odin", "dva", "tri", "chetyre", "pyat", "shest",
1270
+ "sem", "vosem", "devyat", "desyat", "sto", "tysyacha", "million",
1271
+ // Days/Time (romanized)
1272
+ "ponedelnik", "vtornik", "sreda", "chetverg", "pyatnitsa",
1273
+ "subbota", "voskresenie", "yanvar", "fevral", "mart", "aprel",
1274
+ "may", "iyun", "iyul", "avgust", "sentyabr", "oktyabr",
1275
+ "noyabr", "dekabr", "vesna", "leto", "osen", "zima",
1276
+ "vchera", "segodnya", "zavtra", "rano", "pozdno",
1277
+ // Clothing (romanized)
1278
+ "rubashka", "shtany", "yubka", "kurtka", "botinki", "shapka",
1279
+ "sharf", "perchatki", "remen", "noski", "platye", "sviter",
1280
+ "palto", "sapogi", "sumka", "zontik",
1281
+ // Emotions (romanized)
1282
+ "schastlivyy", "grustnyy", "zlyy", "ispugannyy", "ustaliy",
1283
+ "nervnyy", "smushennyy", "udivlyonnyy", "gordyy", "revnivyy",
1284
+ "vzvolnovannyy", "spokoynyy", "dovolnyy", "razocharovannyy",
1285
+ // Transport (romanized)
1286
+ "mashina", "poyezd", "avtobus", "velosiped", "samolot", "korabl",
1287
+ "motosikl", "taksi", "tramvay", "gruzоvik", "lodka",
1288
+ // Abstract (romanized)
1289
+ "svoboda", "spravedlivost", "mir", "opasnost", "bezopasnost",
1290
+ "uspekh", "neudacha", "mechta", "nadezhda", "strakh",
1291
+ "schaste", "pechal", "lyubov", "nenavist", "hrabrost", "terpenie",
1292
+ "doverie", "uvazheniye", "krasota", "pravda", "mudrost",
1293
+ // Common verbs (extended romanized)
1294
+ "platit", "pokupat", "prodavat", "gotovit", "chistit", "myt",
1295
+ "vodit", "puteshestvovat", "plavat", "pet", "tantsevat", "risovat",
1296
+ "reshat", "vybirat", "lomat", "chint", "stroit", "razrushat",
1297
+ "obeshchat", "stradat", "smeyatsya", "plakat", "krichat", "sheptat",
1298
+ "prosypatsya", "odevatsya", "molitsya", "mechtat", "lazit", "prygat",
1299
+ // Common nouns (extended romanized)
1300
+ "svet", "ten", "golos", "tishina", "shum", "muzyka",
1301
+ "pesnya", "igra", "futbol", "komanda", "ideya", "sekret",
1302
+ "podarok", "pismo", "soobshchenie", "telefon",
1303
+ "stol", "stul", "krovat", "okno", "zerkalo", "klyuch",
1304
+ "chasy", "butylka", "stakan", "tarelka", "nozh", "vilka",
1305
+ "lozhka", "chashka", "kastrulya", "skovoroda",
1306
+ // Slang & informal (romanized)
1307
+ "patsany", "devchonki", "bro", "chelik", "blin", "blyа",
1308
+ "zdarova", "normas", "krutoy", "zaebis", "bazara", "nicho",
1309
+ "ladno", "davay", "poyekhali", "klass", "zhest", "ohuenno",
1310
+ // Common romanized profanity/slang
1311
+ "suka", "blyat", "blyad", "pizdets", "khuy", "yobany", "mudak",
1312
+ "gandon", "debil", "durak", "nahui", "ebat", "pizda",
1313
+ ],
1314
+ phrases: [
1315
+ "kak dela", "kak tebya zovut", "ya ne ponimayu",
1316
+ "idi nahui", "yob tvoyu mat", "dobroe utro", "dobryy den",
1317
+ "dobryy vecher", "spokoynoy nochi", "do svidaniya",
1318
+ "izvinite", "prostite", "ya dumayu", "konechno",
1319
+ "net problemy", "kak pozhivayete", "ochen priyatno",
1320
+ "ya khochu", "mne nuzhno", "ya lyublyu tebya",
1321
+ "ya ne znayu", "chto eto", "gde eto", "skolko stoit",
1322
+ "kotoryy chas", "otkuda vy", "vy mozhete pomoch",
1323
+ ],
1324
+ },
1325
+ ar: {
1326
+ words: [
1327
+ // Common romanized Arabic — greetings & basics
1328
+ "shukran", "marhaba", "ahlan", "naam", "laa", "inshallah",
1329
+ "mashallah", "alhamdulillah", "wallah", "yalla", "habibi",
1330
+ "habibti", "khalas", "sabah", "masa", "afwan",
1331
+ // Prepositions & particles
1332
+ "min", "ila", "fi", "ala", "hatha", "hadha", "hunaka",
1333
+ "kayfa", "limadha", "mata", "ayna", "kam", "man", "madha",
1334
+ "wa", "aw", "lakinna", "hatta", "bayna", "tahta", "fawqa",
1335
+ "amama", "waraa", "qabl", "baad", "mundhu", "khilal",
1336
+ // Pronouns
1337
+ "ana", "anta", "anti", "huwa", "hiya", "nahnu", "antum",
1338
+ "hum", "hunna", "hatha", "hadhihi", "dhalika", "tilka",
1339
+ "alladhi", "allati", "kullu", "baadhuhum", "la ahad",
1340
+ // Common verbs (romanized)
1341
+ "yakun", "yamlik", "yafal", "yaqul", "yadhhab", "yara",
1342
+ "yuati", "yarif", "yurid", "yaji", "yakhudh", "yajid",
1343
+ "yufakkir", "yaqif", "yatruk", "yumsik", "yaish", "yaktub",
1344
+ "yaqra", "yamal", "yalab", "yuhibb", "yusaid", "yanam",
1345
+ "yakul", "yashrab", "yarkud", "yamut", "yaftah", "yughlik",
1346
+ "yasma", "yatakallam", "yanzur", "yantazir",
1347
+ // Common nouns (romanized)
1348
+ "nas", "alam", "balad", "madinah", "sharia", "bayt", "madrasa",
1349
+ "usra", "sadiq", "ism", "bab", "ayn", "ras", "yad",
1350
+ "qalb", "jism", "maa", "mal", "kitab", "kalima",
1351
+ "tarikh", "harb", "quwwa", "haqq", "majmua", "mithal",
1352
+ "mushkila", "layl", "subh", "masaa", "usbua", "shahr",
1353
+ "sana", "saa", "daqiqa", "umm", "ab", "akh", "ukht", "ibn", "bint",
1354
+ "rajul", "imraa", "tifl", "waqt", "yawm", "hayat", "dunya",
1355
+ // Common adjectives (romanized)
1356
+ "jayyid", "sayyi", "kabir", "saghir", "jadid", "qadim",
1357
+ "tawil", "qasir", "ali", "munkhafiд", "qawi", "daif",
1358
+ "sari", "bati", "jamil", "muhim", "mukhtalif", "mumkin",
1359
+ "sahih", "khata", "hurr", "kamil", "basit", "saab",
1360
+ // Food (romanized)
1361
+ "khubz", "zubda", "halib", "jibna", "lahm", "dajaj", "samak",
1362
+ "bayd", "ruz", "batata", "jazar", "basal", "thum",
1363
+ "milh", "sukkar", "asal", "zayt", "khall", "salata", "shurba",
1364
+ "tuffah", "burtuqal", "laymun", "farawla", "inab", "battikh",
1365
+ "mawz", "kummathra", "karaz", "mango", "tamr", "tin",
1366
+ "falafel", "hummus", "shawarma", "tabouleh", "fattoush",
1367
+ "kibbeh", "mansaf", "kunafa", "baklawa", "tahini",
1368
+ "qahwa", "shay", "laban", "asir", "ayran",
1369
+ // Body (romanized)
1370
+ "dhiraa", "rijl", "qadam", "rukba", "katf", "isba",
1371
+ "dhahr", "batn", "sadr", "unq", "anf", "udhn",
1372
+ "famm", "shafa", "wajh", "jabha", "shar", "jild",
1373
+ "adhm", "damm", "dimagh", "adala", "mida",
1374
+ // Family (romanized)
1375
+ "jadd", "jadda", "amm", "amma", "khal", "khala",
1376
+ "ibn amm", "bint amm", "ham", "hama", "aris", "arusa",
1377
+ "zawj", "zawja", "hafid", "hafida", "qarib",
1378
+ // Animals (romanized)
1379
+ "kalb", "qitta", "hisan", "baqara", "kharuf", "khanzir", "arnab",
1380
+ "far", "dubb", "dhib", "afaa", "difda", "sulahfa",
1381
+ "hut", "qirsh", "nasr", "farasha", "namla", "nahla",
1382
+ "asad", "nimr", "fil", "qird", "ghazal", "thalab",
1383
+ "dajaja", "tayr", "dulfin", "jamal", "hamam",
1384
+ // Nature (romanized)
1385
+ "matar", "thalj", "riyah", "sahab", "shams", "asifa", "raad",
1386
+ "barq", "qaws quzah", "nahr", "buhayra", "bahr", "shati",
1387
+ "jabal", "tall", "ghaba", "sahra", "jazira", "wadi",
1388
+ "shajara", "zahra", "ushb", "waraqa", "jidr", "badhra",
1389
+ "hajar", "raml", "sama", "najm", "qamar", "nar",
1390
+ // Colors (romanized)
1391
+ "ahmar", "azraq", "akhdar", "asfar", "aswad", "abyad", "ramadi",
1392
+ "bunni", "zahri", "banafsaji", "burtuqali", "dhahabi", "fiddi",
1393
+ // Places (romanized)
1394
+ "mustashfa", "hadiqa", "dukkan", "matam", "funduq", "mahatta",
1395
+ "matar", "maktaba", "mathaf", "masrah", "sinima", "saydaliyya",
1396
+ "maktab", "masna", "suq", "maydan", "masjid", "kanisa",
1397
+ "matbakh", "ghurfa", "hammam", "shurfa",
1398
+ // Numbers (romanized)
1399
+ "sifr", "wahid", "ithnan", "thalatha", "arbaa", "khamsa", "sitta",
1400
+ "sabaa", "thamaniya", "tisa", "ashara", "mia", "alf", "malyun",
1401
+ // Days/Time (romanized)
1402
+ "ithnayn", "thulatha", "arbiaa", "khamis", "jumaa",
1403
+ "sabt", "ahad", "yanayir", "fibrayir", "maris", "abril",
1404
+ "mayu", "yunyu", "yulyu", "aghustus", "sibtambir", "uktubar",
1405
+ "nufambir", "disambir", "rabi", "sayf", "kharif", "shita",
1406
+ "ams", "alyawm", "ghadan", "bakir", "mutaakhir",
1407
+ // Clothing (romanized)
1408
+ "qamis", "sirwal", "tannura", "jakit", "hitha", "qubba",
1409
+ "wisha", "quffaz", "hizam", "jawrab", "thawb", "abaya",
1410
+ "hijab", "jilbab", "sandal", "haqiba", "mizalla",
1411
+ // Emotions (romanized)
1412
+ "said", "hazin", "ghadib", "khaif", "taaban", "malul",
1413
+ "qaliq", "mutafaji", "fakhur", "ghayur", "mutahamis",
1414
+ "hadi", "radi", "mukhayab",
1415
+ // Transport (romanized)
1416
+ "sayyara", "qitar", "hafila", "darraja", "tayara", "safina",
1417
+ "darraja", "taksi", "shahina", "qarib",
1418
+ // Abstract (romanized)
1419
+ "hurriya", "adala", "salam", "khatar", "aman",
1420
+ "najah", "fashal", "hulm", "amal", "khawf",
1421
+ "saada", "huzn", "hubb", "karahiya", "shujaa", "sabr",
1422
+ "thiqa", "ihtiram", "jamal", "haqiqa", "hikma",
1423
+ // Common verbs (extended romanized)
1424
+ "yadfa", "yashtari", "yabi", "yatbukh", "yunazzif", "yaghsil",
1425
+ "yasug", "yusafir", "yasbah", "yughanni", "yarqus", "yarsum",
1426
+ "yuqarrir", "yakhtar", "yaksir", "yuslih", "yabni", "yahdim",
1427
+ "yaad", "yualim", "yadhak", "yabki", "yasrukh", "yahmus",
1428
+ "yastayqiz", "yalbas", "yusalli", "yahlum", "yatasallaq", "yaqfiz",
1429
+ // Common nouns (extended romanized)
1430
+ "daw", "zill", "sawt", "sukut", "dajij", "musiqa",
1431
+ "ughniya", "luba", "kura", "fariq", "fikra", "sirr",
1432
+ "hadiyya", "risala", "hatif", "tawila", "kursi",
1433
+ "sarir", "nafidha", "miraya", "miftah", "saa",
1434
+ "zujaja", "kaas", "sahn", "sikkin", "shawka",
1435
+ "milaqa", "finjan", "qidr", "miqlat",
1436
+ // Slang & informal (romanized)
1437
+ "yabni", "yamma", "akh", "akhoya", "sahbi", "rafiqi",
1438
+ "mesh", "mish", "tab", "ashta", "akeed", "wallahi",
1439
+ "tamaam", "maashi", "aywа", "bass", "kida", "ezayak",
1440
+ // Common romanized profanity
1441
+ "kuss", "sharmouta", "sharmuta", "kos", "omak",
1442
+ "kelb", "himar", "hayawan", "ahbal", "ghabi", "wiskha",
1443
+ "khanzeera", "manyak", "zalameh",
1444
+ ],
1445
+ phrases: [
1446
+ "yalla habibi", "inshallah", "alhamdulillah",
1447
+ "kuss ummak", "ibn el sharmouta",
1448
+ "sabah al khayr", "sabah al noor", "masa al khayr",
1449
+ "masa al noor", "maa al salama", "ila al liqaa",
1450
+ "ana asif", "la ashkur", "min fadlak", "min fadlik",
1451
+ "kayf halak", "kayf halik", "ana bikhayr",
1452
+ "la arif", "ana afakir", "taban", "mafi mushkila",
1453
+ "mathalan", "fi al haqiqa", "ahyanan", "daiman",
1454
+ "abadan", "al aan", "baad dhalik", "qabl dhalik",
1455
+ "ala al aqall", "bi al idafa ila", "bi sabab",
1456
+ ],
1457
+ },
1458
+ zh: {
1459
+ words: [
1460
+ // Common Pinyin romanization (Mandarin Chinese) — basics
1461
+ "ni", "hao", "wo", "shi", "bu", "hen", "dui", "zhe", "na",
1462
+ "shenme", "weishenme", "zenme", "nar", "shei", "duoshao",
1463
+ "xiexie", "zaijian", "duibuqi", "meiguanxi", "keyi",
1464
+ "xiang", "yao", "zhidao", "mingbai", "renshi", "xihuan",
1465
+ "chi", "kan", "qu", "lai", "gei", "shuo", "ting",
1466
+ "pengyou", "jia", "gongzuo", "xuexiao", "yisheng",
1467
+ // Pronouns & particles
1468
+ "ta", "tamen", "women", "nimen", "zhege", "nage",
1469
+ "nali", "zheli", "shui", "zenmeyang", "duome", "jige",
1470
+ "mei", "meiyou", "dou", "ye", "jiu", "cai", "hai",
1471
+ "zai", "le", "guo", "de", "ba", "ma", "ne", "bei",
1472
+ // Common verbs (pinyin)
1473
+ "zuo", "you", "hui", "neng", "rang", "zhao", "dai",
1474
+ "na", "fang", "xie", "du", "gongzuo", "wan", "kai",
1475
+ "guan", "mai", "wen", "da", "jiao", "xue", "jian",
1476
+ "song", "deng", "zhu", "pao", "zou", "fei", "diao",
1477
+ "si", "sheng", "bian", "cheng", "yong", "bang", "ai",
1478
+ "hen", "xi", "pa", "shui", "he", "chuan", "dai",
1479
+ "zhan", "zuо", "tang", "tiao", "chang", "hua", "xiao",
1480
+ "ku", "sheng", "ting", "dong", "jie", "ji", "bie",
1481
+ // Common nouns (pinyin)
1482
+ "ren", "shijie", "guojia", "chengshi", "jie", "fangzi",
1483
+ "xuexiao", "jiating", "pengyou", "mingzi", "men", "yanjing",
1484
+ "tou", "shou", "xin", "shenti", "shui", "qian", "shu",
1485
+ "zi", "lishi", "zhanzheng", "liliang", "quanli", "zu",
1486
+ "lizi", "wenti", "ye", "zaoshang", "wanshang", "xingqi",
1487
+ "yue", "nian", "xiaoshi", "fenzhong", "mama", "baba",
1488
+ "gege", "jiejie", "didi", "meimei", "erzi", "nuer",
1489
+ "nanren", "nuren", "haizi", "shijian", "tian", "shenghuo",
1490
+ // Common adjectives (pinyin)
1491
+ "hao", "huai", "da", "xiao", "xin", "jiu", "chang",
1492
+ "duan", "gao", "di", "qiang", "ruo", "kuai", "man",
1493
+ "piaoliang", "nianqing", "zhongyao", "butong", "keneng",
1494
+ "zhengque", "cuowu", "ziyou", "man", "jiandan", "nan",
1495
+ // Common adverbs (pinyin)
1496
+ "zongshi", "congbu", "jingchang", "youshihou", "xianzai",
1497
+ "ranhou", "yiqian", "zher", "nar", "keneng", "dangran",
1498
+ "biru", "qishi", "yijing", "haishi",
1499
+ // Food (pinyin)
1500
+ "fan", "mian", "baozi", "jiaozi", "chaofan", "huoguo",
1501
+ "mapo", "doufu", "mantou", "bing", "tang", "cu", "jiang",
1502
+ "cong", "suan", "la", "xian", "tian", "ku", "suan",
1503
+ "cha", "kafei", "pijiu", "niunai", "guozhi", "suannai",
1504
+ "dangao", "bingqilin", "mianbao", "niurou", "zhurou",
1505
+ "yangrou", "ji", "ya", "yu", "xia", "tudou", "xihongshi",
1506
+ "huanggua", "bocai", "pingguo", "xiangjiao", "caomei",
1507
+ "xigua", "putao", "juzi", "lizhi", "manguo",
1508
+ "zongzi", "tanghulu", "yuanxiao", "yuebing", "guobaorou",
1509
+ // Places (pinyin)
1510
+ "yiyuan", "gongyuan", "shangdian", "fandian", "jiuba",
1511
+ "cesuo", "chezhan", "jichang", "tushuguan", "bowuguan",
1512
+ "gongchang", "bangongshi", "chufang", "woshi", "keting",
1513
+ "weishengjian", "yangtai", "louti", "dianying", "chaoshi",
1514
+ // Animals (pinyin)
1515
+ "gou", "mao", "niao", "ma", "niu", "zhu", "tu",
1516
+ "laoshu", "xiong", "lang", "she", "qingwa", "wugui",
1517
+ "jingyu", "shayu", "laoying", "hudie", "mayi", "houzi",
1518
+ "daxiang", "laohu", "longxia", "pangxie",
1519
+ // Nature (pinyin)
1520
+ "yu", "xue", "feng", "yun", "taiyang", "baofeng", "lei",
1521
+ "shandian", "caihong", "he", "hu", "hai", "shatan",
1522
+ "shan", "senlin", "shamo", "dao", "shu", "hua",
1523
+ "cao", "ye", "gen", "zhongzi", "shi", "tu",
1524
+ "tian", "xing", "yueliang",
1525
+ // Colors (pinyin)
1526
+ "hong", "lan", "lü", "huang", "hei", "bai", "hui",
1527
+ "zong", "fen", "zi", "cheng", "jin", "yin",
1528
+ // Body (pinyin)
1529
+ "gebo", "tui", "jiao", "xigai", "jianbang", "shouzhi",
1530
+ "bei", "duzi", "xiong", "bozi", "bizi", "erduo",
1531
+ "zuiba", "zuichun", "lian", "etou", "toufa", "pifu",
1532
+ "gutou", "xue", "nao",
1533
+ // Numbers (pinyin)
1534
+ "ling", "yi", "er", "san", "si", "wu", "liu", "qi",
1535
+ "ba", "jiu", "shi", "bai", "qian", "wan", "yi",
1536
+ // Days/Time (pinyin)
1537
+ "xingqiyi", "xingqier", "xingqisan", "xingqisi",
1538
+ "xingqiwu", "xingqiliu", "xingqitian",
1539
+ "yiyue", "eryue", "sanyue", "siyue", "wuyue", "liuyue",
1540
+ "qiyue", "bayue", "jiuyue", "shiyue", "shiyiyue", "shieryue",
1541
+ "chuntian", "xiatian", "qiutian", "dongtian",
1542
+ // Emotions (pinyin)
1543
+ "gaoxing", "shangxin", "shengqi", "haipa", "lei", "wuliao",
1544
+ "xingfen", "jinzhang", "kunhuo", "jingya", "jiaoao",
1545
+ "gudu", "danyou", "fanao", "kaixin", "tongku",
1546
+ // Clothing (pinyin)
1547
+ "chenshan", "kuzi", "qunzi", "waitao", "xiezi", "maozi",
1548
+ "weibi", "shoutao", "pidai", "wazi", "neiyi",
1549
+ // Abstract (pinyin)
1550
+ "ziyou", "zhengyi", "heping", "weixian", "anquan",
1551
+ "chenggong", "shibai", "meng", "xiwang", "kongju",
1552
+ "kuaile", "beishang", "ai", "hen", "yongqi", "naixin",
1553
+ "xinren", "zunzhong", "meili", "zhenli", "zhihui",
1554
+ // Transport (pinyin)
1555
+ "qiche", "huoche", "gonggongqiche", "zixingche", "feiji", "chuan",
1556
+ "motuo", "chuzuche", "ditie", "kache",
1557
+ // Common verbs (extended pinyin)
1558
+ "fu", "mairu", "maichu", "zuofan", "dasao", "xizao",
1559
+ "kaiche", "lvyou", "youyong", "changge", "tiaowu", "huahua",
1560
+ "jueding", "xuanze", "dapo", "xiuli", "jianzao", "pohuai",
1561
+ "chеngnuо", "shouku", "xiao", "ku", "jiaо", "erduo",
1562
+ "xing", "chuanyi", "qidao", "zuomeng", "pan", "tiao",
1563
+ // Common nouns (extended pinyin)
1564
+ "guang", "yinying", "shengyin", "jingmo", "zaоyin", "yinyue",
1565
+ "ge", "dianying", "youxi", "duiwu", "xiangfa", "mimi",
1566
+ "liwu", "xin", "xinxi", "dianhua",
1567
+ "zhuozi", "yizi", "chuang", "chuanghu", "jingzi", "yaoshi",
1568
+ "zhong", "pingzi", "beizi", "panzi", "daozi", "chazi",
1569
+ "shaozi", "chabei", "guo", "chaoguо",
1570
+ // Counters & measure words (pinyin)
1571
+ "ge", "zhi", "tiao", "zhang", "ben", "bei", "ping",
1572
+ "jian", "shuang", "kuai", "ci", "bian", "dun",
1573
+ // Family (extended pinyin)
1574
+ "yeye", "nainai", "waigong", "waipo", "shushu", "ayi",
1575
+ "gugu", "jiujiu", "biaoer", "tangdi", "zhangfu", "qizi",
1576
+ "sunzi", "sunnv", "qinqi",
1577
+ // Clothing (pinyin)
1578
+ "chenyi", "kuzi", "qunzi", "jiake", "xie", "maozi",
1579
+ "weijin", "shoutao", "pidai", "wazi", "yifu", "maoyi",
1580
+ "dayi", "xuezi", "bao", "yusan",
1581
+ // Slang & internet (pinyin)
1582
+ "lihai", "niubi", "geili", "kengdie", "diaosi",
1583
+ "baifumei", "gaofushuai", "tuhao", "jiayou", "maimeng",
1584
+ "buhao", "keai", "shuai", "chou", "bang", "zha",
1585
+ "laoshi", "tongxue", "pengyou", "tongzhi", "laobao",
1586
+ // Common romanized profanity
1587
+ "tmd", "cao", "caonima", "shabi", "bichi", "tamade",
1588
+ "gundan", "wocao", "niubi", "laji", "hundan", "wangbadan",
1589
+ ],
1590
+ phrases: [
1591
+ "ni hao", "xie xie", "dui bu qi", "mei guan xi",
1592
+ "wo ai ni", "cao ni ma", "ta ma de",
1593
+ "zao shang hao", "wan shang hao", "wan an", "zai jian",
1594
+ "dui bu qi", "bu ke qi", "mei wen ti", "wo bu zhi dao",
1595
+ "wo jue de", "dang ran", "bi ru shuo", "shi shi shang",
1596
+ "you shi hou", "yi zhi", "cong lai bu", "xian zai",
1597
+ "ran hou", "yi qian", "zhi shao", "ling wai",
1598
+ "tong shi", "jin kuai", "yue lai yue", "yi dian dian",
1599
+ "zen me le", "shen me shi", "duo shao qian", "ji dian le",
1600
+ "ni shi na li ren", "ni neng bang wo ma",
1601
+ ],
1602
+ },
1603
+ ja: {
1604
+ words: [
1605
+ // Common Romaji romanization (Japanese) — basics
1606
+ "watashi", "anata", "kare", "kanojo", "kore", "sore", "are",
1607
+ "nani", "naze", "doko", "itsu", "dare", "ikura", "dou",
1608
+ "hai", "iie", "arigatou", "sumimasen", "gomen", "onegai",
1609
+ "ohayou", "konnichiwa", "konbanwa", "sayonara", "mata",
1610
+ "taberu", "nomu", "miru", "iku", "kuru", "suru", "aru",
1611
+ "kawaii", "sugoi", "yabai", "maji", "chotto", "dame",
1612
+ "sensei", "senpai", "desu", "masu", "kudasai", "shimasu", "arimasu",
1613
+ // Pronouns & particles (romaji)
1614
+ "boku", "ore", "atashi", "kimi", "omae", "karera", "kanojotachi",
1615
+ "watashitachi", "bokutachi", "oretachi", "dore", "docchi",
1616
+ "koko", "soko", "asoko", "kou", "sou", "aa", "dono",
1617
+ "ga", "wo", "ni", "he", "de", "to", "ka", "mo", "ya",
1618
+ "kara", "made", "yori", "nado", "dake", "shika", "bakari",
1619
+ // Common verbs (romaji)
1620
+ "iru", "iru", "naru", "yaru", "morau", "ageru", "kureru",
1621
+ "iku", "kaeru", "tsukau", "tsukuru", "kaku", "yomu", "hanasu",
1622
+ "kiku", "matsu", "okiru", "neru", "aruku", "hashiru", "tobu",
1623
+ "oyogu", "utau", "odoru", "warau", "naku", "okoru", "shinu",
1624
+ "umareru", "hajimeru", "owaru", "tomaru", "ugoku", "kangaeru",
1625
+ "omou", "shiru", "wasureru", "oboeru", "narau", "oshieru",
1626
+ "asobu", "hataraku", "yasumu", "kau", "uru", "harau",
1627
+ "akeru", "shimeru", "tsukeru", "kesu", "otosu", "hirou",
1628
+ "erabu", "kimeru", "tasukeru", "tetsudau",
1629
+ // Common nouns (romaji)
1630
+ "hito", "sekai", "kuni", "machi", "michi", "uchi", "gakkou",
1631
+ "kazoku", "tomodachi", "namae", "tobira", "me", "atama", "te",
1632
+ "kokoro", "karada", "mizu", "okane", "hon", "kotoba",
1633
+ "rekishi", "sensou", "chikara", "kenri", "mondai",
1634
+ "yoru", "asa", "yoru", "shuumatsu", "tsuki", "toshi",
1635
+ "jikan", "fun", "okaasan", "otousan", "oniisan", "oneesan",
1636
+ "otouto", "imouto", "musuko", "musume", "otoko", "onna",
1637
+ "kodomo", "jikan", "hi", "seikatsu", "shigoto",
1638
+ // Common adjectives (romaji)
1639
+ "ii", "warui", "ookii", "chiisai", "atarashii", "furui",
1640
+ "nagai", "mijikai", "takai", "hikui", "tsuyoi", "yowai",
1641
+ "hayai", "osoi", "utsukushii", "wakai", "taisetsu",
1642
+ "chigau", "tadashii", "machigai", "kantan", "muzukashii",
1643
+ "tanoshii", "kanashii", "ureshii", "kowai", "oishii",
1644
+ "mazui", "atsui", "samui", "tsumetai", "atatakai",
1645
+ // Common adverbs (romaji)
1646
+ "itsumo", "zenzen", "yoku", "tokidoki", "ima", "sorekara",
1647
+ "mae", "koko", "soko", "tabun", "mochiron", "tatoeba",
1648
+ "jitsu", "mou", "mada", "totemo", "amari", "sukoshi",
1649
+ // Food (romaji)
1650
+ "gohan", "miso", "natto", "soba", "udon", "tempura", "yakitori",
1651
+ "takoyaki", "onigiri", "bento", "wasabi", "shoyu", "mochi",
1652
+ "tofu", "sakana", "niku", "yasai", "tamago", "ramen",
1653
+ "sashimi", "gyudon", "katsu", "okonomiyaki", "tamagoyaki",
1654
+ "edamame", "daikon", "nori", "sake", "matcha", "dango",
1655
+ // Places (romaji)
1656
+ "eki", "mise", "uchi", "heya", "machi", "kawa", "yama",
1657
+ "umi", "sora", "hashi", "kouen", "byouin", "ginkou",
1658
+ "toshokan", "resutoran", "konbini", "depato", "ofuro",
1659
+ // Animals (romaji)
1660
+ "inu", "neko", "tori", "sakana", "uma", "ushi", "hitsuji",
1661
+ "buta", "usagi", "nezumi", "kuma", "okami", "hebi",
1662
+ "kaeru", "kame", "kujira", "same", "washi", "chou",
1663
+ // Nature (romaji)
1664
+ "ame", "yuki", "kaze", "kumo", "taiyou", "arashi", "kaminari",
1665
+ "niji", "kawa", "mizuumi", "sora", "hana", "kusa", "ha",
1666
+ "ki", "ishi", "tsuchi", "hoshi", "tsuki",
1667
+ // Colors (romaji)
1668
+ "aka", "ao", "midori", "kiiro", "kuro", "shiro", "hai",
1669
+ "chairo", "pinku", "murasaki", "orenji", "kin", "gin",
1670
+ // Body (romaji)
1671
+ "ude", "ashi", "hiza", "kata", "yubi", "senaka",
1672
+ "onaka", "mune", "kubi", "hana", "mimi", "kuchi",
1673
+ "kuchibiru", "hoho", "hitai", "kami", "hone", "chi",
1674
+ // Slang & informal (romaji)
1675
+ "yabai", "maji", "sugoi", "kawaii", "kakkoii", "dasai",
1676
+ "mendokusai", "tsumannai", "mikka", "warota", "kusa",
1677
+ "natsukashii", "otsukare", "ganbatte", "shoganai",
1678
+ "mottainai", "itadakimasu", "gochisousama",
1679
+ // Numbers (romaji)
1680
+ "ichi", "ni", "san", "yon", "go", "roku", "nana", "hachi",
1681
+ "kyuu", "juu", "hyaku", "sen", "man",
1682
+ // Days/Time (romaji)
1683
+ "getsuyoubi", "kayoubi", "suiyoubi", "mokuyoubi", "kinyoubi",
1684
+ "doyoubi", "nichiyoubi", "ichigatsu", "nigatsu", "sangatsu",
1685
+ "shigatsu", "gogatsu", "rokugatsu", "shichigatsu", "hachigatsu",
1686
+ "kugatsu", "juugatsu", "juuichigatsu", "juunigatsu",
1687
+ "haru", "natsu", "aki", "fuyu",
1688
+ "kinou", "kyou", "ashita", "hayai", "osoi",
1689
+ // Clothing (romaji)
1690
+ "shatsu", "zubon", "sukato", "uwagi", "kutsu", "boushi",
1691
+ "mafura", "tebukuro", "beruto", "kutsushita", "fuku", "seta",
1692
+ "kooto", "buutsu", "kaban", "kasa",
1693
+ // Emotions (romaji)
1694
+ "ureshii", "kanashii", "okoru", "kowai", "tsukareta", "taikutsu",
1695
+ "shinpai", "odoroku", "hokori", "shitto", "koufun",
1696
+ "ochitsuku", "manzoku", "gakkari", "shiawase", "kurushii",
1697
+ // Transport (romaji)
1698
+ "kuruma", "densha", "basu", "jitensha", "hikouki", "fune",
1699
+ "baiku", "takushi", "torakku", "chikatetsu",
1700
+ // Abstract (romaji)
1701
+ "jiyuu", "seigi", "heiwa", "kiken", "anzen",
1702
+ "seikou", "shippai", "yume", "kibou", "kyoufu",
1703
+ "koufuku", "kanashimi", "ai", "nikushimi", "yuuki", "nintai",
1704
+ "shinrai", "sonkei", "utsukushisa", "shinjitsu", "chie",
1705
+ // Common verbs (extended romaji)
1706
+ "harau", "kau", "uru", "ryouri", "souji", "arau",
1707
+ "unten", "ryokou", "oyogu", "utau", "odoru", "egaku",
1708
+ "kimeru", "erabu", "kowasu", "naosu", "tateru", "kowareru",
1709
+ "yakusoku", "kurushimu", "warau", "naku", "sakebu", "sasayaku",
1710
+ "okiru", "kiru", "inoru", "noboru", "tobu", "nageru",
1711
+ // Common nouns (extended romaji)
1712
+ "hikari", "kage", "koe", "shizukesa", "oto", "ongaku",
1713
+ "kyoku", "eiga", "supootsu", "chiimu", "aidea", "himitsu",
1714
+ "okurimono", "tegami", "messeeji", "denwa",
1715
+ "tsukue", "isu", "beddo", "mado", "kagami", "kagi",
1716
+ "tokei", "bin", "koppu", "sara", "naifu", "fooku",
1717
+ "supuun", "kappu", "nabe", "furaipan",
1718
+ // Counters & misc (romaji)
1719
+ "hitotsu", "futatsu", "mittsu", "yottsu", "itsutsu",
1720
+ "ikutsu", "takusan", "sukoshi", "zenbu", "hanbun",
1721
+ "saki", "ato", "sugu", "yukkuri", "hayaku",
1722
+ "hitori", "futari", "minna", "dareka", "nanika",
1723
+ // Common romanized profanity/slang
1724
+ "kuso", "baka", "aho", "chikushou", "kisama", "temee",
1725
+ "shine", "fuzakeru", "kutabare", "manko", "chinko", "unko",
1726
+ "yariman", "kimoi", "uzai", "busu",
1727
+ ],
1728
+ phrases: [
1729
+ "ohayou gozaimasu", "arigatou gozaimasu", "sumimasen",
1730
+ "itadakimasu", "gochisousama", "nani kore",
1731
+ "uso deshou", "maji de", "oyasumi nasai", "konbanwa",
1732
+ "mata ne", "ki wo tsukete", "gomen nasai", "daijoubu",
1733
+ "onegai shimasu", "hajimemashite", "yoroshiku onegai shimasu",
1734
+ "omedeto gozaimasu", "dou itashimashite", "ogenki desu ka",
1735
+ "wakarimasen", "wakarimashita", "sou desu ne", "sou desu ka",
1736
+ "chotto matte", "nan desu ka", "dou shita no",
1737
+ "ikura desu ka", "nanji desu ka", "doko kara",
1738
+ "nihongo ga wakarimasen", "eigo ga hanasemasu ka",
1739
+ "tasukete kudasai", "toire wa doko desu ka",
1740
+ ],
1741
+ },
1742
+ ko: {
1743
+ words: [
1744
+ // Common romanized Korean — basics
1745
+ "annyeong", "gamsa", "ne", "aniyo", "jal", "juseyo",
1746
+ "haseyo", "kamsahamnida", "mianhae", "saranghae", "oppa",
1747
+ "unni", "noona", "hyung", "eonni", "ahjussi", "ahjumma",
1748
+ "mwo", "wae", "eodi", "eonje", "nugu", "eolma",
1749
+ "meokda", "masida", "boda", "gada", "oda", "hada",
1750
+ "joa", "silheo", "gwaenchana", "daebak", "aigoo", "omo",
1751
+ // Pronouns & particles (romanized)
1752
+ "na", "neo", "geu", "geunyeo", "uri", "neohui", "geudeul",
1753
+ "igeo", "geugeo", "jeogeo", "yeogi", "geogi", "jeogi",
1754
+ "eotteon", "myeot", "nuguui", "museun", "eotteke",
1755
+ "ga", "eul", "reul", "e", "eseo", "ro", "wa", "gwa",
1756
+ "do", "man", "buteo", "kkaji", "bakke", "cheoreom",
1757
+ // Common verbs (romanized)
1758
+ "ida", "itda", "eopda", "doeda", "gada", "oda", "boda",
1759
+ "meokda", "masida", "hada", "malda", "alda", "moruda",
1760
+ "sarangda", "johda", "silda", "juda", "batda", "chajda",
1761
+ "saengakda", "deudda", "malhada", "sseuda", "ilkda",
1762
+ "ilhada", "nolda", "jada", "ireonda", "geolda", "dallida",
1763
+ "nalda", "jukda", "salda", "yeolda", "datda", "dukhada",
1764
+ "gidarida", "mannada", "baeuda", "gaereuchida", "dopda",
1765
+ "butakhada", "daeumhada", "sijakada", "ggeutnada",
1766
+ // Common nouns (romanized)
1767
+ "saram", "sesang", "nara", "dosi", "gil", "jip", "hakgyo",
1768
+ "gajok", "chingu", "ireum", "mun", "nun", "meori", "son",
1769
+ "maeum", "mom", "mul", "don", "chaek", "mal",
1770
+ "yeoksa", "jeonjaeng", "him", "gwonri", "munje",
1771
+ "bam", "achim", "jenyeok", "jumal", "dal", "hae",
1772
+ "sigan", "bun", "eomma", "appa", "oppa", "eonni",
1773
+ "hyeong", "nuna", "adeul", "ttal", "namja", "yeoja",
1774
+ "ai", "sigan", "nal", "saenghwal", "il",
1775
+ // Common adjectives (romanized)
1776
+ "jota", "nappeuda", "keuda", "jakda", "saeroun", "oraedoen",
1777
+ "gilda", "jjalda", "nopda", "najda", "ganghan", "yakhan",
1778
+ "ppareuda", "neurida", "yeppeuda", "jeolmeun", "jungyohan",
1779
+ "dareun", "olbareun", "geureom", "swipda", "eoryeopda",
1780
+ "jeulgeopda", "seulpeuda", "gippeuda", "museopda", "masissda",
1781
+ "deopda", "chupda", "ttatteutada",
1782
+ // Common adverbs (romanized)
1783
+ "hangsang", "jeoldae", "jaju", "gakkeum", "jigeum", "geurigo",
1784
+ "jeon", "yeogi", "geogi", "amado", "mullon", "yereul deulmyeon",
1785
+ "sasil", "imi", "ajik", "maeu", "byeollo", "jogeum",
1786
+ // Food (romanized)
1787
+ "bap", "gimbap", "tteokbokki", "bibimbap", "jjigae", "samgyeopsal",
1788
+ "bulgogi", "japchae", "ramyeon", "mandu", "pajeon", "dakgalbi",
1789
+ "kimchi", "sundae", "naengmyeon", "galbi", "jeon", "ssam",
1790
+ "doenjang", "gochujang", "soju", "makgeolli", "sikhye",
1791
+ "tteok", "hotteok", "bungeoppang", "yakgwa", "patbingsu",
1792
+ // Places (romanized)
1793
+ "byeongwon", "gongwon", "sijangs", "noraebang", "jimjilbang",
1794
+ "pyeonuijeom", "sikdang", "hagwon", "gonghangs", "yeok",
1795
+ "bang", "bueoek", "geosil", "hwajangsil", "okssang",
1796
+ // Animals (romanized)
1797
+ "gae", "goyangi", "sae", "mal", "so", "yang", "dwaeji",
1798
+ "tokki", "jwi", "gom", "neukdae", "baem", "gaeguri",
1799
+ "gorae", "sangeo", "nabi", "gaemi",
1800
+ // Nature (romanized)
1801
+ "bi", "nun", "baram", "gureum", "hae", "pokpung",
1802
+ "gang", "hosu", "bada", "san", "sup", "haneul",
1803
+ "byeol", "kkot", "pul", "namu", "dolg",
1804
+ // Colors (romanized)
1805
+ "ppalgan", "parang", "chorong", "norang", "kkaman", "hayan",
1806
+ "hoesaek", "galsaek", "bunjong", "bora",
1807
+ // Body (romanized)
1808
+ "pal", "dari", "bal", "mureup", "eogae", "songarak",
1809
+ "deung", "bae", "gaseum", "mok", "ko", "gwi", "ip",
1810
+ "ipssul", "bolg", "ima", "meori", "pi", "ppyeo",
1811
+ // Slang & informal
1812
+ "jinjja", "heol", "jjang", "hwaiting", "ottoke", "arasso",
1813
+ "mollayo", "wanjeon", "jeongmal", "chincha", "kkul",
1814
+ "sogaeting", "sseurekgi", "beoddeok", "jjam", "meotjida",
1815
+ "jjokpalida", "kkondae", "danji", "meolkki",
1816
+ // Numbers (romanized)
1817
+ "hana", "dul", "set", "net", "daseot", "yeoseot", "ilgop",
1818
+ "yeodeol", "ahop", "yeol", "baek", "cheon", "man",
1819
+ "il", "i", "sam", "sa", "o", "yuk", "chil", "pal", "gu", "sip",
1820
+ // Days/Time (romanized)
1821
+ "woryoil", "hwayoil", "suyoil", "mogyoil", "geumyoil",
1822
+ "toyoil", "iryoil", "irwol", "iwol", "samwol", "sawol",
1823
+ "owol", "yuwol", "chirwol", "palwol", "guwol", "siwol",
1824
+ "sibirwol", "sibiwol", "bom", "yeoreum", "gaeul", "gyeoul",
1825
+ "eoje", "oneul", "naeil", "iljjik", "neutge",
1826
+ // Clothing (romanized)
1827
+ "syeocheu", "baji", "chima", "jakit", "gudu", "moja",
1828
+ "mogdori", "janggap", "heoriddi", "yangmal", "ot",
1829
+ "kotu", "buchu", "gabang", "usan",
1830
+ // Emotions (romanized)
1831
+ "haengbokhan", "seulpeun", "hwanan", "museoun", "pigonhan",
1832
+ "jiruhaean", "geokjeong", "nollan", "jarangseureoun", "jiltuha",
1833
+ "heungbundoen", "pyeonganhan", "manjokhan", "silmanghan",
1834
+ // Transport (romanized)
1835
+ "jadongcha", "gicha", "beosu", "jajeongeo", "bihaenggi", "bae",
1836
+ "moteo", "taeksi", "jeonchеol", "teureok",
1837
+ // Abstract (romanized)
1838
+ "jayu", "jeongui", "pyeonghwa", "wiheom", "anjeon",
1839
+ "seonggong", "silpae", "kkum", "huimang", "gongpo",
1840
+ "haengbok", "seulpeum", "sarang", "mieum", "yonggi", "inyeo",
1841
+ "sinroe", "jongyeong", "arumdaum", "jinsil", "jihye",
1842
+ // Common verbs (extended romanized)
1843
+ "naeda", "sada", "palda", "yorihada", "cheongsohada", "ssitda",
1844
+ "unjeonhada", "yeohaenghada", "suyeonghada", "noraehada",
1845
+ "chumchuda", "geurida", "gyeoljeunghada", "goreuda",
1846
+ "kkaeturida", "gochida", "jitda", "busuda",
1847
+ "yaksokada", "goerobda", "utda", "ulda", "sorichida", "soksagida",
1848
+ "ireonada", "ibda", "gidohada", "oreuda", "ttwida", "deonjida",
1849
+ // Common nouns (extended romanized)
1850
+ "bich", "geurimja", "moksori", "goyo", "soreum", "eumak",
1851
+ "norae", "yeonghwa", "undong", "tim", "saenggak", "bimil",
1852
+ "seonmul", "pyeonji", "mesiji", "jeonhwa",
1853
+ "chaeksang", "uija", "chimdae", "changmun", "georeu", "yeolsoe",
1854
+ "sigye", "byeong", "keop", "jeopsi", "kal", "pokeu",
1855
+ "sukkarak", "keop", "naembi", "peuraipaen",
1856
+ // Counters & misc (romanized)
1857
+ "myeongui", "gaui", "geonui", "jangui", "gwonui",
1858
+ "mani", "jogeum", "jeonbu", "ban",
1859
+ "meolri", "gakkai", "ppalli", "cheoncheonhi",
1860
+ // Common romanized profanity
1861
+ "shibal", "ssibal", "gaesaekki", "jiral", "byeongsin",
1862
+ "michin", "nom", "nyeon", "kkeojieo", "dakchyeo",
1863
+ "jot", "boji", "jaji",
1864
+ ],
1865
+ phrases: [
1866
+ "annyeong haseyo", "kamsahamnida", "mianhamnida",
1867
+ "saranghae yo", "jal meokgesseumnida",
1868
+ "annyeonghi gaseyo", "annyeonghi jumuseyo", "jal ga",
1869
+ "jal ja", "gamsahamnida", "joesong hamnida", "gwaenchanayo",
1870
+ "ne arayo", "mollayo", "saenggak hamnida", "dangnyeonhaji",
1871
+ "munje eopseo", "eotteke jinaeseyo", "mannaseo bangapseumnida",
1872
+ "hana do", "igeo mwoyeyo", "eolma yeyo", "myeotsi yeyo",
1873
+ "eodieseo wasyeoyo", "dowa juseyo",
1874
+ "hangugeo mothaeyo", "yeongeo hal su isseoyo",
1875
+ "hwajangshil eodiyeyo", "jal moreugesseoyo",
1876
+ ],
1877
+ },
1878
+ hi: {
1879
+ words: [
1880
+ // Common romanized Hindi/Hinglish — basics
1881
+ "aap", "tum", "main", "hum", "yeh", "woh", "kya", "kab",
1882
+ "kahan", "kaun", "kyun", "kaise", "kitna", "bahut", "accha",
1883
+ "bura", "namaste", "dhanyavaad", "shukriya", "haan", "nahi",
1884
+ "theek", "chalo", "aaja", "jao", "karo", "bolo", "dekho",
1885
+ "khana", "paani", "ghar", "kaam", "dost", "pyar", "zindagi",
1886
+ "acha", "bilkul", "zaroor", "lekin", "aur",
1887
+ // Pronouns & particles
1888
+ "mujhe", "tujhe", "unhe", "inhe", "isko", "usko", "kisko",
1889
+ "mera", "tera", "uska", "iska", "hamara", "tumhara", "apna",
1890
+ "yahan", "wahan", "kahin", "idhar", "udhar", "ab", "tab",
1891
+ "jab", "kabhi", "koi", "kuch", "sab", "sirf", "par",
1892
+ "se", "ko", "ka", "ki", "ke", "mein", "pe",
1893
+ // Common verbs (romanized)
1894
+ "hona", "karna", "jana", "aana", "dekhna", "bolna", "sunna",
1895
+ "likhna", "padhna", "khana", "peena", "sona", "uthna",
1896
+ "baithna", "chalna", "daurna", "khelnа", "gaana", "nachna",
1897
+ "rona", "hasna", "marna", "jeena", "kholna", "band",
1898
+ "dena", "lena", "rakhna", "bhejnа", "milna", "samajhna",
1899
+ "jaanna", "bhoolna", "yaad", "sikhna", "sikhaana",
1900
+ "maangna", "maarna", "rokna", "dhundhna", "sochna",
1901
+ "chahna", "lagana", "puchna", "batana", "dikhana",
1902
+ // Common nouns (romanized)
1903
+ "log", "duniya", "desh", "shahar", "sadak", "ghar", "vidyalaya",
1904
+ "parivaar", "dost", "naam", "darwaza", "aankh", "sir", "haath",
1905
+ "dil", "shareer", "paani", "paisa", "kitab", "shabd",
1906
+ "itihas", "jung", "taakat", "adhikar", "samasya",
1907
+ "raat", "subah", "shaam", "hafta", "mahina", "saal",
1908
+ "ghanta", "maa", "baap", "bhai", "behen",
1909
+ "beta", "beti", "aadmi", "aurat", "baccha",
1910
+ "samay", "din", "zindagi", "kaam",
1911
+ // Common adjectives (romanized)
1912
+ "acha", "bura", "bada", "chhota", "naya", "purana",
1913
+ "lamba", "chhota", "uncha", "neecha", "mazboot", "kamzor",
1914
+ "tez", "dheema", "sundar", "jawaan", "zaroori",
1915
+ "alag", "sahi", "galat", "azad", "aasan", "mushkil",
1916
+ "khushi", "dukhi", "dara", "swadisht",
1917
+ "garam", "thanda",
1918
+ // Extended Hinglish vocabulary — common everyday words
1919
+ "bohot", "bohut", "yaar", "arre", "arrey", "oye", "abey",
1920
+ "achha", "theekhai", "pakka", "sacchi", "jhooth", "sach",
1921
+ "pagal", "paagal", "mast", "bakwas", "faltu", "bekar",
1922
+ "shaandaar", "zabardast", "kamaal", "lajawab", "shandar",
1923
+ "bindass", "dhamaal", "ekdum", "bilkul", "seedha", "ulta",
1924
+ // Family (romanized)
1925
+ "chacha", "chachi", "mama", "mami", "nana", "nani",
1926
+ "dada", "dadi", "bhabhi", "jija", "devar", "nanad",
1927
+ "sasur", "saas", "bahu", "damad", "rishtedaar",
1928
+ // Food (romanized)
1929
+ "roti", "dal", "daal", "chawal", "sabzi", "sabji",
1930
+ "chai", "doodh", "dudh", "ghee", "atta", "namak",
1931
+ "mirch", "masala", "achar", "raita", "paratha", "puri",
1932
+ "samosa", "pakora", "chaat", "lassi", "paneer",
1933
+ "biryani", "pulao", "halwa", "laddu", "barfi", "mithai",
1934
+ "nashta", "kheer", "chutney", "pappad", "idli", "dosa",
1935
+ // Body (romanized)
1936
+ "haath", "pair", "sar", "pet", "aankh", "kaan",
1937
+ "naak", "muh", "dant", "jibh", "gala", "seena",
1938
+ "kamar", "ghutna", "ungali", "nakhun", "peeth",
1939
+ // Emotions & states (romanized)
1940
+ "khush", "udas", "gussa", "dar", "thak", "bore",
1941
+ "pareshan", "hairaan", "sharminda", "majboor", "bechain",
1942
+ // Nature (romanized)
1943
+ "baarish", "dhoop", "hawa", "badal", "tufaan", "bijli",
1944
+ "nadi", "jheel", "samundar", "pahad", "jungle", "ped",
1945
+ "phool", "ghass", "patta", "mitti", "aasmaan", "tara",
1946
+ "chaand", "suraj", "dharti",
1947
+ // Animals (romanized)
1948
+ "kutta", "billi", "ghoda", "gaay", "bakri", "murgi",
1949
+ "machhli", "saanp", "mendhak", "bandar", "hathi", "sher",
1950
+ "chidiya", "titli", "makdi", "cheenti", "chuha",
1951
+ // Places (romanized)
1952
+ "mandir", "masjid", "gurudwara", "bazaar", "dukaan",
1953
+ "dawakhana", "aspatal", "sthan", "maidan", "chowk",
1954
+ "mohalla", "gali", "nukkad", "haveli", "qila",
1955
+ // Time (romanized)
1956
+ "aaj", "kal", "parso", "abhi", "baad", "pehle",
1957
+ "subah", "dopahar", "shaam", "raat", "saal", "mahina",
1958
+ "hafta", "ghanta", "savaari",
1959
+ // Numbers (romanized)
1960
+ "ek", "do", "teen", "chaar", "paanch", "chhe",
1961
+ "saat", "aath", "nau", "das", "gyarah", "baarah",
1962
+ "bees", "tees", "chaalees", "pachaas", "sau", "hazaar", "lakh",
1963
+ // Days (romanized)
1964
+ "somvaar", "mangalvaar", "budhvaar", "guruvaar",
1965
+ "shukravaar", "shanivaar", "ravivaar",
1966
+ // Clothing (romanized)
1967
+ "kapda", "kurta", "pajama", "sari", "saree", "dupatta",
1968
+ "chunni", "dhoti", "lungi", "chapppal", "juta", "topi",
1969
+ // Colors (romanized)
1970
+ "laal", "neela", "hara", "peela", "kaala", "safed",
1971
+ "gulabi", "narangi", "bhoora",
1972
+ // Common adverbs (romanized)
1973
+ "hamesha", "aksar", "abhi", "phir", "shayad",
1974
+ "sachmuch", "wakai", "filhaal", "warna", "isliye",
1975
+ "akhir", "pehle", "zyada", "kam", "thoda", "kaafi",
1976
+ // Slang & informal Hinglish
1977
+ "jhakaas", "pataka", "chamak",
1978
+ "jugaad", "fundа", "timepass",
1979
+ // Common romanized profanity
1980
+ "chutiya", "bhenchod", "madarchod", "gaandu", "bhosdike",
1981
+ "randi", "saala", "harami", "kamina", "bewakoof", "gadha",
1982
+ "ullu", "bakchod", "lodu", "jhatu", "tatti",
1983
+ ],
1984
+ phrases: [
1985
+ "kya haal hai", "kaise ho", "theek hai", "chalo chalte hain",
1986
+ "teri maa ki", "bhenchod sala",
1987
+ "suprabhat", "shubh raatri", "alvida", "phir milenge",
1988
+ "maaf kijiye", "kripaya", "bahut dhanyavaad", "koi baat nahi",
1989
+ "mujhe nahi pata", "mujhe lagta hai", "bilkul",
1990
+ "koi samasya nahi", "udaharan ke liye", "asal mein",
1991
+ "kabhi kabhi", "hamesha", "kabhi nahi", "abhi",
1992
+ "phir", "pehle", "kam se kam", "iske alawa",
1993
+ "ek minute", "kya matlab", "yaani", "aap kahan se hain",
1994
+ "kya aap meri madad kar sakte hain",
1995
+ "mujhe hindi nahi aati", "kya aap angrezi bolte hain",
1996
+ ],
1997
+ },
1998
+ bn: {
1999
+ words: [
2000
+ // Common romanized Bengali — basics
2001
+ "ami", "tumi", "apni", "she", "eta", "ota", "ki", "keno",
2002
+ "kothay", "kokhon", "ke", "koto", "bhalo", "kharap",
2003
+ "dhonnobad", "haan", "na", "thik", "ache", "koro", "jao",
2004
+ "eso", "dekho", "bolo", "khao", "basha", "bari", "kaj",
2005
+ "bondhu", "bhalobasha", "jibon",
2006
+ // Pronouns & particles
2007
+ "amake", "tomake", "apnake", "take", "tar", "amar", "tomar",
2008
+ "apnar", "oder", "ekhane", "okhane", "kothao", "ekhon", "tokhon",
2009
+ "keu", "kichu", "sob", "shudhu", "theke", "te", "ke", "r",
2010
+ "er", "e", "o", "ar", "ba", "tai",
2011
+ // Common verbs (romanized)
2012
+ "howa", "kora", "jaowa", "asha", "dekha", "bola", "shona",
2013
+ "lekha", "pora", "khawa", "paan", "ghumano", "otha",
2014
+ "bosha", "hata", "doura", "khela", "gaan", "naach",
2015
+ "kanda", "hasha", "mora", "bacha", "khola", "bondho",
2016
+ "deowa", "neowa", "rakha", "pathano", "pawa", "bujha",
2017
+ "jaana", "bhola", "mone", "shekha", "shekhano",
2018
+ "chaowa", "maara", "thama", "khuja", "bhaba",
2019
+ // Common nouns (romanized)
2020
+ "manush", "prithibi", "desh", "shohor", "rasta", "ghor", "biddaloy",
2021
+ "poribar", "bondhu", "naam", "dorja", "chokh", "matha", "haat",
2022
+ "mon", "shorir", "jol", "taka", "boi", "kotha",
2023
+ "itihas", "juddho", "shakti", "odhikar", "shomoshya",
2024
+ "raat", "shokal", "bikel", "soptaho", "maash", "bochor",
2025
+ "ghonta", "maa", "baba", "bhai", "bon",
2026
+ "chhele", "meye", "purush", "mohila", "shishu",
2027
+ "shomoy", "din", "jibon", "kaaj",
2028
+ // Common adjectives (romanized)
2029
+ "bhalo", "kharap", "boro", "chhoto", "notun", "purano",
2030
+ "lomba", "bete", "unchu", "nichu", "shokto", "durbol",
2031
+ "druto", "dhire", "shundor", "jubok", "guruttopurno",
2032
+ "alag", "thik", "bhul", "shadhin", "shohoz", "kothin",
2033
+ "shukhi", "dukhi", "bhoy", "shuad",
2034
+ "gorom", "thanda",
2035
+ // Food (romanized)
2036
+ "ruti", "bhaat", "daal", "torkari", "machh", "murgi", "dim",
2037
+ "chaal", "aloo", "begun", "pyaj", "roshun", "lau", "shim",
2038
+ "narikel", "aam", "kathal", "lichu", "kola", "peyara", "taal",
2039
+ "shondesh", "roshogolla", "mishti", "doi", "payesh", "luchi",
2040
+ "porota", "singara", "jhalmuri", "phuchka", "chop", "nimki",
2041
+ "gur", "lobon", "ghee", "tel", "holud", "morich",
2042
+ "cha", "dudh", "jol", "sherbet", "lassi",
2043
+ // Body (romanized)
2044
+ "haat", "pa", "goda", "haatu", "kadh", "angul",
2045
+ "peeth", "pet", "buk", "gola", "naak", "kaan",
2046
+ "mukh", "thot", "chokh", "kapaal", "chul", "chamra",
2047
+ "haar", "rokto", "moghoj", "peshi", "paakstoli",
2048
+ // Family (romanized)
2049
+ "thakurda", "thakurma", "kaka", "kakima", "mama", "mami",
2050
+ "dadu", "dida", "boudi", "jamai", "pishi", "mesho",
2051
+ "shashuri", "shaashuri", "jamaibabu", "bou", "nati", "natni",
2052
+ // Animals (romanized)
2053
+ "kukur", "biral", "ghora", "goru", "chhagol", "shukоr", "khorgosh",
2054
+ "indur", "bhalluk", "nеkre", "shaap", "byag", "kachim",
2055
+ "timi", "hangor", "cheel", "projapoti", "pipra", "moumachhi",
2056
+ "singho", "bagh", "hathi", "banor", "horin", "sheal",
2057
+ "murgi", "pakhi", "gadha",
2058
+ // Nature (romanized)
2059
+ "brishti", "borf", "batash", "megh", "surjo", "jhor", "bajro",
2060
+ "bijli", "dhonuk", "nodi", "jheel", "sagar", "saikat",
2061
+ "pahar", "tila", "bon", "morubhumi", "dwip", "upotoka",
2062
+ "gaach", "phul", "ghash", "pata", "mul", "bij",
2063
+ "pathor", "baali", "akash", "tara", "chaand", "agun",
2064
+ // Colors (romanized)
2065
+ "laal", "nil", "shobuj", "holud", "kaalo", "shada", "dhusor",
2066
+ "khoiri", "golapi", "beguni", "komla", "sona", "rupa",
2067
+ // Places (romanized)
2068
+ "hashpatal", "uddhan", "dokan", "reshtura",
2069
+ "bimanbondor", "granthagar", "jadughor", "natyoshala",
2070
+ "oshudhghor", "opish", "karkhana", "bajaar", "moydan",
2071
+ "masjid", "mondir", "girja", "rashtaghor", "ghor",
2072
+ "rannaghor", "ghоr", "shnanghor", "baranda",
2073
+ // Numbers (romanized)
2074
+ "shunno", "ek", "dui", "tin", "char", "panch", "chhoy",
2075
+ "shaat", "aat", "noy", "dosh", "shо", "hajar", "lakh",
2076
+ // Days/Time (romanized)
2077
+ "shombar", "mongolbar", "budhbar", "brihoshpotibar", "shukrobar",
2078
+ "shonibar", "robibar", "jaanuari", "phebruari",
2079
+ "sheptember", "boshonto", "grishmo", "borsha",
2080
+ "shorot", "hemonto", "sheet",
2081
+ "poush", "magh", "phalgun", "choitro", "boishakh", "jyoishto",
2082
+ "ashar", "srabon", "bhadro", "ashwin", "kartik", "ogrohayon",
2083
+ "gotokal", "aaj", "aagamikal", "shokal", "dupur", "bikal",
2084
+ // Clothing (romanized)
2085
+ "jaama", "shari", "juta", "topi",
2086
+ "moflar", "dastana", "moja", "poshak",
2087
+ "koti", "chata",
2088
+ // Emotions (romanized)
2089
+ "shukhi", "dukhi", "raag", "bhoy", "klanto", "biroktо",
2090
+ "chintito", "bismito", "gorbioto", "hingsha", "utshahi",
2091
+ "shanto", "tushto", "nirash", "anondo", "bedona",
2092
+ // Transport (romanized)
2093
+ "gari", "biman", "jahaj",
2094
+ "riksha", "nouka", "thellagari", "palki",
2095
+ // Abstract (romanized)
2096
+ "shadhinota", "bichar", "shanti", "bipod", "nirapotta",
2097
+ "shopholota", "byartho", "shopno", "asha", "bhoy",
2098
+ "shukh", "dukh", "bhalobasha", "ghrina", "shahosh", "dhorjo",
2099
+ "bishshash", "shomman", "shundorjo", "shotto", "prodna",
2100
+ // Common verbs (extended romanized)
2101
+ "kena", "bikri", "ranna", "parishkar", "dhoa",
2102
+ "cholano", "bhromon", "shatar", "gaan", "naach", "aka",
2103
+ "siddhanto", "chuna", "bhanga", "jora", "gora", "dhangsha",
2104
+ "protiggya", "koshto", "hasha", "kanna", "chitkar", "fisfish",
2105
+ "jagа", "poshak", "prarthona", "shopno", "ora", "laph",
2106
+ // Common nouns (extended romanized)
2107
+ "aalo", "chhaya", "shobdo", "nirobota", "kolahol", "shongeet",
2108
+ "gaan", "khela", "phutbol", "dol", "dharna", "gupto",
2109
+ "upohar", "chithi", "khobor", "tebil", "chowki",
2110
+ "bichhana", "janala", "ayna", "chabi", "ghori",
2111
+ "botol", "glash", "thala", "chhuri", "kata",
2112
+ "chamoch", "patil", "korai",
2113
+ // Slang & informal (romanized)
2114
+ "dada", "didi", "bondhura", "ki rе", "arre", "orey",
2115
+ "joss", "fatafati", "darun", "bhishon", "maarattok", "durdanto",
2116
+ "ashchhorjo", "baaje", "gyachho", "bakwaash", "paka", "aabol",
2117
+ // Common romanized profanity
2118
+ "chuda", "banchod", "maagi", "shala", "haramzada",
2119
+ "bokachoda", "khanki", "nongra", "gadha", "chagol",
2120
+ ],
2121
+ phrases: [
2122
+ "kemon acho", "bhalo achi", "ki holo",
2123
+ "shuprovat", "shubho ratri", "abar dekha hobe",
2124
+ "maaf korben", "doya kore", "onek dhonnobad", "kichu na",
2125
+ "ami jani na", "ami mone kori", "obosshoi",
2126
+ "kono shomoshya nei", "udahoron shworup", "ashore",
2127
+ "moddhe moddhe", "shob shomoy", "kokhono na", "ekhon",
2128
+ "tar por", "age", "kom pokkhey", "tachara",
2129
+ "ek minute", "ki mane", "mane", "apni kothai theke",
2130
+ "apni ki amake shahajjo korte parben",
2131
+ ],
2132
+ },
2133
+ ta: {
2134
+ words: [
2135
+ // Common romanized Tamil — basics
2136
+ "naan", "nee", "avar", "ival", "enna", "yenna", "yen",
2137
+ "enga", "yeppadi", "evvalavu", "yaaru", "eppothu",
2138
+ "nandri", "vanakkam", "aam", "illai", "sari",
2139
+ "saapidu", "paar", "poo", "vaa", "sollu",
2140
+ "veedu", "velai", "nanbaa", "anbu", "vazhkai",
2141
+ // Pronouns & particles
2142
+ "enakku", "unakku", "avarukku", "ivalukku", "avan", "aval",
2143
+ "avanga", "idu", "adu", "inga", "anga", "yaaravadhu",
2144
+ "edhaavadhu", "ellaam", "mattum", "irundhu", "ku", "il",
2145
+ "udaiya", "oda", "um", "aa", "oh", "pola",
2146
+ // Common verbs (romanized)
2147
+ "irukka", "seyya", "poga", "vara", "paarkka", "solla", "ketkka",
2148
+ "ezhudha", "padikka", "saapida", "kudikka", "thoonga", "ezhundha",
2149
+ "ukkaara", "nadakka", "oda", "vilayaada", "paada", "aada",
2150
+ "azhа", "sirikka", "saaga", "vaazha", "thora", "mooda",
2151
+ "kodukka", "vaanga", "vaikka", "anuppa", "kidaikka", "puriya",
2152
+ "theriya", "marakka", "nyaabagam", "katrukkol", "katrukodukka",
2153
+ "virumbu", "adi", "niruthu", "thedа", "yoasi",
2154
+ // Common nouns (romanized)
2155
+ "manidhan", "ulagam", "naadu", "nagar", "sadhai", "veedu", "palli",
2156
+ "kudumbam", "nanban", "peyar", "kadhavu", "kann", "thalai", "kai",
2157
+ "manam", "udambu", "thanni", "panam", "puttagam", "vaarthai",
2158
+ "varalaru", "poar", "valimai", "urimai", "pirachani",
2159
+ "iravu", "kaalai", "maalai", "vaaram", "maatham", "varudam",
2160
+ "mani", "nimisham", "amma", "appa", "annan", "akka",
2161
+ "thambi", "thangai", "magan", "magal", "aan", "pen",
2162
+ "kuzhanthai", "neram", "naal", "vazhkai", "velai",
2163
+ // Common adjectives (romanized)
2164
+ "nalla", "kettа", "periya", "sinna", "pudhu", "pazhaya",
2165
+ "neenda", "kutta", "uyara", "thazha", "valimaiyana", "palaminana",
2166
+ "vegamana", "medhuva", "azhagana", "ilamayana", "mukkiyamana",
2167
+ "verupatta", "sariyaana", "thavaru", "sudhandhiramana",
2168
+ "sulabam", "kadinam", "sandhosham", "thukkam", "bayam",
2169
+ "suvai", "soodu", "kulir",
2170
+ // Food (romanized)
2171
+ "saadham", "sambar", "rasam", "koozhambu", "poriyal", "thosai",
2172
+ "idli", "vadai", "appam", "pongal", "uppuma", "biryani",
2173
+ "parotta", "kothu", "murukku", "laddu", "payasam", "halwa",
2174
+ "puttu", "avial", "pachadi", "thayir", "ney", "thengai",
2175
+ "pal", "theneer", "kaapi", "chaaya", "mor", "panneer",
2176
+ "meen", "kozhi", "mutton", "aattu", "eral", "nandu",
2177
+ "arisi", "kadalai", "paruppu", "vengaayam", "thakkali", "poondu",
2178
+ "milagu", "manjal", "uppu", "sakkarai", "elumichai",
2179
+ "vazhaipazham", "maadhulai", "manga", "palaa",
2180
+ // Body (romanized)
2181
+ "kai", "kaal", "paadham", "muzhankai", "thol", "viral",
2182
+ "muthu", "vayiru", "maarbu", "kazhthu", "mooku", "kaadhu",
2183
+ "vaai", "udhadhu", "mugam", "netri", "mudhi", "thol",
2184
+ "elumbu", "ratham", "moolai", "thasai", "vayiru",
2185
+ // Family (romanized)
2186
+ "thatha", "paatti", "periappa", "periamma", "chitappa", "chithhi",
2187
+ "mama", "maami", "athaan", "atthai", "maamanaar", "mamaiyaar",
2188
+ "mapillai", "marumgal", "paiyan", "ponnu", "kuzhanthai",
2189
+ "kanaavan", "manaivi", "nishayathaarar",
2190
+ // Animals (romanized)
2191
+ "naai", "poonai", "kuthirai", "maadu", "aadu", "panni", "muyal",
2192
+ "eli", "karadi", "onaan", "paambu", "thavulai", "aamai",
2193
+ "thimichangkalam", "sura", "parundhu", "vannathu", "erumbu", "thenu",
2194
+ "singam", "puli", "yaanai", "kurangu", "maan", "nari",
2195
+ "kozhi", "paravai",
2196
+ // Nature (romanized)
2197
+ "mazhai", "pani", "kaatru", "mugil", "suriyan", "puyal", "idhi",
2198
+ "minnalrai", "vaanvillu", "aaru", "eri", "kadal", "kadarkkarai",
2199
+ "malai", "kunru", "kaadu", "paalaivnam", "theevu", "pallathaakku",
2200
+ "maram", "poo", "pul", "ilai", "ver", "vidhai",
2201
+ "kal", "manal", "vaanam", "natchathiram", "nilavau", "neruppu",
2202
+ // Colors (romanized)
2203
+ "sivappu", "neelam", "pachai", "manjal", "karuppu", "vellai",
2204
+ "saamai", "kaapi", "ilaneer", "oodha", "orange", "thangam", "velli",
2205
+ // Places (romanized)
2206
+ "marundhagam", "poonga", "kadai", "unavagam", "vidhudhi",
2207
+ "nilaiyam", "vimaana", "noolakam", "arangam", "naadakam",
2208
+ "marundhukadai", "vangi", "aluvalakam", "thozhirsaalai",
2209
+ "sandhai", "maidaanam", "koyil", "pallivasal", "sarchchi",
2210
+ "samayalarai", "padukkai", "kuliyal", "thottam",
2211
+ // Numbers (romanized)
2212
+ "poojiyam", "onru", "irandu", "moondru", "naangu", "ainthu",
2213
+ "aaru", "ezhu", "ettu", "onbadhu", "paththu", "nooru", "aayiram", "latcham",
2214
+ // Days/Time (romanized)
2215
+ "thingal", "chevvaai", "pudhan", "viyaazhan", "velli",
2216
+ "sani", "nyaayiru", "thai", "maasi", "panguni", "chithirai",
2217
+ "vaigaasi", "aani", "aadi", "aavani", "purattaasi",
2218
+ "aippasi", "kaarthigai", "maargazhi",
2219
+ "netru", "indru", "naalai", "kaalaiyil", "mathiyam", "maalai",
2220
+ // Clothing (romanized)
2221
+ "sattai", "pavadai", "chappal", "thoppi",
2222
+ "thundu", "udai", "pai", "kudai",
2223
+ // Emotions (romanized)
2224
+ "makizhchi", "varudham", "koapam", "bayam", "aayavu", "adippu",
2225
+ "padhattam", "viyappu", "perumai", "poramai", "aarvam",
2226
+ "amaidhi", "nirai", "ayarchi", "kavalai", "kashtam",
2227
+ // Transport (romanized)
2228
+ "vandi", "mithivandi", "vimanam", "kappal",
2229
+ "padagu", "vandy", "rikshaw",
2230
+ // Abstract (romanized)
2231
+ "sudhanthiram", "needhi", "amaidhi", "aabathu", "paadhugappu",
2232
+ "vetri", "tholvi", "kanavu", "nambikkai", "achham",
2233
+ "magizhchi", "thukkam", "kaadhal", "veruppu", "dhairyam", "porumai",
2234
+ "nambikkai", "mariyaadhai", "azhagu", "unmai", "gnanam",
2235
+ // Common verbs (extended romanized)
2236
+ "vaangu", "vilai", "samaikka", "sutham", "kazhuvu",
2237
+ "otu", "payanam", "neentha", "paadu", "aadu", "varai",
2238
+ "mudivau", "thervu", "udai", "pazhudhu", "kattapodu", "azhikka",
2239
+ "vaakku", "thunbam", "siri", "azhu", "koochu", "kisumusu",
2240
+ "vizhippu", "uduthu", "vanagu", "kanavu", "yeru", "kuthippu",
2241
+ // Common nouns (extended romanized)
2242
+ "oli", "nizhal", "kural", "amaidhi", "sathham", "isai",
2243
+ "paadal", "vilayaattu", "panthu", "ani", "yoosanai", "ragasiyam",
2244
+ "parisau", "kaditham", "seydhi", "tholaipaesi",
2245
+ "maesai", "naarkkaali", "kattil", "jannal", "kannadi", "saavi",
2246
+ "manikoodam", "pudial", "tumbler", "thattu", "kathi",
2247
+ "karandi", "kinnaam", "paanai", "vaanali",
2248
+ // Slang & informal (romanized)
2249
+ "machaan", "macchi", "nanba", "thalaivaa", "dei", "di",
2250
+ "poda", "podi", "seri", "sappa", "mass", "kalaakkal",
2251
+ "semma", "theriyadhu", "romba", "kastam", "mokka", "scene",
2252
+ // Common romanized profanity
2253
+ "thevdiya", "thevidiya", "otha", "pundai", "punda",
2254
+ "soothu", "mayiru", "baadu", "loosu", "mokka",
2255
+ "kena", "pottai",
2256
+ ],
2257
+ phrases: [
2258
+ "eppadi irukeenga", "nalla irukken", "enna achu",
2259
+ "kaalai vanakkam", "iravu vanakkam", "meedum sandippom",
2260
+ "mannikkavum", "thayavu seidhu", "romba nandri", "paravaillai",
2261
+ "enakku theriyaadhu", "naan nenaikkireen", "nishchayamaga",
2262
+ "onnum pirachani illai", "udaaranamaga", "unmaiyil",
2263
+ "sila samayam", "eppothum", "eppothum illai", "ippo",
2264
+ "appuram", "munnaadi", "kuraindhapatcham", "thavira",
2265
+ "oru nimisham", "enna artham", "adhaavathu",
2266
+ "nee enga irundhu varee", "enakku tamizh theriyaadhu",
2267
+ "ungalukku english theriyuma",
2268
+ ],
2269
+ },
2270
+ te: {
2271
+ words: [
2272
+ // Common romanized Telugu — basics
2273
+ "nenu", "nuvvu", "meeru", "adi", "idi", "enti", "enduku",
2274
+ "ekkada", "eppudu", "evaru", "entha", "manchidi", "chedda",
2275
+ "dhanyavaadalu", "namaskaram", "avunu", "ledu", "sare",
2276
+ "tinu", "choodandi", "vellu", "raa", "cheppu",
2277
+ "illu", "pani", "snehithudu", "prema", "bratuku",
2278
+ // Pronouns & particles
2279
+ "naaku", "neeku", "ataniki", "aameki", "atanu", "aame",
2280
+ "vaallam", "idi", "adi", "ikkada", "akkada", "evaraina",
2281
+ "edaina", "antha", "matrame", "nundi", "ki", "lo",
2282
+ "yokka", "tho", "kuda", "aa", "ee", "laga",
2283
+ // Common verbs (romanized)
2284
+ "undи", "cheyyi", "vellu", "raa", "choodu", "cheppu", "vinu",
2285
+ "raayи", "chaduvи", "tinu", "taagu", "nidrapо", "lechu",
2286
+ "kurchо", "naduchи", "parugettи", "aadu", "paadu", "aaду",
2287
+ "yedu", "navvu", "chanipoyu", "bratuku", "teruvu", "muyyu",
2288
+ "ivvu", "teesukoniu", "pettu", "pampu", "doruku", "artham",
2289
+ "telusu", "marchipо", "gurtundi", "nerchukoniu", "nerpinchu",
2290
+ "ishtapadи", "koddu", "aapu", "vetuku", "aalochinchu",
2291
+ // Common nouns (romanized)
2292
+ "manishi", "prapancham", "desham", "nagaram", "daari", "illu",
2293
+ "badi", "kutumbam", "snehithudu", "peru", "talupu", "kannu",
2294
+ "tala", "chettu", "manasu", "shareeram", "neellu", "dabbu",
2295
+ "pustakam", "padham", "charitra", "yuddham", "balam",
2296
+ "hakku", "samasya", "raatri", "udayam", "sayantram",
2297
+ "vaaram", "nelа", "samvatsaram", "ganta", "nimisham",
2298
+ "amma", "nanna", "anna", "akka", "tammudu", "chelli",
2299
+ "koduku", "kooturu", "purushуdu", "aadadi", "pillalu",
2300
+ "samayam", "roju", "bratuku", "pani",
2301
+ // Common adjectives (romanized)
2302
+ "manchidi", "chedda", "pedda", "chinna", "kotta", "paata",
2303
+ "podu", "pottiga", "ekkuva", "takkuva", "balam", "balavantam",
2304
+ "vegam", "mellaga", "andamaina", "yuvakudu", "mukhyam",
2305
+ "verupаtta", "saraina", "tappu", "sweccha", "sulabham",
2306
+ "kashtam", "santosham", "baadha", "bhayam", "ruchi",
2307
+ "vedi", "challagа",
2308
+ // Food (romanized)
2309
+ "annam", "pappu", "pulusu", "kura", "perugu", "upma",
2310
+ "pesarattu", "garelu", "boorelu", "pootharekulu", "pulihora",
2311
+ "gongura", "avakaya", "pachadi", "gutti", "neyyi", "kobbari",
2312
+ "paalu", "neellu", "kaaram", "uppu", "bellam", "nimmakaya",
2313
+ "aratipandu", "mamidipandu", "draksha", "puchakaya",
2314
+ "kodiguddu", "mamsam", "chepalu", "royalu", "pitta",
2315
+ "biyyam", "sanagalu", "ulligadda", "vellulli",
2316
+ "miriyalu", "pasupu", "jeelakarra", "aavalu",
2317
+ // Body (romanized)
2318
+ "cheyyi", "kaalu", "paadham", "mokalu", "bhujam", "velu",
2319
+ "veepu", "pottа", "rathe", "meda", "mukku", "chevi",
2320
+ "noru", "pedavi", "moham", "nethi", "juttu", "charma",
2321
+ "yemuka", "raktham", "medadu", "kanda", "kalеju",
2322
+ // Family (romanized)
2323
+ "thaatha", "ammamma", "babai", "pinni", "mamayya", "aththa",
2324
+ "alludu", "kodalu", "abbayi", "ammayi", "bidda",
2325
+ "bharthа", "bhaarya", "pellam", "mogudu",
2326
+ // Animals (romanized)
2327
+ "kukka", "pilli", "gurrаm", "aavu", "meeka", "pandi", "kundelu",
2328
+ "yeluka", "yalugu", "thodеlu", "paamu", "kappa", "taaboelu",
2329
+ "thimingalam", "sura", "gadda", "seethakoka", "cheema", "thenеtiga",
2330
+ "simham", "puli", "yeenugu", "kothe", "ledi", "nakka",
2331
+ "kodi", "pitta",
2332
+ // Nature (romanized)
2333
+ "varsham", "manci", "gaali", "megham", "suriyudu", "tufaan",
2334
+ "urupulu", "merupu", "indradhanus", "yeru", "cheruvu", "samudram",
2335
+ "kondalа", "guttа", "adavi", "yеdari", "dweepam", "loya",
2336
+ "chettu", "puvvu", "gaddi", "aaku", "veru", "vittanam",
2337
+ "raayi", "isuka", "aakasham", "nakshathram", "chandrudu", "nippu",
2338
+ // Colors (romanized)
2339
+ "yеrra", "neelam", "aakupaccha", "pasupu", "nalla", "thella",
2340
+ "boodida", "kaapi", "gulabi", "oodha", "narangi", "bangаru", "vendi",
2341
+ // Places (romanized)
2342
+ "aaspathri", "udyaanavanam", "kadai", "bhojanam", "satram",
2343
+ "railnilayam", "vimaanam", "granthalayam", "vasthupradarsana",
2344
+ "naatakam", "chitrаm", "mаndula", "karyaalayam",
2345
+ "karmagaram", "santhа", "maidanam", "gudi", "masjid",
2346
+ "vantillu", "padakagadi", "snaanam", "thota",
2347
+ // Numbers (romanized)
2348
+ "sunna", "okati", "rendu", "moodu", "naalugu", "aidu",
2349
+ "aaru", "yedu", "yеnimidi", "thommidi", "padhi", "vandа", "veyyi", "laksham",
2350
+ // Days/Time (romanized)
2351
+ "somavаram", "mangalavаram", "budhavаram", "guruvаram", "sukravаram",
2352
+ "sanivаram", "aadivаram",
2353
+ "niinna", "eeroju", "rеpu", "poddhunnа", "madhyaahnam", "saayаntram",
2354
+ // Clothing (romanized)
2355
+ "chokka", "pаntlaam", "lаnga", "chеtlu", "toppi",
2356
+ "kandhuvaa", "чaddaar", "duppata", "voni",
2357
+ // Emotions (romanized)
2358
+ "santoosham", "baadha", "kоpam", "bhаyam", "аlаsyam",
2359
+ "visuugu", "аandolana", "aashcharyam", "garvam", "irsha",
2360
+ "uthsaaham", "shаanthi", "thrupti", "niraasha",
2361
+ // Transport (romanized)
2362
+ "bandi", "railu", "bussu", "vimaanam", "оdа",
2363
+ "rikshaa", "pаdаvu",
2364
+ // Abstract (romanized)
2365
+ "swеcchа", "nyаayam", "shаanthi", "prаmaadam", "rаksha",
2366
+ "vijayam", "aparajayam", "kаlа", "аashа", "bhаyam",
2367
+ "aanаndam", "dukhаm", "prеma", "dwеsham", "dhаiryam", "opsikа",
2368
+ "nаmmikа", "gаurаvam", "аndаm", "sаtyam", "viveekаm",
2369
+ // Common verbs (extended romanized)
2370
+ "kondu", "ammаkam", "vаndа", "shubhram", "kаdugu",
2371
+ "nаdаpu", "prаyааnam", "ееtа", "paаtа", "аatа", "bоmmа",
2372
+ "nirdааrinchu", "yеnchukо", "viruvu", "bааgu", "nirminchu",
2373
+ "vaаgdааnam", "bааdhа", "nаvvu", "yеdvu", "аruvu", "gusа",
2374
+ "lеchu", "dhаrinchu", "prаrthinchu", "kаlаlu", "yеkku", "duuku",
2375
+ // Common nouns (extended romanized)
2376
+ "vеlugu", "needa", "kаntham", "nishshаbdаm", "dhvаni", "sаngeetam",
2377
+ "pааtа", "ааtа", "bааlu", "jаttu", "аalochаnа", "rаhаsyam",
2378
+ "bаhumааnam", "uttаrаm", "sаndеsham", "phоnu",
2379
+ "bаllа", "kurchi", "mаnchаm", "kitiki", "аddаm", "tааlu",
2380
+ "gаdiуааram", "seesа", "glааsu", "plааtu", "kаthi",
2381
+ "chаmchа", "kаppu", "ginnе",
2382
+ // Slang & informal (romanized)
2383
+ "rаа", "rааndі", "bааbu", "аnnа", "аkkа", "chааlа",
2384
+ "еnthа", "аrе", "оrеy", "оrеy", "bhаyуа", "mаchаa",
2385
+ "supеr", "bааgа", "аdіri", "pаdаk", "jоru", "gаttіgа",
2386
+ // Common romanized profanity
2387
+ "dengey", "lanja", "pooku", "sulli", "modda",
2388
+ "gudda", "donga", "vennakka", "erri", "puka",
2389
+ ],
2390
+ phrases: [
2391
+ "ela unnaru", "baagunnanu", "emi ayyindi",
2392
+ "subhodayam", "shubha raatri", "malli kaluddaam",
2393
+ "kshaminchaandi", "dayachesi", "chala dhanyavaadalu",
2394
+ "parledu", "naaku teliyadu", "nenu anukuntunnanu",
2395
+ "tappakunda", "emi samasya ledu", "udaaharanaku", "nijaaniki",
2396
+ "konni saarlu", "eppudu", "eppudu kaadu", "ippudu",
2397
+ "tarvata", "mundhu", "kaaneesam", "adhe kaakunda",
2398
+ "oka nimisham", "artham enti", "anagaa",
2399
+ "meeru ekkada nundi", "meeru naaku sahayam cheyagalara",
2400
+ ],
2401
+ },
2402
+ sv: {
2403
+ words: [
2404
+ // Articles, prepositions, conjunctions
2405
+ "och", "i", "att", "det", "som", "en", "på", "är", "av", "för",
2406
+ "med", "den", "till", "inte", "har", "ett", "om", "kan", "från",
2407
+ "var", "men", "ska", "vi", "alla", "utan", "eller", "efter",
2408
+ "redan", "mot", "hos", "under", "genom", "mellan", "över",
2409
+ "vid", "innan", "sedan", "bland", "enligt",
2410
+ // Pronouns
2411
+ "jag", "du", "han", "hon", "hen", "vi", "ni", "de", "dem",
2412
+ "sig", "min", "din", "sin", "vår", "er", "deras", "mitt", "ditt",
2413
+ "sitt", "vårt", "ert", "mig", "dig", "oss",
2414
+ "denna", "detta", "dessa", "vilken", "vilket", "vilka",
2415
+ "ingen", "inget", "inga", "någon", "något", "några",
2416
+ "varje", "alla", "annan", "annat", "andra",
2417
+ // Common verbs
2418
+ "vara", "ha", "göra", "kunna", "vilja", "bli", "komma", "gå",
2419
+ "se", "ge", "ta", "säga", "finnas", "stå", "behöva", "veta",
2420
+ "tro", "tycka", "tänka", "börja", "leva", "lägga", "köra",
2421
+ "äta", "dricka", "sova", "arbeta", "hjälpa", "heta", "läsa",
2422
+ "skriva", "prata", "berätta", "höra", "lyssna", "titta",
2423
+ "springa", "simma", "hoppa", "kasta", "fånga", "bryta",
2424
+ "bygga", "laga", "köpa", "sälja", "betala", "lära",
2425
+ "studera", "resa", "besöka", "bära", "dra", "lyfta",
2426
+ "stänga", "öppna", "städa", "sjunga", "dansa", "måla",
2427
+ "rita", "leka", "skratta", "le", "gråta", "välja",
2428
+ "glömma", "minnas", "älska", "hata", "förstå", "sakna",
2429
+ "försöka", "lyckas", "misslyckas", "förklara", "bestämma",
2430
+ "betyda", "använda", "tillhöra", "följa", "leda",
2431
+ // Common nouns
2432
+ "tid", "år", "dag", "barn", "kvinna", "man", "del", "land",
2433
+ "stad", "hem", "hus", "rum", "fråga", "pengar", "hand",
2434
+ "liv", "sida", "vatten", "huvud", "öga", "ord", "bok",
2435
+ "skola", "familj", "vän", "namn", "väg", "kyrka", "natt",
2436
+ "morgon", "kväll", "vecka", "månad", "timme", "minut",
2437
+ "mamma", "pappa", "bror", "syster", "son", "dotter",
2438
+ "hjärta", "dörr", "kropp", "historia", "grupp",
2439
+ "exempel", "problem", "orsak", "rätt", "kraft",
2440
+ // Family
2441
+ "farbror", "morbror", "faster", "moster", "kusin",
2442
+ "farfar", "farmor", "morfar", "mormor", "make", "maka",
2443
+ "flickvän", "pojkvän", "granne",
2444
+ // Food & drink
2445
+ "frukost", "lunch", "middag", "bröd", "mjölk", "ost",
2446
+ "smör", "ägg", "ris", "kött", "kyckling", "fisk", "frukt",
2447
+ "grönsak", "soppa", "sallad", "kaka", "kaffe", "te",
2448
+ "socker", "salt", "peppar", "potatis", "lök", "vitlök",
2449
+ "äpple", "päron", "jordgubbe", "druva", "korv", "sylt",
2450
+ "honung", "öl", "vin", "juice", "godis", "glass",
2451
+ // Days, months, seasons
2452
+ "måndag", "tisdag", "onsdag", "torsdag", "fredag",
2453
+ "lördag", "söndag", "januari", "februari", "mars", "april",
2454
+ "maj", "juni", "juli", "augusti", "september", "oktober",
2455
+ "november", "december", "vår", "sommar", "höst", "vinter",
2456
+ // Numbers
2457
+ "noll", "ett", "två", "tre", "fyra", "fem", "sex", "sju",
2458
+ "åtta", "nio", "tio", "elva", "tolv", "tjugo", "trettio",
2459
+ "fyrtio", "femtio", "hundra", "tusen",
2460
+ // Body parts
2461
+ "arm", "ben", "fot", "knä", "axel", "finger", "rygg",
2462
+ "mage", "bröst", "hals", "näsa", "öra", "mun", "tand",
2463
+ "läpp", "panna", "hår", "hud", "skelett", "blod", "hjärna",
2464
+ // Nature & weather
2465
+ "regn", "snö", "vind", "moln", "sol", "storm", "åska",
2466
+ "blixt", "flod", "sjö", "hav", "strand", "berg", "skog",
2467
+ "öken", "ö", "träd", "blomma", "gräs", "löv", "sten",
2468
+ "himmel", "stjärna", "måne",
2469
+ // Animals
2470
+ "hund", "katt", "fågel", "häst", "ko", "får", "gris",
2471
+ "kanin", "mus", "björn", "varg", "orm", "groda",
2472
+ "sköldpadda", "val", "örn", "fjäril", "myra", "älg", "räv",
2473
+ // Places
2474
+ "flygplats", "sjukhus", "bibliotek", "station", "marknad",
2475
+ "butik", "apotek", "bageri", "kök", "sovrum",
2476
+ "badrum", "trädgård", "balkong", "trappa", "kontor", "fabrik",
2477
+ // Clothing
2478
+ "skjorta", "byxor", "klänning", "kjol", "jacka", "kappa",
2479
+ "sko", "stövel", "hatt", "halsduk", "vante", "bälte", "väska",
2480
+ // Abstract
2481
+ "frihet", "rättvisa", "fred", "fara", "säkerhet",
2482
+ "framgång", "dröm", "hopp", "rädsla", "glädje", "sorg",
2483
+ "kärlek", "hat", "lycka", "olycka", "mod", "tålamod",
2484
+ "förtroende", "respekt", "skönhet", "sanning", "visdom",
2485
+ // Words with å, ä, ö (strong Swedish discriminators)
2486
+ "ärlig", "överraskning", "öppen", "möjlighet", "rörelse",
2487
+ "förändring", "nödvändig", "självständig", "väldigt",
2488
+ "märklig", "oändlig", "verkställa", "årsdag", "tåg",
2489
+ "ålderdom", "ögonblick", "ärende", "övning", "äventyr",
2490
+ "önskan", "örfil", "åsikt", "ängel", "ödmjuk", "ärr",
2491
+ "förmåga", "möjligen", "nödvändigt", "förhållande",
2492
+ "förståelse", "överens", "allmän", "dålig", "grå",
2493
+ "häftig", "jättebra", "självklart", "säker", "ärligt",
2494
+ // Common adjectives
2495
+ "bra", "dålig", "stor", "liten", "ny", "gammal", "lång", "kort",
2496
+ "hög", "låg", "stark", "svag", "snabb", "långsam",
2497
+ "vacker", "viktig", "rätt", "fel", "fri", "full", "tom",
2498
+ "möjlig", "nödvändig", "klar", "enkel", "svår",
2499
+ "olika", "särskild", "egen", "hel", "halv", "enda",
2500
+ "mörk", "ljus", "varm", "kall", "het", "blöt", "torr",
2501
+ "ren", "smutsig", "billig", "dyr", "rik", "fattig",
2502
+ "tjock", "tunn", "bred", "trång", "djup", "flat", "slät",
2503
+ "mjuk", "hård", "söt", "sur", "skarp",
2504
+ "god", "underbar", "hemsk", "fantastisk", "rolig",
2505
+ "tråkig", "spännande", "lugn", "nervös", "stolt",
2506
+ "generös", "vänlig", "dum", "klok",
2507
+ // Colors
2508
+ "röd", "blå", "grön", "gul", "svart", "vit", "grå",
2509
+ "brun", "rosa", "lila", "orange", "gyllene", "silver",
2510
+ // Common adverbs
2511
+ "redan", "alltid", "igen", "mycket", "här", "där",
2512
+ "nu", "idag", "igår", "imorgon", "sedan", "kanske",
2513
+ "exakt", "verkligen", "faktiskt", "egentligen",
2514
+ "särskilt", "dessutom", "ändå", "därför",
2515
+ "först", "slutligen", "äntligen",
2516
+ "förmodligen", "tydligen", "uppenbarligen",
2517
+ "genast", "ibland", "aldrig", "ovanför", "nedanför",
2518
+ "vänster", "höger", "ute", "inne", "någonstans",
2519
+ "överallt", "ingenstans",
2520
+ // Discourse particles (strong Swedish markers)
2521
+ "ju", "väl", "nog", "visst", "liksom", "typ", "alltså",
2522
+ "ja", "nej", "tack", "snälla", "hej", "hejdå",
2523
+ "varsågod", "ursäkta", "förlåt", "absolut",
2524
+ // Words that collide with English profanity (critical for disambiguation)
2525
+ "slut", "slutet", "slutar", "slutade", "slutat", "slutligen",
2526
+ "slutsats", "slutstation", "avsluta", "avslutning",
2527
+ "fart", "farten", "farthinder", "fartgräns",
2528
+ "prick", "pricken", "prickar", "prickig",
2529
+ "kock", "kocken", "kockar",
2530
+ "slag", "slaget", "slagen",
2531
+ "fack", "facket", "facklig",
2532
+ "bra", "bättre", "bäst",
2533
+ "hell", "heller",
2534
+ ],
2535
+ phrases: [
2536
+ "hur mår du", "god morgon", "vad är det", "var är",
2537
+ "hur mycket kostar", "vad kostar", "hur dags", "varifrån kommer",
2538
+ "kan du", "trevligt att", "jag är", "god dag", "god kväll",
2539
+ "god natt", "hej då", "vi ses", "förlåt", "ursäkta mig",
2540
+ "var så god", "tack så mycket", "jag vet inte", "jag tror",
2541
+ "naturligtvis", "inga problem", "till exempel", "det finns",
2542
+ "jag vill", "jag skulle vilja", "det vill säga", "i alla fall",
2543
+ "tvärtom", "framför allt", "efter hand", "så snart som möjligt",
2544
+ "enligt min mening", "vad för en", "hur sa",
2545
+ "jag förstår", "det gör mig ledsen", "desto bättre",
2546
+ ],
2547
+ },
2548
+ };
2549
+ // ---------------------------------------------------------------------------
2550
+ // Language Trie — per-language vocabulary trie with partial match scoring
2551
+ // ---------------------------------------------------------------------------
2552
+ export class LangTrieNode {
2553
+ constructor() {
2554
+ this.children = new Map();
2555
+ this.isEndOfWord = false;
2556
+ /** Number of accents stripped if this end-of-word is a stripped variant (0 = original) */
2557
+ this.strippedAccentCount = 0;
2558
+ /** Length of the shortest complete word reachable from this node (including self) */
2559
+ this.minWordLen = Infinity;
2560
+ }
2561
+ }
2562
+ /** Strip all accents/diacritics from a string, returning the ASCII form.
2563
+ * e.g. 'gürültü' → 'gurultu', 'straße' → 'strasse' */
2564
+ export function stripAccents(s) {
2565
+ let result = "";
2566
+ for (const ch of s) {
2567
+ const normalized = ch.normalize("NFD");
2568
+ const base = normalized.replace(/[\u0300-\u036f]/g, "");
2569
+ if (base !== ch && base.length >= 1) {
2570
+ result += base;
2571
+ }
2572
+ else {
2573
+ // Special chars not covered by NFD
2574
+ const special = {
2575
+ "ß": "ss", "ø": "o", "æ": "ae", "œ": "oe",
2576
+ "đ": "d", "ł": "l", "ħ": "h",
2577
+ };
2578
+ result += special[ch] || ch;
2579
+ }
2580
+ }
2581
+ return result;
2582
+ }
2583
+ /** Count how many characters in a word have accents that would be stripped. */
2584
+ export function countStrippedAccents(word) {
2585
+ let count = 0;
2586
+ for (const ch of word) {
2587
+ const stripped = stripAccents(ch);
2588
+ if (stripped !== ch)
2589
+ count++;
2590
+ }
2591
+ return count;
2592
+ }
2593
+ /** Per-accent-stripped-char penalty. Compounds: 2 accents = 0.9025, 3 = 0.857, etc. */
2594
+ export const ACCENT_PENALTY_PER_CHAR = 0.95;
2595
+ /**
2596
+ * Per-language trie for efficient vocabulary matching with partial match scoring.
2597
+ *
2598
+ * Supports:
2599
+ * - Exact match → score 1.0
2600
+ * - Input is prefix of a trie word → score = inputLen / trieWordLen
2601
+ * - Trie word is prefix of input → score = trieWordLen / inputLen
2602
+ * - Input falls off partway → matchedChars / inputLen
2603
+ * - Accent-tolerant matching: for words with len > 3, both the original and
2604
+ * accent-stripped version are inserted. Stripped versions carry a compounding
2605
+ * penalty (0.95^numStrippedChars). "gurultu" matches the stripped variant of
2606
+ * "gürültü" with penalty 0.95^3 ≈ 0.857.
2607
+ */
2608
+ export class LanguageTrie {
2609
+ constructor() {
2610
+ this.root = new LangTrieNode();
2611
+ }
2612
+ /** Insert a word into the trie. If it contains accents and len > 3,
2613
+ * also insert the accent-stripped version with penalty based on number stripped. */
2614
+ addWord(word) {
2615
+ const lower = word.toLowerCase();
2616
+ this._insert(lower, 0);
2617
+ // For words longer than 3 chars, also insert accent-stripped variant
2618
+ if (lower.length > 3) {
2619
+ const stripped = stripAccents(lower);
2620
+ if (stripped !== lower) {
2621
+ // Count how many characters actually changed
2622
+ const accentCount = countStrippedAccents(lower);
2623
+ this._insert(stripped, accentCount);
2624
+ }
2625
+ }
2626
+ }
2627
+ _insert(lower, accentCount) {
2628
+ let node = this.root;
2629
+ for (const ch of lower) {
2630
+ if (!node.children.has(ch)) {
2631
+ node.children.set(ch, new LangTrieNode());
2632
+ }
2633
+ node = node.children.get(ch);
2634
+ node.minWordLen = Math.min(node.minWordLen, lower.length);
2635
+ }
2636
+ // Don't overwrite a real (non-stripped) entry with a stripped variant
2637
+ if (node.isEndOfWord && node.strippedAccentCount === 0 && accentCount > 0) {
2638
+ // Already have an exact entry, skip
2639
+ }
2640
+ else {
2641
+ node.isEndOfWord = true;
2642
+ node.strippedAccentCount = accentCount;
2643
+ }
2644
+ node.minWordLen = lower.length;
2645
+ }
2646
+ /**
2647
+ * Score a word against this trie (0–1).
2648
+ *
2649
+ * Walk the word through the trie character by character:
2650
+ * - Exact match → 1.0 (or 1.0 × penalty if matched a stripped variant)
2651
+ * - Input is prefix of trie word → inputLen / shortestReachableWordLen
2652
+ * - Trie word is prefix of input → matchedWordLen / inputLen
2653
+ * - Fell off partway → matchedChars / inputLen
2654
+ */
2655
+ matchScore(word) {
2656
+ const lower = word.toLowerCase();
2657
+ const len = lower.length;
2658
+ if (len === 0)
2659
+ return 0;
2660
+ let node = this.root;
2661
+ let depth = 0;
2662
+ let bestScore = 0;
2663
+ for (const ch of lower) {
2664
+ const next = node.children.get(ch);
2665
+ if (!next)
2666
+ break;
2667
+ node = next;
2668
+ depth++;
2669
+ if (node.isEndOfWord) {
2670
+ let score = depth / len;
2671
+ if (node.strippedAccentCount > 0) {
2672
+ score *= Math.pow(ACCENT_PENALTY_PER_CHAR, node.strippedAccentCount);
2673
+ }
2674
+ bestScore = Math.max(bestScore, score);
2675
+ }
2676
+ }
2677
+ if (depth === len) {
2678
+ if (node.isEndOfWord) {
2679
+ let score = 1.0;
2680
+ if (node.strippedAccentCount > 0) {
2681
+ score *= Math.pow(ACCENT_PENALTY_PER_CHAR, node.strippedAccentCount);
2682
+ }
2683
+ return score;
2684
+ }
2685
+ if (node.minWordLen < Infinity) {
2686
+ bestScore = Math.max(bestScore, len / node.minWordLen);
2687
+ }
2688
+ }
2689
+ else {
2690
+ bestScore = Math.max(bestScore, depth / len);
2691
+ }
2692
+ return bestScore;
2693
+ }
2694
+ get isEmpty() {
2695
+ return this.root.children.size === 0;
2696
+ }
2697
+ }
2698
+ // ---------------------------------------------------------------------------
2699
+ // Build per-language tries at module load time
2700
+ // ---------------------------------------------------------------------------
2701
+ export const languageTries = new Map();
2702
+ for (const [lang, vocab] of Object.entries(VOCABULARY)) {
2703
+ if (vocab.words.length === 0)
2704
+ continue;
2705
+ const trie = new LanguageTrie();
2706
+ for (const word of vocab.words) {
2707
+ trie.addWord(word);
2708
+ }
2709
+ languageTries.set(lang, trie);
2710
+ }
2711
+ // Also build phrase sets for quick phrase matching (kept separate — phrases are multi-word)
2712
+ export const phraseSets = new Map();
2713
+ for (const [lang, vocab] of Object.entries(VOCABULARY)) {
2714
+ if (vocab.phrases.length > 0) {
2715
+ phraseSets.set(lang, vocab.phrases.map((p) => p.toLowerCase()));
2716
+ }
2717
+ }
2718
+ //# sourceMappingURL=language-dicts.js.map