إذا كان لديك نص وتريد معرفة عدد مرات ظهور كل كلمة، فاستخدم Counter من collections. قسّم النص إلى كلمات باستخدام split()، ثم مرر القائمة إلى Counter.
هذا هو الدرس 22 من سلسلة بايثون بالمثال، التي نتعلم فيها بايثون من خلال أمثلة قصيرة وعملية قابلة للتجربة.
from collections import Counter
text = "python code python data python code"
words = text.split()
counts = Counter(words)
print(counts)
الناتج: Counter({'python': 3, 'code': 2, 'data': 1}). أي أن python ظهرت 3 مرات، وcode مرتين، وdata مرة واحدة.
Counter جزء من مكتبة بايثون القياسية، لذلك لا تحتاج إلى تثبيت مكتبة خارجية. ويمكنك تجربة الأمثلة وتغيير النص في محرر بايثون العرب.
{getToc} $title={محتوى المقال}
كيف تعمل الفكرة؟
- نحوّل النص إلى كلمات باستخدام
split(). - نمرر الكلمات إلى
Counter. - نقرأ عدد مرات ظهور كل كلمة من النتيجة.
مثال عربي على حساب تكرار الكلمات
from collections import Counter
text = (
"تعلم بايثون ممتع "
"وتطبيق بايثون عملي "
"ومشاريع بايثون مفيدة"
)
words = text.split()
counts = Counter(words)
print(counts)
في هذا النص تظهر كلمة بايثون 3 مرات، بينما بقية الكلمات تظهر مرة واحدة.
معرفة عدد مرات ظهور كلمة محددة
from collections import Counter
text = "python code python data python code"
counts = Counter(text.split())
print(counts["python"])
الناتج هو 3. وإذا طلبت كلمة غير موجودة، فإن Counter تعيد 0.
معرفة أكثر الكلمات تكرارًا
from collections import Counter
text = (
"python code python "
"data python code "
"data python"
)
counts = Counter(text.split())
print(counts.most_common(3))
الناتج: [('python', 4), ('code', 2), ('data', 2)]. كل عنصر يحتوي الكلمة ثم عدد مرات ظهورها.
تجاهل الفرق بين Python وpython وPYTHON
هذه القيم مختلفة حرفيًا في بايثون. إذا أردت عدها ككلمة واحدة، استخدم lower() قبل التقسيم:
from collections import Counter
text = "Python python PYTHON code"
words = text.lower().split()
counts = Counter(words)
print(counts)
النتيجة: Counter({'python': 3, 'code': 1}).
لماذا تظهر نفس الكلمة كأنها كلمتان مختلفتان؟
split() تقسم النص حسب المسافات، لكنها لا تزيل علامات الترقيم. لذلك python وpython, وPython قد تُحسب كقيم مختلفة.
الحل العملي هو توحيد حالة الأحرف وتنظيف علامات الترقيم قبل العد.
تنظيف علامات الترقيم قبل العد
للنص البسيط يكفي split(). أما مع النصوص التي تحتوي فواصل ونقاطًا وعلامات استفهام، فيمكن استخدام re لاستخراج الكلمات نفسها. في Python 3 تعمل التعبيرات النمطية مع Unicode، لذلك يصلح المثال للعربية والإنجليزية:
from collections import Counter
import re
text = (
"Python, python! PYTHON? "
"بايثون، بايثون."
)
words = re.findall(
r"[^\W\d_]+",
text.lower()
)
counts = Counter(words)
print(counts)
النمط [^\W\d_]+ يلتقط سلاسل الحروف ويتجاهل علامات الترقيم والأرقام والشرطة السفلية. ستكون python 3 مرات، وبايثون مرتين.
نسخة عملية نهائية: عرض أكثر الكلمات تكرارًا
from collections import Counter
import re
text = """
Python is useful.
Python is simple, and python is practical.
بايثون مفيدة، وبايثون سهلة.
"""
words = re.findall(
r"[^\W\d_]+",
text.lower()
)
counts = Counter(words)
for word, count in counts.most_common(5):
print(word, "->", count)
يمكنك تغيير 5 إلى أي عدد تريد، أو استخدام counts["python"] للوصول إلى كلمة محددة.
متى أستخدم split ومتى أستخدم re؟
| الحالة | الطريقة |
|---|---|
| نص بسيط | text.split() |
| نص يحتوي علامات ترقيم تؤثر على العد | تنظيف النص أو re.findall() |
| تحليل لغوي متقدم | أدوات متخصصة خارج نطاق هذا المثال |
أخطاء شائعة
استخدام Counter على النص مباشرة
Counter(text) تعد الأحرف، لا الكلمات. استخرج الكلمات أولًا.
نسيان lower()
إذا كنت تريد تجاهل حالة الأحرف الإنجليزية، وحّدها قبل العد.
الاعتماد على split() مع علامات الترقيم
split() لا تحول python, إلى python. نظف النص عندما تكون علامات الترقيم مهمة.
الخلط بين عدد الكلمات وتكرارها
len(text.split()) يعطي العدد الكلي للكلمات، بينما Counter تعطي تكرار كل كلمة. إذا كان هدفك العدد الكلي فقط، راجع حساب عدد الكلمات في نص باستخدام بايثون.
روابط داخلية مفيدة من بايثون العرب
- حساب عدد الكلمات في نص باستخدام بايثون — لمعرفة العدد الكلي للكلمات.
- شرح Dictionaries في بايثون للمبتدئين — لفهم فكرة المفتاح والقيمة التي تشبه طريقة قراءة نتائج Counter.
- مكتبة أوامر بايثون — لمراجعة أوامر النصوص مثل
split()وlower().
مصادر رسمية للتوسع
الخلاصة
لحساب تكرار الكلمات في نص، حوّل النص إلى كلمات ثم مررها إلى Counter. استخدم counts["word"] لكلمة محددة وmost_common() لأكثر الكلمات تكرارًا.
إذا كان النص يحتوي اختلافًا في حالة الأحرف أو علامات ترقيم، نظفه أولًا باستخدام lower() وطريقة مناسبة لاستخراج الكلمات.
{alertSuccess} الخلاصة العملية: للنص البسيط استخدمCounter(text.split()). وللنص الحقيقي نظف الكلمات أولًا ثم مررها إلىCounter.
أسئلة شائعة
ما هي Counter في بايثون؟
Counter نوع متخصص من collections لحساب عدد مرات ظهور العناصر.
كيف أحسب عدد مرات ظهور كلمة في نص؟
أنشئ Counter للكلمات ثم استخدم المفتاح المطلوب مثل counts["python"].
كيف أعرف أكثر الكلمات تكرارًا؟
استخدم counts.most_common(n).
كيف أتجاهل الفرق بين Python وpython؟
استخدم text.lower() قبل تقسيم النص أو استخراج الكلمات.
كيف أتجاهل علامات الترقيم؟
نظف النص قبل العد، أو استخدم re.findall() لاستخراج الكلمات.
هل تحتاج Counter إلى تثبيت مكتبة؟
لا. Counter موجودة داخل collections في مكتبة بايثون القياسية.

