اذهب إلى المحتوى
  • 0

عدد مرات ظهور كلمة ضمن سلسة String في بايثون

Fahmy Mostafa

السؤال

يمكن إستعمال دوال مثل find و rfind للبحث عن نص في نص آخر، لكن هل توجد طريقة تمكنني من إيجاد كل النصوص المكرر في نص معين في بايثون كالتالي على سبيل المثال:

>>> x = "hello, world! Hi! hello!"
>>> x.find("hello")
0
>>> x.rfind("hello")
18

هل توجد دالة مثل find_all على سبيل المثال؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

هناك عدة طرق للقيام بالأمر:

إستخدام التعابير النمطية:

import re

x = "hello, world! Hi! hello!"
count = len(re.findall("hello", x))
print(count) # 2

طريقة أخرى بإستخدام التعابير النمطية:

import re

x = "hello, world! Hi! hello!"
word = "hello"
count = sum(1 for _ in re.finditer(r'\b%s\b' % re.escape(word), x))
print(count) # 2

إستخدام split لتحويل النص إلى قائمة كلمات ثم إستخدام التابع count للقوائم:

import re

x = "hello, world! Hi! hello!"
word = "hello"
count = re.split(r'\W', x).count(word)
print(count) # 2
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يمكنك إنشاء دالة بسيطة لإيجاد النص المكرر في نص معين بكل سهولة بدون الحاجة الى التعابير الإعتيادية regular expression أو إستيراد دالة خارجية ، وهذا كود الدالة ، حيث ستحصل على فهرس أماكن الكلمة الذي تبحث عنها

def find_all(a_str, sub):
    start = 0
    while True:
        start = a_str.find(sub, start)
        if start == -1: return
        yield start
        start += len(sub) 

list(find_all("hello, world! Hi! hello!", "hello")) # [0, 18]

أويمكنك استخدام دالة finditer من وحدة re لإيجاد النص المكرر

import re
[m.start() for m in re.finditer('test', 'test test test test')]

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

أعتقد أنك بحاجة لطريقة لأداة متطورة أكثر (تستخدم هذه الطريقة فقط عند البحث عن تكرارات كلمة وليس جمل)، وتعتمد هذه الطريقة على الأداة Tokenizer حيث تقوم هذه الأداة بمعالجة البيانات الممررة لها ليتثنى لنا الحصول على المعلومات التي نريدها مثل عدد مرات تكرار كلمة معينة:

from keras.preprocessing.text import Tokenizer
t = Tokenizer()
x = "hello, world! Hi! hello!"
t.fit_on_texts(x.split())
# الكلمات وتكرارها
# النتيجة ستكون مخزنة في قاموس وبالتالي يمكنك الاستعلام عن عدد مرات تكرار أي كلمة من خلال اسمها
dic=t.word_counts
print(dic)
dic["hello"] # 2
# OrderedDict([('hello', 2), ('world', 1), ('hi', 1)])
# عدد الكلمات
print(t.document_count)# 4
# كل كلمة والرقم الذي يمثلها 
# أو الفهرس الذي يمثلها أو بمعنى أدق ترميزها
print(t.word_index)
# {'hello': 1, 'world': 2, 'hi': 3}

لاحظ أنه أصبح بإمكانك الاستعلام عن عدد مرات ظهور أي كلمة فقط من خلال اسمها. وفي حالة أردت البحث عن جمل فهنا أنصح بالطريقة الأولى التي قدمها عبود.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...