تعد خوارزمية البحث عن النص طريقة أساسية في معالجة النصوص واسترجاع المعلومات. تسمح لنا هذه الخوارزمية بتحديد وتحديد تكرارات سلسلة فرعية(أو نمط) داخل جزء أكبر من النص.
كيف تعمل
- ابدأ بجزء أكبر من النص(أو المستند) وسلسلة فرعية للبحث عنها.
- كرر خلال كل حرف من أحرف النص بالتسلسل.
- قارن السلسلة الفرعية بجزء من النص له نفس طول السلسلة الفرعية. إذا تم العثور على تطابق ، قم بتسجيل الموضع الحالي.
- انتقل إلى الموضع التالي واستمر في المقارنة.
مثال
ضع في اعتبارك النص: "دعونا نبحث عن سلسلة فرعية داخل هذا النص لنرى كيف تعمل الخوارزمية."
والسلسلة الفرعية للبحث عن: "substring"
- ابدأ من الموضع 0. قارن
Let'
مع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 1. قارن
et's
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 2. قارن
t's
"مع" سلسلة فرعية. لا يوجد تطابق. - انتقل إلى الموضع 3. قارن
's s
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 4. قارن
se
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 5. قارن
sea
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 6. قارن
earc
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 7. قارن
arch
مع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 8. قارن
rch
"مع" سلسلة فرعية. لا يوجد تطابق. - انتقل إلى الموضع 9. قارن
ch w
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 10. قارن
h wi
مع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 11. قارن "
wit
مع" سلسلة فرعية. لا يوجد تطابق. - انتقل إلى الموضع 12. قارن
with
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 13. قارن
ithi
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 14. قارن
thin
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 15. قارن
hinn
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 16. قارن
in t
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 17. قارن
n th
مع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 18. قارن "
thi
مع" سلسلة فرعية. لا يوجد تطابق. - انتقل إلى الموضع 19. قارن
this
مع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 20. قارن
his
"مع" سلسلة فرعية. لا يوجد تطابق. - انتقل إلى الموضع 21. قارن
is t
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 22. قارن
s te
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 23. قارن
ubst
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 24. قارن
bstr
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 25. قارن
stre
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 26. قارن
trin
مع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 27. قارن
ring
مع "سلسلة فرعية". تم العثور على المباراة ، رقم قياسي 27.
تم العثور على السلسلة الفرعية "السلسلة الفرعية" في الموضع 27 داخل النص.
رمز المثال في C ++
#include <iostream>
#include <string>
#include <vector>
std::vector<int> textSearch(const std::string& text, const std::string& query) {
std::vector<int> positions;
for(int i = 0; i <= text.length()- query.length(); ++i) {
int j = 0;
while(j < query.length() && text[i + j] == query[j]) {
++j;
}
if(j == query.length()) {
positions.push_back(i);
}
}
return positions;
}
int main() {
std::string text = "Let's search for a substring within this text to see how the algorithm works.";
std::string query = "substring";
std::vector<int> result = textSearch(text, query);
std::cout << "Substring found at positions: ";
for(int pos: result) {
std::cout << pos << ";
}
std::cout << std::endl;
return 0;
}
في هذا المثال ، textSearch
يتم استخدام الوظيفة للعثور على مواضع "السلسلة الفرعية" ضمن النص. ستكون النتيجة متجهًا يحتوي على مواضع البداية للمباريات.