http://www.perlmonks.org?node_id=1012198


in reply to Re^13: partial match between 2 files
in thread partial match between 2 files

A problem exists like this gets only longest common sub string.suppose my dictionary has words crick, cricketer and testing input is cricking,the match should be to crick but the program gives cricketer as closest matching string

Replies are listed 'Best First'.
Re^15: partial match between 2 files
by Athanasius (Archbishop) on Jan 10, 2013 at 16:30 UTC

    Hello lakssreedhar,

    As I understand it, you’re writing a script which accepts as input a word (which I will call the target) and the name of a dictionary file. The purpose of the script is to identify the best match for the target (if any) among the entries in the dictionary. Well, there would seem to be four possible ways in which a dictionary entry can match the target word:

    1. They are identical
    2. The target is a substring of the dictionary entry
    3. The dictionary entry is a substring of the target
    4. They share a common substring.

    I suppose it’s obvious that if (1) is satisfied, this is the best match. And from earlier posts in this thread, it appears that if none of (1), (2), or (3) is true, then (4) looks for the the longest common substring (i.e., the “best” match is the one with the longest substring in common). But now things get murky. What if both (2) and (3) are satisfied? For example, the target is reread and the dictionary contains both read and rereading? And this is only one example of the sort of edge cases that need to be considered.

    suppose my dictionary has words crick, cricketer and testing input is cricking,the match should be to crick

    OK, but why? What are the rules for a “best match”? These rules need to be specified very precisely (and of course only you can do this, since only you know what your script is intended to do).

    Here is how I would approach the problem:

    • Think through the above considerations, and come up with a precise set of rules describing exactly what is the “best match” in all possible cases.
    • Illustrate each of these rules with sample input (target word and dictionary contents) together with the desired output.
    • Use this sample input to create a simple test harness that will test your script. (For example, see Test::Tutorial and What are some good testing references?.)
    • Design an algorithm to apply the rules for matching, drawing on the advice and techniques given in other posts in this thread.
    • Implement the algorithm and test it by running the test harness.

    Hope that gives you some help,

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

      ok let me try it out this ways.Thanks