16

كود روبي لتفكيك كلمات جملة ما وتضمينها في مصفوفة

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

مثلا :

params[:txt] = "How are you ?"
Array = ["How","are",you","?"]

وهذا هو الكود أحببت أن أشاركه معكم و أتمنى أن أستقبل أرائكم :

txt_long = params[:s_txt].length.to_i
for x in 0..txt_long
    if params[:s_txt][x] == " "
        counter = counter.to_i + 1.to_i
    end
end

comma = Array.new(counter.to_i)
x = 0

for j in 0..txt_long
    if params[:s_txt][j] == " "
        comma[x] = j.to_i
        x = x.to_i + 1.to_i
    end
end

words = Array.new((counter.to_i + 1.to_i))

for x in 0..counter.to_i
    if x == 0
        words[x] = params[:s_txt][0..comma[x.to_i].to_i - 1.to_i]
    elsif x == counter.to_i
        words[x] = params[:s_txt][comma[x.to_i - 1.to_i].to_i + 1.to_i..txt_long.to_i]
    else
        words[x] = params[:s_txt][comma[x.to_i - 1.to_i].to_i + 1.to_i..comma[x.to_i].to_i - 1.to_i]
    end
end

طبعاً لم أستخدم البرمجة الكائنية المنحى في برمجة هذا الكود و لكن سأسعى لتحويله إلى Class و مجموعة Methods تقوم بهذا العمل .

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

لمن يريد كود مشابه بPHP

فهناك دالة جاهزة أيضا ترجع الكلمات إلى مصفوفة

explode(' ', 'this is a string');

// return
//array('this', 'is', 'a', 'string')
// the first parameter is the delimiter, we use 'space' so separate words
// the second is the string

هناك دالة مشابهة في روبي لكنها تقوم بإرجاع الأسطر في مقالة مثلا كمصفوفة أما ككلمات صراحة بحثت و لم أجد دالة تقوم بهذا العمل , مشكور أخي :) .

تلك الدالة على حسب ما أظن تقوم بفصل المقالة على حسب وسم \n او \br

تستطيع الولوج إلى كودها الأصلي والتعديل وجعلها تفصل بالفراغات

صراحة مواضيع التعديل على الكود المصدري إلى الأن لم أتطرق إليها أبداً , لو عندك خبره في روبي ممكن أتواصل معك عندي سؤالين لو ممكن ؟

آسف ولكن لا خبرة لي في روبي

بالمناسبة وجدت دالتك التي هي ضالتك D:

الدالة هي split ولها نفس مفهوم explode

لكن كتابة الكود بنفسك أمر جيد أيضا، فهو يطور المهارات وتكون مستعدا في حال لم تجد دالة تقوم بالوظيفة مستقبلا

هل تقصد ان ليلة الأمس كانت هباءاً منثورة ههههه , حتى طريقة البحث تختلف موفق و مشكور :) .

تستطيع استخراج الكلمات ببساطة باستخدم:

params[:txt].scan /\S+/

تستطيع استخراج الكلمات ببساطة باستخدم:

"params[:txt].scan /\S+/"a

بدون "a"

يبدو أنك مبتدأ في Ruby أنصحك بالتعلم من RubyMonk و مراجعة ruby-doc.org

for عادة ﻻ تستخدم في Ruby

أكثر شيء يستخدم مكانها each

مثلا: params[:txt].each { |letter| puts letter }"aa"

تجاهل الـ "aa"

شكراً اخي , هل يمكننا التواصل على الفيسبوك ؟

كودك جدا كبير ومعقد ٫٫

هذا هو كودي لو كانت دالة split او regex غير متوفر :)

ما شاء الله ربي يوفقك , لكن للامانه ممكن انتَ ما فهمت الكود الخاص بي و العبد لله مثلك صراحة لم أفهم الكود الخاص بك .

شكرا على أسماء الدوال :) ولو عندك خبره في روبي ممكن إضافة عالفيسبوك ؟