حساب عدد الكلمات في نص باستخدام بايثون | بايثون بالمثال 3

لحساب عدد الكلمات في نص باستخدام بايثون، أبسط طريقة للمبتدئ هي تقسيم النص باستخدام split() ثم حساب عدد العناصر الناتجة باستخدام len(). مثلًا، التعبير len(text.split()) يعيد عدد الأجزاء المفصولة بالمسافات ومحارف الفراغ البيضاء.

هذا هو الدرس الثالث من سلسلة بايثون بالمثال. سنبدأ بالحل المباشر، ثم نفهم لماذا يعمل، وكيف يتعامل مع المسافات الزائدة والنص العربي والنص الفارغ، وما حدود هذه الطريقة عندما تدخل علامات الترقيم أو تحليل النصوص المتقدم.

{alertSuccess} الحل السريع: إذا كان المطلوب عدّ الكلمات المفصولة بالـWhitespace، استخدم len(text.split()).

{getToc} $title={محتوى المقال}

الكود الأسرع لحساب عدد الكلمات في بايثون

text = "I love Python"

count = len(text.split())

print(count)

الناتج:

3

الفكرة تتكون من خطوتين فقط: split() تحوّل النص إلى قائمة من الأجزاء، ثم len() تحسب عدد عناصر هذه القائمة.

كيف تعمل split() عند عد الكلمات؟

عند استدعاء split() بدون تمرير فاصل، تتعامل بايثون مع سلاسل الـWhitespace المتتالية كفاصل واحد، ولا تنشئ عناصر فارغة بسبب الفراغات الموجودة في بداية النص أو نهايته.

text = "   Python     is   easy   "

print(text.split())

الناتج:

['Python', 'is', 'easy']

لهذا لا تحتاج إلى إزالة المسافات الزائدة يدويًا قبل استخدام split() في هذا المثال البسيط.

ما الفرق بين len(text) وlen(text.split())؟

الكود ما الذي يحسبه؟
len(text) عدد المحارف داخل النص، بما فيها المسافات.
len(text.split()) عدد الأجزاء الناتجة عن تقسيم النص بالـWhitespace.
text = "I love Python"

print(len(text))
print(len(text.split()))

الأول يقيس طول النص، والثاني أقرب إلى سؤالنا: «كم كلمة مفصولة بالفراغات توجد في النص؟».

برنامج يأخذ النص من المستخدم

text = input("أدخل النص: ")

count = len(text.split())

print("عدد الكلمات:", count)

إذا كتب المستخدم I am learning Python فستكون النتيجة 4.

هل تعمل الطريقة مع النص العربي؟

نعم، إذا كان المقصود عدّ الأجزاء المفصولة بالـWhitespace. المثال التالي يعيد أربع كلمات:

text = "أنا أتعلم لغة بايثون"

print(len(text.split()))

الناتج هو 4. لكن انتبه: هذا عدّ بسيط قائم على الفصل بالـWhitespace، وليس تحليلًا لغويًا للكلمات العربية.

ماذا يحدث مع النص الفارغ أو المسافات فقط؟

من المزايا المهمة لـsplit() بدون فاصل أن النص الفارغ أو النص الذي يحتوي على Whitespace فقط ينتج قائمة فارغة، وبالتالي يكون العدد صفرًا.

print(len("".split()))
print(len("     ".split()))

الناتج في الحالتين هو 0.

{alertInfo} إذا كان هدفك فقط الحصول على العدد، فلا تحتاج إلى strip() قبل split(). استخدم strip() فقط إذا أردت عرض رسالة مختلفة للمستخدم عندما لا يكتب نصًا حقيقيًا.

إظهار رسالة إذا لم يُدخل المستخدم نصًا

text = input("أدخل النص: ")

if not text.strip():
    print("لم تدخل أي نص")
else:
    print("عدد الكلمات:", len(text.split()))

هنا استخدمنا strip() فقط للتحقق من أن الإدخال لا يتكون من مسافات فارغة، ثم استخدمنا split() للحساب.

هل علامات الترقيم تؤثر على النتيجة؟

في عدّ الكلمات البسيط، علامات الترقيم تبقى متصلة بالكلمة. مثلًا:

text = "Hello, Python!"

print(text.split())

الناتج:

['Hello,', 'Python!']

سيبقى العدد 2، لكن الفاصلة وعلامة التعجب ما زالتا جزءًا من النصين. لذلك لا تعتبر split() وحدها أداة كاملة لتحليل اللغة أو Tokenization.

{alertWarning} إذا كنت تريد تحليلًا لغويًا أدق — مثل التعامل مع علامات الترقيم، الكلمات الموصولة، أو قواعد لغة معينة — فهذه مسألة أوسع من مثال عدّ الكلمات للمبتدئين.

متى تستخدم replace()؟

يمكن استخدام replace() في تنظيف بسيط جدًا إذا كنت تعرف العلامات التي تريد حذفها، لكن لا تجعلها الحل العام لكل النصوص:

text = "Hello, Python!"

clean_text = text.replace(",", "").replace("!", "")

print(clean_text.split())

هذه الطريقة مناسبة للتدريب، وليست بديلًا عن أدوات معالجة النصوص عندما يصبح المشروع أكبر.

مقارنة سريعة بين الدوال المستخدمة

الدالة وظيفتها في هذا المثال
input() قراءة النص من المستخدم.
split() تقسيم النص حسب الـWhitespace عند عدم تحديد فاصل.
len() حساب عدد العناصر الناتجة.
strip() التحقق من أن الإدخال لا يتكون من فراغات فقط.
replace() إزالة أو استبدال علامات محددة في تنظيف بسيط.

أخطاء شائعة

  • استخدام len(text) لحساب الكلمات: هذا يحسب المحارف، لا الكلمات.
  • نسيان الأقواس في split(): كتابة text.split تعطيك مرجع الدالة بدل استدعائها.
  • استخدام split(" ") دون حاجة: يختلف عن split() وقد ينتج عناصر فارغة عند وجود مسافات متتالية.
  • اعتبار النتيجة تحليلًا لغويًا دقيقًا: هي طريقة عملية وبسيطة للتعلم، وليست Word Tokenizer كاملًا.

تمرين بسيط

اكتب برنامجًا يطلب جملة من المستخدم ثم يطبع عدد الكلمات وعدد المحارف:

text = input("أدخل جملة: ")

print("عدد الكلمات:", len(text.split()))
print("عدد المحارف:", len(text))

روابط مفيدة

الخلاصة

لحساب عدد الكلمات بطريقة بسيطة في بايثون، استخدم len(text.split()). هذه الطريقة تتعامل جيدًا مع الـWhitespace المتكرر والنص الفارغ، وتعمل مع النص العربي والإنجليزي عندما تكون الكلمات مفصولة بالفراغات.

لكن تذكر أن هذا مثال تعليمي على تقسيم النص وحساب العناصر، وليس خوارزمية كاملة لفهم الكلمات لغويًا. إذا أصبح مشروعك يعتمد على تحليل نصوص حقيقي، ستحتاج إلى معالجة أعمق.

{alertSuccess} الخلاصة العملية: split() تقسّم النص، وlen() تحسب عدد الأجزاء الناتجة.

إرسال تعليق

أحدث أقدم