حساب تكرار الكلمات في نص باستخدام Counter في بايثون | بايثون بالمثال 22

حساب تكرار الكلمات في نص باستخدام Counter في بايثون

إذا كان لديك نص وتريد معرفة عدد مرات ظهور كل كلمة، فاستخدم 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={محتوى المقال}

كيف تعمل الفكرة؟

  1. نحوّل النص إلى كلمات باستخدام split().
  2. نمرر الكلمات إلى Counter.
  3. نقرأ عدد مرات ظهور كل كلمة من النتيجة.
مراحل حساب تكرار الكلمات في النص باستخدام 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 تعطي تكرار كل كلمة. إذا كان هدفك العدد الكلي فقط، راجع حساب عدد الكلمات في نص باستخدام بايثون.

روابط داخلية مفيدة من بايثون العرب

مصادر رسمية للتوسع

الخلاصة

لحساب تكرار الكلمات في نص، حوّل النص إلى كلمات ثم مررها إلى 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 في مكتبة بايثون القياسية.

إرسال تعليق

أحدث أقدم