কম্পিউটার টিউটোরিয়াল

C#-এ স্ট্রিংয়ে প্রতিটি শব্দের ফ্রিকোয়েন্সি বের করা

স্ট্রিংয়ে প্রতিটি অক্ষর বা শব্দের ফ্রিকোয়েন্সি (ঘনত্ব) গণনা করার জন্য ডিকশনারি বা অ্যারে ব্যবহার করা হয়। নিচে অক্ষর-ভিত্তিক এবং শব্দ-ভিত্তিক দুটি পদ্ধতি দেখানো হলো।

পদ্ধতি ১: অক্ষর ফ্রিকোয়েন্সি (Character Frequency) - অ্যারে ব্যবহার

ASCII অক্ষরের জন্য ২৫৬ সাইজের অ্যারে দ্রুততম।


using System;

public class CharFrequency
{
    public static void Main()
    {
        string s = "Football!";
        int maxChars = 256; // ASCII রেঞ্জ
        int[] freq = new int[maxChars];
        
        // ফ্রিকোয়েন্সি গণনা
        foreach (char c in s)
        {
            freq[c]++;
        }
        
        // ফলাফল প্রিন্ট (শুধু যেগুলো ১টির বেশি)
        Console.WriteLine("অক্ষর ফ্রিকোয়েন্সি (১টির বেশি):");
        for (int i = 0; i < maxChars; i++)
        {
            if (freq[i] > 1)
            {
                Console.WriteLine($"Character '{((char)i)}' Occurrence = {freq[i]} times");
            }
        }
        
        // সব অক্ষর প্রিন্ট
        Console.WriteLine("\nসব অক্ষর:");
        for (int i = 0; i < maxChars; i++)
        {
            if (freq[i] > 0)
            {
                Console.WriteLine($"'{((char)i)}': {freq[i]}");
            }
        }
    }
}

আউটপুট


অক্ষর ফ্রিকোয়েন্সি (১টির বেশি):
Character 'l' Occurrence = 2 times
Character 'o' Occurrence = 2 times

সব অক্ষর:
'F': 1
'o': 2
't': 1
'b': 1
'a': 1
'l': 2
'!': 1

পদ্ধতি ২: শব্দ ফ্রিকোয়েন্সি (Word Frequency) - Dictionary ব্যবহার


using System;
using System.Collections.Generic;
using System.Linq;

public class WordFrequency
{
    public static void Main()
    {
        string text = "the quick brown fox jumps over the lazy dog the fox";
        
        // শব্দে ভাগ করুন (স্পেস, puntuаtion হ্যান্ডলিং সহ)
        string[] words = text.Split(new[] { ' ', '\t', '\n', '\r', ',', '.', '!', '?' }, 
                                   StringSplitOptions.RemoveEmptyEntries);
        
        var freq = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
        
        foreach (string word in words)
        {
            if (freq.ContainsKey(word))
                freq[word]++;
            else
                freq[word] = 1;
        }
        
        // ফ্রিকোয়েন্সি অনুযায়ী সর্ট করে প্রিন্ট
        Console.WriteLine("শব্দ ফ্রিকোয়েন্সি (ঘনত্ব অনুযায়ী):");
        foreach (var kvp in freq.OrderByDescending(x => x.Value))
        {
            Console.WriteLine($"'{kvp.Key}': {kvp.Value}");
        }
    }
}

আউটপুট


শব্দ ফ্রিকোয়েন্সি (ঘনত্ব অনুযায়ী):
'the': 3
'fox': 2
'quick': 1
'brown': 1
'jumps': 1
'over': 1
'lazy': 1
'dog': 1

আধুনিক LINQ পদ্ধতি (সংক্ষিপ্ত)


using System.Linq;

// অক্ষর ফ্রিকোয়েন্সি
var charFreq = text.GroupBy(c => c)
                   .Select(g => new { Char = g.Key, Count = g.Count() })
                   .OrderByDescending(x => x.Count);

// শব্দ ফ্রিকোয়েন্সি
var wordFreq = text.Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries)
                   .GroupBy(w => w, StringComparer.OrdinalIgnoreCase)
                   .Select(g => new { Word = g.Key, Count = g.Count() })
                   .OrderByDescending(x => x.Count);

ইউনিকোড সাপোর্ট (Dictionary ব্যবহার)


// ASCII ২৫৬ এর বাইরে যেতে হলে (ইউনিকোড, ইমোজি ইত্যাদি)
var freq = new Dictionary<char, int>();
foreach (char c in s)
{
    if (freq.ContainsKey(c)) freq[c]++;
    else freq[c] = 1;
}

পারফরম্যান্স তুলনা

পদ্ধতিটাইমস্পেসসviraলতা
int[256] অ্যারেO(n) - দ্রুততমO(1) - ২৫৬ ইন্টশুধু ASCII
Dictionary<char,int>O(n) - দ্রুতO(k) - ইউনিক চেরইউনিকোড সাপোর্ট
LINQ GroupByO(n log n) - স্লোয়ারO(k)পঠনীয়, ফাংশনাল

সারসংক্ষেপ

  • ASCII অক্ষর ফ্রিকোয়েন্সি: int[256] অ্যারে (সর্বোচ্চ দ্রুত)
  • ইউনিকোড/সাধারণ: Dictionary<char, int>
  • শব্দ ফ্রিকোয়েন্সি: Dictionary<string, int> + Split + LINQ
  • কেস-ইনসেনসিটিভ: StringComparer.OrdinalIgnoreCase ব্যবহার করুন
  1. পাইথন: স্ট্রিংয়ে শব্দ ফ্রিকোয়েন্সি গণনা করা (Dictionary Comprehension)

  2. পাইথনে স্ট্রিং-এ প্রতিটি ক্যারেক্টারের ফ্রিকোয়েন্সি বের করুন

  3. পাইথনে স্ট্রিংয়ে প্রতিটি ওয়ার্ডের ফ্রিকোয়েন্সি বের করা

  4. পাইথনে স্ট্রিংয়ের প্রথম পুনরাবৃত্ত শব্দ খুঁজে বের করার প্রোগ্রাম