Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^5: substitution in textual area of HTML file

by marto (Archbishop)
on Mar 10, 2020 at 19:29 UTC ( #11114098=note: print w/replies, xml ) Need Help??


in reply to Re^4: substitution in textual area of HTML file
in thread substitution in textual area of HTML file

This doesn't seem to be the case:

#!/usr/bin/perl use strict; use warnings; use feature 'say'; use Mojo::DOM; my $html = '<ul><div class="txt" style="position:absolute; left:84px; +top:73px;"><span id="f1" style="font-size:11px;vertical-align:baselin +e;color:rgba(0,0,0,1);">technology of S2S translation, <b>also</b> kn +own as <b>Spoken</b> Language Translation (SLT),</span></div><div cla +ss="txt" style="position:absolute; left:44px; top:73px;"><span id="f1 +" style="font-size:11px;vertical-align:baseline;color:rgba(0,0,0,1);" +>is a new application of AI,</span></div><li>there</li><li>everyone</ +li></ul> '; my $dom = Mojo::DOM->new( $html ); $dom->find('span')->each( sub { $_->content( $_->content =~ s/Spoken/D +erp/r ) } ); say $dom->content;

Output:

<ul><div class="txt" style="position:absolute; left:84px; top:73px;">< +span id="f1" style="font-size:11px;vertical-align:baseline;color:rgba +(0,0,0,1);">technology of S2S translation, <b>also</b> known as <b>De +rp</b> Language Translation (SLT),</span></div><div class="txt" style +="position:absolute; left:44px; top:73px;"><span id="f1" style="font- +size:11px;vertical-align:baseline;color:rgba(0,0,0,1);">is a new appl +ication of AI,</span></div><li>there</li><li>everyone</li></ul>

The <b></b> tags around 'also' are still there, and replacing 'Spoken' with 'Derp' also maintains the associated <b></b> tags. Perhaps you've altered some code?

Replies are listed 'Best First'.
Re^6: substitution in textual area of HTML file
by Takamoto (Scribe) on Mar 10, 2020 at 20:27 UTC

    I was using your first code which has $id->text instead of $id->content. Using "content" made the trick.

    I am using the first script because of the nice loop. My final goal is to wrap the matching string(s) between tags (a simple replacement of match with tag+match+tag should do it). The hard part is that I need to match n-grams that possibly are split between two nodes (end of 1st node and begin of next one), with the loop I may find some working solution (my idea is to scan a window of two nodes at a time). Why this? Because I am parsing the output of pdftohtml which splits natural language sentences into lines, each line wrapped in its own tags. In the example above, it could be that I need to match the 2-gram "Translation is", which is in 2 adjacent DOMs. This is quite challenging (at least for my 0-parsing-abilities), but you have brought me near my goal. So time to play now.

    Edit

    Just for the sake of experimenting/learning, I tried with these two HTML snippets:

    my $html = '<ul><div class="txt" style="position:absolute; left:84px; +top:73px;"><span id="f1" style="font-size:11px;vertical-align:baselin +e;color:rgba(0,0,0,1);">technology of S2S translation, <b>also</b> kn +own as Spoken Language Translation (SLT),</span></div><div class="txt +" style="position:absolute; left:44px; top:73px;"><span id="f1" style +="font-size:11px;vertical-align:baseline;color:rgba(0,0,0,1);">is a n +ew application of AI,</span></div><li>there</li><li>everyone</li></ul +> '; my $html = '<ul><div class="txt" style="position:absolute; left:84px; +top:73px;"><span id="f1" style="font-size:11px;vertical-align:baselin +e;color:rgba(0,0,0,1);">technology of S2S translation, <b>also</b> kn +own as <p>Spoken</p> Language Translation (SLT),</span></div><div cla +ss="txt" style="position:absolute; left:44px; top:73px;"><span id="f1 +" style="font-size:11px;vertical-align:baseline;color:rgba(0,0,0,1);" +>is a new application of AI,</span></div><li>there</li><li>everyone</ +li></ul> ';

    With the first HTML, using your first script with $id->text, <b>also</b> is not shown, with the second yes. I do not see any rational behind it...

      So ->text will just give you the text, which isn't the same thing as all of the string of HTML within the 'span' tag. ->content is quite different.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11114098]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2020-05-26 17:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    If programming languages were movie genres, Perl would be:















    Results (150 votes). Check out past polls.

    Notices?