اكتشف كلمات سبر مماثلة في روبي
سؤال
أنا على دراية بـ Soundex و (مزدوج) الميتافون ، لكن هذه لا تسمح لي باختبار تشابه الكلمات ككل - على سبيل المثال "مرحبًا" يبدو مشابهًا جدًا لـ "Bye" مختلف تماما.
هل هناك أي مكتبات في روبي ، أو أي طرق تعرفها ، قادرة على تحديد التشابه بين كلمتين؟ (إما أن يكون منطقية/غير متشابهة ، أو عددي 40 ٪ متشابهة)
تعديل: نقاط إضافية إضافية إذا كانت هناك طريقة سهلة "لإسقاط" لهجة أو لغة مختلفة!
المحلول
أعتقد أنك تصف مسافة Levenshtein. ونعم ، هناك جواهر لذلك. إذا كنت في روبي نقي ، فاذهب إلى جوهرة النص.
$ gem install text
المستندات لديك المزيد من التفاصيل ، ولكن إليك جوهره:
Text::Levenshtein.distance('test', 'test') # => 0
Text::Levenshtein.distance('test', 'tent') # => 1
إذا كنت موافقًا على الامتدادات الأصلية ...
$ gem install levenshtein
الاستخدام مشابه. الأداء جيد جدا. (إنه يتعامل مع 1000 تصحيحات إملائية في الدقيقة على أنظامي.)
إذا كنت بحاجة إلى معرفة مدى تشابه كلمتين ، فاستخدم المسافة على طول الكلمة.
إذا كنت تريد اختبار تشابه بسيط ، فكر في شيء مثل هذا:
لم يخبر ، ولكن مباشرة إلى الأمام:
String.module_eval do
def similar?(other, threshold=2)
distance = Text::Levenshtein.distance(self, other)
distance <= threshold
end
end
نصائح أخرى
يمكنك أولاً معالجة الكلمات المسبقة باستخدام قاعدة بيانات Thesaurus ، والتي ستحول الكلمات ذات معنى مماثل لنفس الكلمة. هناك العديد من قواعد بيانات Thesaurus هناك ، للأسف لم أتمكن من العثور على واحدة لائقة مجانية للغة الإنجليزية ( http://www.gutenberg.org/etext/3202 هو الشخص الذي وجدته ، لكن هذا لا يوضح العلاقات التي تتمتع بها الكلمات المحددة (مثل مماثلة ؛ عكس ؛ معنى بديل ؛ إلخ) ، لذلك كل الكلمات على نفس الخط لها بعض العلاقة ، لكنك لن تعرف ما هي هذه العلاقة)
ولكن على سبيل المثال بالنسبة إلى الهنغارية ، هناك قاعدة بيانات جيدة مجانية ، لكن ليس لديك Soundex/Metaphone للنصوص المجرية ...
إذا كان لديك قاعدة البيانات التي تكتب برنامجًا يسرع معالجة النصوص ليست صعبة للغاية (إنها في نهاية المطاف عبارة عن تبادل بحث بسيط ، ولكن قد ترغب في معالجة قاعدة بيانات Thesaurus باستخدام Simplex أو الميثافون أيضًا)