Fahmy Mostafa نشر 28 يونيو 2021 أرسل تقرير نشر 28 يونيو 2021 يمكن إستعمال دوال مثل find و rfind للبحث عن نص في نص آخر، لكن هل توجد طريقة تمكنني من إيجاد كل النصوص المكرر في نص معين في بايثون كالتالي على سبيل المثال: >>> x = "hello, world! Hi! hello!" >>> x.find("hello") 0 >>> x.rfind("hello") 18 هل توجد دالة مثل find_all على سبيل المثال؟ 2 اقتباس
1 سمير عبود نشر 28 يونيو 2021 أرسل تقرير نشر 28 يونيو 2021 هناك عدة طرق للقيام بالأمر: إستخدام التعابير النمطية: 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 1 اقتباس
0 عبدالله عبدالرحمن11 نشر 28 يونيو 2021 أرسل تقرير نشر 28 يونيو 2021 يمكنك إنشاء دالة بسيطة لإيجاد النص المكرر في نص معين بكل سهولة بدون الحاجة الى التعابير الإعتيادية 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')] 1 اقتباس
0 Ali Haidar Ahmad نشر 13 سبتمبر 2021 أرسل تقرير نشر 13 سبتمبر 2021 أعتقد أنك بحاجة لطريقة لأداة متطورة أكثر (تستخدم هذه الطريقة فقط عند البحث عن تكرارات كلمة وليس جمل)، وتعتمد هذه الطريقة على الأداة 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} لاحظ أنه أصبح بإمكانك الاستعلام عن عدد مرات ظهور أي كلمة فقط من خلال اسمها. وفي حالة أردت البحث عن جمل فهنا أنصح بالطريقة الأولى التي قدمها عبود. اقتباس
السؤال
Fahmy Mostafa
يمكن إستعمال دوال مثل find و rfind للبحث عن نص في نص آخر، لكن هل توجد طريقة تمكنني من إيجاد كل النصوص المكرر في نص معين في بايثون كالتالي على سبيل المثال:
هل توجد دالة مثل find_all على سبيل المثال؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.