User:TJones (WMF)/Notes/Bengali Analyzer Analysis

November 2021 — See TJones_(WMF)/Notes for other projects. See also T294067. For help with the technical jargon used in Analysis Chain Analysis, see the Language Analysis section of the Search Glossary.

Background
As part of the project to unpack all analyzers (T272606), I discovered that Elastic search offers Bengali and Estonian analyzers that we aren't using yet. The goal here is to deploy an unpacked version of the Bengali analyzer, after confirming that it is doing the right thing with Bengali speakers.

Data
For this analysis I pulled 10,000 documents each from Bengali Wikipedia and Wiktionary, though I'll mostly be focusing on the Wikipedia data, since it has more examples of interest.

Random Sample
Below is a sample of 25 randomly selected stemming groups (words that would all be indexed together) with the new analyzer. (These are from the Wikipedia sample.)

Two of the 25 below have numbers for stems. Numeric groups are common, with Arabic (123) and Bengali (১২৩) numerals being very common, Devanagari (१२३) numerals fairly common, and various others occurring occasionally, including Khmer (១២៣), Eastern Arabic (١٢٣), and other numerals.

These groups are fairly small and are more representative of the stemmer overall


 * জাইম: [1 জাইম][1 জাইমে]
 * ওয়ালেট: [2 ওয়ালেট][1 ওয়ালেটটি]
 * গ্লিসন: [1 গ্লিসন][1 গ্লীসন]
 * ডার্টমাউথ: [12 ডার্টমাউথ][1 ডার্টমাউথে][4 ডার্টমাউথের]
 * মোটরগার: [14 মোটরগাড়ি][2 মোটরগাড়িতে]
 * লামপুর: [1 লামপুর][1 লামপুরের]
 * কারুকর্ম: [1 কারুকর্ম][1 কারুকর্মের]
 * 1788: [1 1788][17 ১৭৮৮]
 * সুচিবদ্ধ: [1 সূচিবদ্ধ][2 সূচীবদ্ধ]
 * বারোবাজার: [1 বারোবাজার][1 বারোবাজারে]
 * উপনিবেসবাদি: [1 উপনিবেশবাদীকে][4 উপনিবেশবাদীদের][2 উপনিবেশবাদীরা]
 * তাম্রপট্ট: [1 তাম্রপট্ট][1 তাম্রপট্টের]
 * প্রানিসমুহ: [1 প্রাণিসমূহ][2 প্রাণীসমূহের]
 * নাতনি: [1 নাতনিদের][2 নাতনিরা][1 নাতনীকে]
 * সামিন: [1 শামীন][10 সামিনা]
 * ডান্সটারভিল: [1 ডান্সটারভিল][1 ডান্সটারভিলের]
 * খল: [25 খল][3 খলিলি][1 খলিলী]
 * নিলু: [3 নিলু][7 নীলু][2 নীলুকে]
 * নিওলিবারেলিজম: [4 নিওলিবারেলিজম][1 নিওলিবারেলিজমের]
 * একইরকম: [38 একইরকম][1 একইরকমের]
 * দুসান: [1 দুশানবে][1 দুসানের]
 * প্লুটার্ক: [1 প্লুটার্ক][1 প্লুটার্কের]
 * 263: [7 263][12 ২৬৩][1 ২৬৩টি]
 * এর্ম: [1 এর্মি][1 এর্মিতা]
 * ধর্মযুদ্ধ: [4 ধর্মযুদ্ধ][2 ধর্মযুদ্ধের]
 * লাইন: [2 লাইন][1 লাইনে][1 লাইনের]
 * ডিম: [6 ডিম][2 ডিমের]

Large Groups Sample
Below is a sample of the 25 largest stemming groups (words that would all be indexed together) with the new analyzer. (These are from the Wikipedia sample.)

I quickly ran the first few of these through Google Translate—even though its statistical approach often does poorly with out-of-context lists of words—and it looks like these may include some overlapping groups that are merged by the stemmer. If so, it's probably okay, but we still need to look for anything egregious.


 * কর: [1 কড়][7 কড়তা][18 কড়ি][248 কর][1 করখানা][54 করছি][3 করছিলাম][1 করছিলে][192 করছিলেন][653 করছে][1 করছেণ][817 করছেন][563 করত][2 করতঃ][1 করতা][9 করতাম][1 করতি][6759 করতে][3 করতেছে][1397 করতেন][1 করদের][1 করনি][39 করব][3 করবি][756 করবে][1 করবেঃ][302 করবেন][2 কররা][15 করলা][20 করলাম][689 করলে][296 করলেন][2 করলেনঃ][198 করি][32 করিতে][2 করিতেছি][1 করিতেছিলেন][1 করিতেছে][5 করিতেছেন][19 করিতেন][1 করিবে][2 করিবেন][24 করিয়াছিলেন][3 করিয়াছে][5 করিয়াছেন][2 করিলে][8 করিলেন][3 করিস][24 করুক][31 করুণ][110 করুন][1 করূণ][1 করূন][27 করেছিলাম][5 করেছিলে][6117 করেছিলেন][7 করেণ][22818 করেন][10 করেনঃ][22 করের][45 করো][1 কর্বা]
 * আস: [1 অাশ][52 আঁশ][8 আঁশগুলি][1 আঁশগুলো][1 আঁশলা][8 আঁশে][18 আঁশের][20 আশ][1 আশঁ][1 আশরা][239 আশা][23 আশি][4 আশিষ][9 আশিস][5 আশীষ][11 আশে][4 আশের][2 আশো][62 আস][1 আসকে][2 আসছি][16 আসছিলেন][307 আসছে][40 আসছেন][24 আসত][212 আসতে][3 আসতেছে][26 আসতেন][5 আসব][4 আসবা][76 আসবে][8 আসবেন][23 আসলাম][4 আসলি][282 আসলে][5 আসলেন][358 আসা][7 আসি][1 আসিলে][1 আসিলেন][1 আসিস][5 আসুক][5 আসুন][1121 আসে][927 আসেন][5 আসের][2 আসো]
 * সুন: [2 শুণ্য][1 শুণ্যতা][3 শুন][1 শুনছি][1 শুনছিলেন][1 শুনছেন][1 শুনত][1 শুনতাম][69 শুনতে][11 শুনতেন][1 শুনলাম][6 শুনলে][3 শুনলেন][3 শুনা][2 শুনিতে][46 শুনুন][108 শুনে][5 শুনেছিলেন][3 শুনেন][1 শুনের][13 শুন্য][3 শুন্যতা][2 শুন্যে][1 শুন্যের][9 শূণ্য][1 শূণ্যতা][1 শূণ্যে][2 শূণ্যের][1 শূনে][191 শূন্য][4 শূন্যকে][1 শূন্যটি][18 শূন্যতা][16 শূন্যে][32 শূন্যের][19 সুন][1 সুনকে][4 সুনা][18 সুনিতা][5 সুনীতা][10 সুনীতি][3 সুনের][4 সুনো]
 * বে: [164 বে][13 বেঁকে][1 বেঁছে][1 বেঁতে][1 বেইলা][20 বেইলি][4 বেইলে][2 বেকে][159 বেছে][14 বেটা][18 বেটি][17 বেড়া][6 বেণী][18 বেত][2 বেতি][8 বেতী][1 বেতে][32 বেদের][7 বেনি][1 বেনী][4 বেব][31 বেবি][15 বেবী][1 বেবে][1 বেয়ের][2 বেয়োন][6 বেরা][60 বেলা][1 বেলাম][4 বেলি][1 বেলী][22 বেলে][1 ব্য][30 ব্যয়ের][4 ব্যা][1 ব্যাকে][1 ব্যাবী][1 ব্যায়ের][21 ব্যালে][1 ব্যিস][1 ব্যে]
 * পার: [1 পাঁড়][1 পাঁড়ি][49 পাড়][1 পাড়গুলো][1 পাড়তে][2 পাড়বে][117 পাড়ি][96 পাড়ে][13 পাড়ের][158 পার][11 পারছি][2 পারছিলাম][5 পারছিলেন][8 পারছে][7 পারছেন][69 পারত][5 পারতাম][93 পারতেন][3 পারদের][13 পারব][218 পারবে][104 পারবেন][1 পারলা][2 পারলাম][41 পারলে][27 পারলেন][103 পারি][1 পারিঃ][1 পারিতেন][3 পারিবে][1 পারিবেন][1 পারিয়াছিলেন][1 পারিলেন][3 পারুন][4559 পারে][22 পারেঃ][1 পারেড়][629 পারেন][3 পারের][15 পারো]
 * পর: [2 পড়ছিলেন][23 পড়ছে][4 পড়ছেন][11 পড়ত][1 পড়তি][207 পড়তে][26 পড়তেন][41 পড়বে][2 পড়বেঃ][4 পড়বেন][2 পড়লাম][71 পড়লে][11 পড়লেন][209 পড়া][4 পড়ি][3 পড়িতে][3 পড়িতেন][1 পড়িয়াছিলেন][1 পড়িয়াছে][71 পড়ুন][1 পড়ুনঃ][1 পড়ূন][1 পড়েছিলাম][57 পড়েছিলেন][386 পড়েন][2 পরছে][3 পরত][30 পরতে][12 পরতেন][11 পরব][16 পরবে][4 পরবেন][3 পরলে][49 পরা][3 পরি][12 পরী][20 পরেছিলেন][28 পরেন][543 পরের]
 * সা: [13 শা][1 শাইবা][2 শাকে][1 শাত][2 শাব][1 শাবি][3 শায়ের][1 শারা][4 শালা][1 শালি][2 শালী][1 শালে][202 সা][13 সাঁ][1 সাঁটা][1 সাঁত][1 সাইবা][2 সাকে][101 সাড়া][362 সাত][2 সাতি][3 সাতে][3 সাদের][55 সানি][10 সানী][123 সাব][23 সাবা][2 সাবি][1 সায়ের][2 সায়েরা][757 সারা][3 সালা][162 সালাম][3 সালি][20618 সালে][4 স্বা][3 স্বাতী][19 স্বাদের]
 * সি: [1 শিকে][2 শিতা][226 শিব][19 শিবা][33 শিরা][147 শিলা][2 শিলাঃ][1 শিলি][55 শীত][21 শীতে][1 শীবা][1 শীবেন][5 শীলা][1 সিইতে][4 সিকে][2 সিটা][645 সিটি][1 সিত][2 সিতি][5 সিতে][5 সিদের][1 সিনি][1 সিবা][4 সিবি][1 সিবে][1 সিয়ের][62 সিয়েরা][2 সিয়োন][7 সিরা][3 সিলা][3 সিলাম][4 সিলি][1 সিলে][30 সীতা][1 সীবা][1 সীরা][1 সীলি][1 সীলে]
 * হার: [3 হাঁড়][3 হাঁড়ি][2 হাঁড়িতে][1 হাঁড়ে][80 হাড়][1 হাড়কে][3 হাড়গুলি][5 হাড়গুলো][1 হাড়টা][1 হাড়টি][10 হাড়ি][1 হাড়িতে][1 হাড়ী][4 হাড়ে][64 হাড়ের][2288 হার][13 হারঃ][8 হারকে][1 হারগুলি][1 হারটা][2 হারতে][1 হারনী][2 হারব][2 হারবি][1 হারলি][2 হারলে][3 হারলেন][1 হারি][1 হারিশ][21 হারিস][1 হারুণ][62 হারুন][1 হারূণ][9 হারূন][136 হারে][2 হারেন][48 হারের][4 হারো]
 * বল: [677 বল][79 বলকে][2 বলগুলি][7 বলগুলো][12 বলছি][2 বলছিলাম][5 বলছিলেন][47 বলছে][2 বলছেঃ][33 বলছেন][36 বলটি][29 বলত][1 বলতাম][645 বলতে][41 বলতেন][5 বলব][1 বলবঃ][1 বলবা][18 বলবে][9 বলবেন][27 বলয়ের][10 বললাম][44 বললে][91 বললেন][27 বললেনঃ][52 বলি][3 বলিতে][1 বলিলেন][1 বলিস][14 বলী][11 বলুন][2 বলুনঃ][3 বলেছিলাম][476 বলেছিলেন][1 বলেছিলেনঃ][201 বলের][12 বলো]
 * সুর: [1 শুঁড়][1 শুঁড়ি][1 শুঁড়ে][1 শুঁড়ের][4 শুর][1 শুরতে][7 শুরি][1 শুরী][1 শূর][1 শূরের][202 সুর][2 সুরকে][2 সুরগুলি][1 সুরটা][3 সুরটি][15 সুরত][3 সুরতি][5 সুরি][40 সুরে][2 সুরেন][22 সুরের][3 সুর্য][1 সুর্যকে][4 সুর্যের][1 সূরি][1 সূরী][1 সূরে][1 সূরের][250 সূর্য][34 সূর্যকে][1 সূর্যতা][1 সূর্যি][188 সূর্যের][5 সূর্য্য][1 সূর্য্যকে][3 সূর্য্যের]
 * সে: [2 শেনি][9 শেবা][2 শেরা][3 শেলি][1 শেলী][4 শেলে][104 শ্বেত][24 শ্বেতা][1 শ্যাত][1 শ্যাতে][2 শ্যূন্য][1 সেঁকে][166 সেগুলি][207 সেগুলো][1 সেগুলোঃ][144 সেটা][265 সেটি][1 সেটিঃ][8 সেত][6 সেতী][1 সেতে][1 সেনি][410 সেবা][1 সেবি][1 সেবে][1321 সেরা][17 সেলাম][1 সেলি][10 সেলে][1 সেলেন][2 স্বেত][1 স্যলী][1 স্যাঁত][1 স্যাব][5 স্যালি][1 স্যালে]
 * বাস: [38 বাঁশ][3 বাঁশড়া][61 বাঁশি][4 বাঁশিতে][2 বাঁশী][1 বাঁশে][39 বাঁশের][2 বাশ][2 বাশলে][1 বাশা][6 বাশি][1 বাশিঁ][1 বাশিঁতে][2 বাশেঁর][1 বাশের][1 বাশো][1 বাষা][789 বাস][8 বাসগুলি][2 বাসগুলো][1 বাসটি][1 বাসতে][2 বাসদের][1 বাসদেরকে][1 বাসব][2 বাসবি][2 বাসবী][1 বাসরা][4 বাসলী][111 বাসা][3 বাসি][3 বাসী][17 বাসে][19 বাসের][1 বাসেরা]
 * সর: [6 শর][3 শরত][1 শরতা][8 শরতে][1 শরব][1 শরলি][1 শরি][1 শরের][2 শর্বা][59 শরৎ][2 শ্বর][2 শ্বরের][2 ষড়][39 সড়কে][8 সর][3 সরছে][36 সরণি][3 সরণী][6 সরব][1 সরবে][4 সরলা][5 সরা][1 সরি][4 সরিতা][2 সরিস][154 সরে][4 সরেন][2 সরের][35 স্বর][3 স্বরকে][2 স্বরগুলি][1 স্বরণী][2 স্বরা][17 স্বরে][14 স্বরের]
 * আর: [2 আড়ত][1 আড়রা][2 আড়া][3 আড়ি][2 আড়ৎ][1 আরকে][3 আরণি][3 আরতা][71 আরতি][1 আরতী][765 আরব][716 আরবি][4 আরবিঃ][86 আরবী][1 আরবীঃ][43 আরবে][4 আরব্য][1 আররা][5 আরলি][1 আরলে][95 আরা][1 আরাঃ][4 আরি][3 আরিশ][1 আরিস][5 আরে][1 আরের][974 আরো][1 আরোঃ][10 আর্যদের][15 আর্যরা][1 আর্যের][1 আর্যেরা]
 * কার: [1 কাড়][1 কাড়ছে][1 কাড়ত][6 কাড়তে][1 কাড়বে][6 কাড়ে][13 কাড়েন][115 কার][4 কারকে][178 কারখানা][7 কারবি][1 কাররা][24 কারি][2 কারিবা][1 কারিবে][1 কারিলা][31 কারী][1 কারুন][7 কারে][29 কারেন][14 কারের][129 কারো][80 কার্য][1 কার্যগুলি][1 কার্যগুলো][59 কার্যত][7 কার্যতঃ][24 কার্যে][11 কার্যের][6 কার্য্য][2 কার্য্যে][1 কার্য্যের][13 ক্বারী]
 * দেখ: [11 দেখ][7 দেখছি][5 দেখছিলেন][9 দেখছে][8 দেখছেন][5 দেখত][1 দেখতাম][619 দেখতে][29 দেখতেন][1 দেখনি][4 দেখব][2 দেখবা][9 দেখবে][3 দেখবেন][6 দেখলাম][1 দেখলি][36 দেখলে][25 দেখলেন][2832 দেখা][28 দেখি][1 দেখিতে][1 দেখিবে][1 দেখুক][323 দেখুন][2 দেখুনঃ][408 দেখে][2 দেখেছিলাম][36 দেখেছিলেন][122 দেখেন][2 দেখো]
 * বস: [3 বশ][4 বশত][3 বশতঃ][1 বশি][1 বশীতে][10 বশে][1 বশের][5 বশ্যতা][41 বস][1 বসছে][10 বসত][278 বসতি][29 বসতে][3 বসতেন][3 বসব][1 বসবী][2 বসবে][11 বসরা][1 বসলাম][4 বসলি][7 বসলে][3 বসলেন][14 বসা][1 বসি][1 বসিতে][275 বসে][5 বসেছিলেন][53 বসেন][18 বসের][1 বস্যো]
 * সু: [14 শু][1 শুঁকে][3 শুঁটি][1 শুটি][1 শুতা][2 শুতে][8 শুনি][5 শুরা][1 শুলে][3 শূরা][1 শূলে][80 সু][1 সুকে][64 সুতা][18 সুতি][2 সুতী][18 সুদের][1 সুনি][1 সুব][1 সুবা][1 সুয়ের][61 সুরা][3 সুলে][4 সূত][4 সূতা][3 সূতি][4 সূতী][207 সূরা][1 সূলি][1 সূলে]
 * কা: [98 কা][56 কাঁটা][4 কাইলি][15 কাকে][1 কাছি][107 কাটা][2 কাড়া][5 কাত][1 কাতা][4 কাত্যা][73 কাদের][1 কাদেরকে][3 কানি][17 কাব][22 কাবা][5 কাবি][117 কাব্য][5 কাব্যা][1 কাব্যি][33 কাব্যে][32 কারা][1 কার্যা][29 কালা][82 কালাম][48 কালি][88 কালী][156 কালে][2 ক্বাবা][1 ক্বালা]
 * জি: [329 জি][1 জিকে][1 জিছে][3 জিটা][12 জিটি][3 জিত][2 জিতা][112 জিতে][76 জিতেছে][36 জিতেন][1 জিদের][13 জিনি][5 জিব][8 জিবি][1 জিয়োন][10 জিরা][45 জিলা][2 জিলাম][1 জিলি][8 জিৎ][10 জী][1 জীত][1 জীতেন][141 জীব][28 জীবে][1 জীবেন][1 জীরা][1 জ্বি][1 জ্বী]
 * বাধ: [155 বাঁধ][1 বাঁধকে][4 বাঁধগুলি][2 বাঁধগুলো][1 বাঁধছে][19 বাঁধটি][10 বাঁধতে][2 বাঁধতেন][3 বাঁধলে][1 বাঁধলেন][106 বাঁধা][1 বাঁধি][1 বাঁধিলা][1 বাঁধিলাম][32 বাঁধে][2 বাঁধেন][29 বাঁধের][5 বাধ][1 বাধগুলি][2 বাধতে][1 বাধলে][222 বাধা][1 বাধিলে][12 বাধে][1 বাধেঁ][1 বাধেন][1 বাধের][391 বাধ্য][3 বাধ্যতা]
 * মা: [1269 মা][3 মাইতি][2 মাইবি][4 মাইলি][4 মাইলে][68 মাকে][1 মাখানা][14 মাছি][6 মাছে][1 মাটা][240 মাটি][9 মাত][353 মাতা][1 মাতাঁ][1 মাতে][3 মাদের][37 মানি][2 মানী][1 মাবা][12 মায়েদের][379 মায়ের][8 মায়েরা][911 মারা][1 মারাঁ][33 মালা][3 মালাম][18 মালি][1 মালী][14 মালে]
 * মান: [2 মাণিলা][563 মান][1 মানঃ][13 মানকে][8 মানগুলি][4 মানগুলো][1 মানছে][8 মানটি][10 মানত][23 মানতে][2 মানতেন][1 মানদের][367 মানব][3 মানবি][4 মানবী][1 মানবে][1 মানবেন][1 মানলে][1 মানলেন][32 মানা][1 মানিলা][1 মানিশ][1 মানিস][203 মানে][5 মানেন][271 মানের][6 মানো][27 মান্য][6 মান্যতা]
 * খা: [11 খা][148 খাঁ][2 খাঁকে][43 খাঁটি][7 খাঁড়া][1 খাঁয়ের][1 খাঁরা][3 খাটা][2 খাটি][46 খাড়া][34 খাত][12 খাতা][1 খাতাম][83 খাতে][1 খাত্য][12 খাদের][75 খাদ্যের][4 খানি][1 খাব][2 খাবা][3 খাবে][4 খাবেন][21 খায়ের][20 খালা][136 খালি][1 খালী][10 খালে][1 খ্বা]

Potential Problem Groups Sample
Below is a sample of the 12 potential problem groups (words that would all be indexed together) with the new analyzer. (The first 7 are from the Wikipedia sample, and the last 5 are from Wiktionary. Two stems are in both.)


 * ত: [13 ত][2 ত্ব][2 ৎ]
 * তস: [2 তশি][1 তশিতে][1 তস][1 ৎসি][2 ৎসে][1 ৎসের]
 * ন: [5 ণ][53 ন]
 * নব: [1 ণবা][60 নব][1 নবকে][2 নববি][3 নববী][29 নবি][2 নবিশ][257 নবী][2 নবে][76 নব্য][1 নব্যতা]
 * নের: [1 ণের][1 নেরি][1 নেরো][5 ন্যারো]
 * রা: [1 ড়া][108 রা][7 রাইলি][3 রাণি][269 রাণী][201 রাত][1 রাতা][3 রাতি][204 রাতে][37 রানি][146 রানী][55 রাব][16 রাবি][8 রাবী][3 রাবে][149 রায়ের][1 রারা][1 রালি][1 রালে][13 র্বা]
 * রেমজ: [1 ড়্যামজি][1 রেমজে]


 * ত: [54 ত][2 ত্ব][1 ৎ]
 * ন: [9 ণ][1 ণ্ব][37 ন]
 * নি: [2 ণি][4 নি][2 নিত্য][2 নিলাম][1 নিলে][1 নী][3 নীত][3 নীতি]
 * নে: [1 ণে][1 ণ্য][2 নেড়া][5 নেতা][1 ন্যড়া]
 * ন্: [3 ণ্][1 ন্][1 ন্ত]

There are two groups of other potential problem stems excluded from the list above:


 * A small set has words that start with either অ + া or আ, which look the same in a sufficiently forgiving font. Since there is no visual difference, these are probably fine. (Runa pointed out that other alternations—like য + ় vs য়—exist, too; I didn't catch these in the potential problem stems because both alternatives don't occur at the beginning of words in my sample. But again, since they are not visually distinct, this should be fine.)
 * A much larger set (300+ examples), conflates শ, ষ, and স (merging all three as স). Wiktionary and Google Translate implied—and Nahid confirmed—that these can be totally different words. For example, বিশ means the number ‘20’; বিষ means ‘poison’; বিস means ‘Lotus stalk’. I'm looking into these separately to see if we can control whether or not this merger is applied.

Some examples:


 * [1 বাশা][1 বাষা][111 বাসা]
 * [5 কোশ][235 কোষ][1 কোস]
 * [124 বিশ][74 বিষ][4 বিস]
 * [1 সুভাশ][90 সুভাষ][2 সুভাস]
 * [13 শোল][35 ষোল][11 সোল]
 * [37 শংকর][114 সংকর]
 * [120 শঙ্কর][6 সঙ্কর]
 * [1 শকল][1593 সকল]
 * [167 শত][4 সত]
 * [25 শনাক্তকরণ][26 সনাক্তকরণ]
 * [1 ষন্মত][1 সন্মত]
 * [2 শষ্য][66 শস্য]
 * [90 সুভাষ][2 সুভাস]
 * [34 শট][1 ষট]
 * [1 শাট][40 ষাট]

Wiktionary Notes

 * Wiktionary only had 1 large group (≥ 20 unique words in the group), and it was the same stem as the largest group in the Wikipedia sample.