لحساب عدد الكلمات في نص باستخدام بايثون، أبسط طريقة للمبتدئ هي تقسيم النص باستخدام 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))
روابط مفيدة
- شرح Lists في بايثون للمبتدئين
- شرح Functions في بايثون للمبتدئين
- مشاريع بايثون للمبتدئين
- بايثون بالمثال 2: معرفة الرقم الزوجي والفردي
- بايثون بالمثال 4: حساب مجموع عناصر List
- توثيق Python الرسمي لـstr.split()
الخلاصة
لحساب عدد الكلمات بطريقة بسيطة في بايثون، استخدم len(text.split()). هذه الطريقة تتعامل جيدًا مع الـWhitespace المتكرر والنص الفارغ، وتعمل مع النص العربي والإنجليزي عندما تكون الكلمات مفصولة بالفراغات.
لكن تذكر أن هذا مثال تعليمي على تقسيم النص وحساب العناصر، وليس خوارزمية كاملة لفهم الكلمات لغويًا. إذا أصبح مشروعك يعتمد على تحليل نصوص حقيقي، ستحتاج إلى معالجة أعمق.
{alertSuccess} الخلاصة العملية:split()تقسّم النص، وlen()تحسب عدد الأجزاء الناتجة.