I'm not sure I understand why the poor sentence must be mauled so relentlessly in your final approach, but it's fine with me if it works for you.

I note that the approach you use does not seem to take account of longest versus shortest matches:  'tor SET6' can never match because  'tor' precedes it in the ordered alternation. Perhaps this is your intent, but be aware that as the code stands, longest-shortest matching behavior depends on the order in which phrases appear in the phrase list. (This is touched on in paragraph 5 of Re^3: phrase match.) See example below.

I also note there is still no provision for a 'sentence' ending in a period, although again, perhaps this contingency will never arise. Example also below.

>perl -wMstrict -le "my @phrases = ( 'kinase i', 'hib', 'tor', 'tor SET6', 'SET6', 'p16(INK4A)', 'cell', 'MAP', 'H1 inhibitor', 'foo bar', 'foo', 'bar', ); for (my $i=0;$i<=$#phrases;$i++) { $phrases[$i]=~s/\s+/ /g; } my $phrases_re = join '|', map { quotemeta } @phrases; for my $sentence (@ARGV) { print '------------------'; print $sentence; $sentence=~s/\s+/ /g; $sentence=' '.$sentence.' '; $sentence =~ s/\s($phrases_re)\s/ \x23$1\x23 /g; $sentence=~s/\s+/ /g; $sentence =~ s/^\s+|\s+$//g; print $sentence; } " "kinase inhibitor SET6 MAP H1 inhibitor activates p16(INK4A) in cell-w +all" "tor tor SET6 SET6" "SET6 tor SET6" "tor tor SET6 SET6." "foo bar bar" "foo foo bar bar" ------------------ kinase inhibitor SET6 MAP H1 inhibitor activates p16(INK4A) in cell-wa +ll kinase inhibitor #SET6# #MAP# #H1 inhibitor# activates #p16(INK4A)# in + cell-wall ------------------ tor tor SET6 SET6 #tor# #tor# #SET6# #SET6# ------------------ SET6 tor SET6 #SET6# #tor# #SET6# ------------------ tor tor SET6 SET6. #tor# #tor# #SET6# SET6. ------------------ foo bar bar #foo bar# #bar# ------------------ foo foo bar bar #foo# #foo bar# #bar#

In reply to Re^2: phrase match by AnomalousMonk
in thread phrase match by newbio

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.