স্ট্রিংয়ে প্রতিটি শব্দ কতবার আবির্ভূত হয়েছে তা গণনা করার জন্য ডিকশনারি কম্প্রিহেনশন এবং split() / count() ব্যবহার করা যায়।
উদাহরণ
my_str = 'Hi there Will, how are you Will, Will you say Hi to me'
print("স্ট্রিং:", my_str)
# ডিকশনারি কম্প্রিহেনশন
word_freq = {word: my_str.count(word) for word in my_str.split()}
print("শব্দ ফ্রিকোয়েন্সি:")
print(word_freq)
আউটপুট
স্ট্রিং: Hi there Will, how are you Will, Will you say Hi to me
শব্দ ফ্রিকোয়েন্সি:
{'Hi': 2, 'there': 1, 'Will,': 2, 'how': 1, 'are': 1, 'you': 2, 'Will': 3, 'say': 1, 'to': 1, 'me': 1}
সমস্যা ও সমাধান
সমস্যা: split() স্পেস দিয়ে ভাগ করে, তাই 'Will,' (কমা সহ) এবং 'Will' আলাদা শব্দ হিসেবে গণনা হয়েছে।
উন্নত সংস্করণ: পাঙ্কচুয়েশন সরিয়ে
import re
from collections import Counter
my_str = 'Hi there Will, how are you Will, Will you say Hi to me'
# শব্দ বের করা (শব্দের সীমানা \b ব্যবহার)
words = re.findall(r'\b\w+\b', my_str.lower()) # lowercase + শব্দ মাত্র
word_freq = Counter(words)
print("শুদ্ধ শব্দ ফ্রিকোয়েন্সি:")
print(word_freq)
# Counter({'will': 3, 'hi': 2, 'you': 2, 'there': 1, 'how': 1, 'are': 1, 'say': 1, 'to': 1, 'me': 1})
Counter.most_common() ব্যবহার
# টপ ৩ সাধারণ শব্দ
print(word_freq.most_common(3))
# [('will', 3), ('hi', 2), ('you', 2)]
পারফরম্যান্স নোট
str.count()O(n) প্রতিটি শব্দের জন্য — পুরো স্ট্রিং বারবার স্ক্যান করেCounterO(n) একবার স্ক্যান করে — বড় টেক্সটের জন্য দ্রুত- রেগুলার এক্সপ্রেশন
\b\w+\bশব্দ সঠিকভাবে বের করে (পাঙ্কচুয়েশন হ্যান্ডেল করে)