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

السؤال

نشر

يمكن إستعمال دوال مثل 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...