পাইথনে উচ্চ পারফরম্যান্সের অস্পষ্ট স্ট্রিং তুলনা, লেভেনস্টেইন বা ডিফ্ল্লিব [বন্ধ] ব্যবহার করুন


127

আমি ক্লিনিকাল বার্তা স্বাভাবিককরণ (বানান পরীক্ষা) করছি যা আমি প্রতিটি প্রদত্ত শব্দ 900,000 শব্দের মেডিকেল অভিধানের বিপরীতে পরীক্ষা করি। সময়ের জটিলতা / পারফরম্যান্স নিয়ে আমি আরও উদ্বিগ্ন।

আমি अस्पष्ट স্ট্রিং তুলনা করতে চাই, তবে কোন গ্রন্থাগারটি ব্যবহার করবেন তা আমি নিশ্চিত নই।

বিকল্প 1:

import Levenshtein
Levenshtein.ratio('hello world', 'hello')

Result: 0.625

বিকল্প 2:

import difflib
difflib.SequenceMatcher(None, 'hello world', 'hello').ratio()

Result: 0.625

এই উদাহরণে উভয়ই একই উত্তর দেয়। আপনি কি মনে করেন যে উভয়ই এক্ষেত্রে একসাথে অভিনয় করে?

উত্তর:


152

আপনি যদি লেভেনস্টেইন এবং ডিফ্লিবের সাদৃশ্যটির সাথে দ্রুত দেখার তুলনা করতে আগ্রহী হন, আমি উভয়কে 3 2.3 মিলিয়ন বইয়ের শিরোনামের জন্য গণনা করেছি:

import codecs, difflib, Levenshtein, distance

with codecs.open("titles.tsv","r","utf-8") as f:
    title_list = f.read().split("\n")[:-1]

    for row in title_list:

        sr      = row.lower().split("\t")

        diffl   = difflib.SequenceMatcher(None, sr[3], sr[4]).ratio()
        lev     = Levenshtein.ratio(sr[3], sr[4]) 
        sor     = 1 - distance.sorensen(sr[3], sr[4])
        jac     = 1 - distance.jaccard(sr[3], sr[4])

        print diffl, lev, sor, jac

আমি তখন আর দিয়ে ফলাফল চক্রান্ত করেছি:

এখানে চিত্র বর্ণনা লিখুন

কৌতূহলীদের জন্য কঠোরভাবে, আমি ডিফ্লিব, লেভেনস্টেইন, সেরেনসেন এবং জ্যাকার্ড মিলের মানগুলির সাথেও তুলনা করেছি:

library(ggplot2)
require(GGally)

difflib <- read.table("similarity_measures.txt", sep = " ")
colnames(difflib) <- c("difflib", "levenshtein", "sorensen", "jaccard")

ggpairs(difflib)

ফলাফল: এখানে চিত্র বর্ণনা লিখুন

ডিফ্লিব / লেভেনস্টেইনের মিলটি সত্যিই বেশ আকর্ষণীয়।

2018 সম্পাদনা: আপনি যদি একই ধরণের স্ট্রিং সনাক্ত করতে কাজ করে থাকেন তবে আপনি মিনহ্যাশিংও পরীক্ষা করে দেখতে পারেন - এখানে দুর্দান্ত একটি ওভারভিউ রয়েছে । মিনহাশিং লিনিয়ার সময়ে বড় পাঠ্য সংগ্রহের মধ্যে সাদৃশ্য খুঁজে পেয়ে আশ্চর্যজনক। আমার ল্যাব এখানে এমন অ্যাপ্লিকেশন রেখেছিল যা এখানে মিনহ্যাশিং ব্যবহার করে পাঠ্য পুনঃব্যবহার সনাক্তকরণ এবং ভিজ্যুয়ালাইজ করে: https://github.com/YaleDHLab/intertext


2
এটি দুর্দান্ত শীতল! তাহলে এ বিষয়ে আপনার কী গ্রহণ? লেভেনস্টাইন কি কেবল শিরোনাম-দৈর্ঘ্যের স্ট্রিংগুলির জন্য খারাপ?
উলফ আসলাক

3
আপনি আপনার মিলের মেট্রিকটিতে যা ক্যাপচার করতে চাইছেন তা সত্যিই নির্ভর করে ...
duhaime

2
আমি মনে করি ডিফ্লিব এবং লেভেনস্টেইনের মধ্যে কিছু মতবিরোধের কারণ ব্যাখ্যা করা যেতে পারে কারণ ডিফ্লিবের দ্বারা ব্যবহৃত অটোজঙ্ক হিউরিস্টিক। আপনি যদি এটি অক্ষম করেন তবে কি হবে?
মাইকেল

2
এটা একটা ভালো প্রশ্ন. অটোজঙ্ক ফিল্টারটি কেবল তখনই কার্যকর হয় যদি পর্যবেক্ষণের সংখ্যা> 200 হয় তবে আমি নিশ্চিত নই যে এই নির্দিষ্ট ডেটাসেট (বইয়ের শিরোনাম) খুব বেশি প্রভাবিত হয়েছে, তবে এটি তদন্তের যোগ্য ...
দুহাইম

2
@ দুহাইম, এই বিশদ বিশ্লেষণের জন্য আপনাকে ধন্যবাদ। আমি এই ধরণের প্লটগুলিতে নতুন এবং সেগুলি কীভাবে ব্যাখ্যা করব সে সম্পর্কে কোনও ধারণা নেই। প্লটগুলি কী বলা হয়, যাতে আমি তাদের সন্ধান করি এবং সেগুলি সম্পর্কে জানতে পারি?
জ্যাচ ইয়ং

104
  • ডিফ্ল্যাব.সিকোয়েন্সম্যাচার রাটক্লিফ / ওবারশেল্প অ্যালগরিদম ব্যবহার করে এটি দুটি স্ট্রিংয়ের অক্ষরের মোট সংখ্যার দ্বারা বিভক্ত মিলের অক্ষরের দ্বিগুণ সংখ্যাকে গণনা করে।

  • লেভেনস্টেইন লেভেনস্টেইন অ্যালগরিদম ব্যবহার করে এটি একটি স্ট্রিংকে অন্যটিতে রূপান্তর করতে প্রয়োজনীয় ন্যূনতম সংখ্যার গণনা করে

জটিলতা

সিকোয়েন্সম্যাচার সবচেয়ে খারাপ ক্ষেত্রে চতুর্ভুজ সময় এবং সিকোয়েন্সগুলি কমন উপাদানগুলির মধ্যে সাধারণভাবে মিলিত হয় তার উপর জটিল পদ্ধতিতে প্রত্যাশিত-আচরণ আচরণ নির্ভর করে। ( এখান থেকে )

লেভেনস্টেইন হল ও (এম * এন), যেখানে এন এবং এম দুটি ইনপুট স্ট্রিংয়ের দৈর্ঘ্য।

কর্মক্ষমতা

লেভেনস্টাইন মডিউলটির উত্স কোড অনুসারে : লেভেনস্টেইনের ডিফ্লিব (সিকোয়েন্সম্যাচার) এর সাথে কিছুটা ওভারল্যাপ রয়েছে। এটি কেবল স্ট্রিংগুলিকে সমর্থন করে, স্বেচ্ছাসেবী ক্রমের প্রকার নয়, তবে অন্যদিকে এটি আরও দ্রুত much


তথ্যের জন্য অনেক ধন্যবাদ. আমি আরও বিশদ যুক্ত করেছি। এটি এখানে: I am doing clinical message normalization (spell check) in which I check each given word against 900,000 word medical dictionary. I am more concern about the time complexity/performance.আপনি কি মনে করেন যে উভয়ই এক্ষেত্রে একসাথে অভিনয় করে।
ম্যাগি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.