#!/usr/bin/perl use strict; use warnings; use POSIX qw(locale_h); my $old_locale = setlocale (LC_CTYPE); setlocale (LC_CTYPE, 'ca_ES.iso885915@euro'); use locale; my $content = qq{ La mitad de las personas con VIH requiere de una atención psicológica y emocional derivada del impacto del diagnóstico o de las consecuencias de la propia infección, una cifra que dobla a la de la población general, según las conclusiones de las IV Jornadas de Divulgación sobre VIH que han reunido a unos doscientos profesionales, pacientes y estudiantes en el hospital Reina Sofía de Murcia. En el congreso, organizado por Amuvih en colaboración con el servicio de Proyección Social y Voluntariado de la Universidad de Murcia y Abbott, ha determinado que las personas que viven con VIH demandan especialmente atención a su salud mental para mejorar su calidad de vida, "una asignatura pendiente a pesar de los innumerables avances farmacológicos". Entre otros factores, las jornadas establecieron que en la situación de "vulnerabilidad" de las personas con VIH influyen "el propio diagnóstico, la comunicación de su situación a los allegados, el inicio del tratamiento, las fluctuaciones a lo largo de la infección, la pérdida de salud y deterioro físico, así como los efectos adversos del tratamiento". Igualmente, otros factores importantes son la pérdida de la motivación, el hastío, el estigma y rechazo, así como las nuevas parejas sexuales, los cambios familiares, laborales y sociales, entre otras cosas, que derivan en "riesgo de depresión mayor, trastorno distímico, trastorno por ansiedad generalizada o trastorno de pánico". }; my $tag = 'span'; my $class = "lighligth"; my @expressions = ('psicológica atención::20', 'otros hastío::11', 'pánico distímico::8'); my @lines = map { [grep {defined $_->[1]} map {/(\w+)/; [$_, $1]} split] } split "\n", $content; my %lookup; for my $lineIdx (0 .. $#lines) { my $line = $lines[$lineIdx]; next if !@$line; push @{$lookup{lc $line->[$_][1]}}, [$lineIdx, $_] for 0 .. $#$line; } foreach my $currExp (@expressions) { next if ($currExp !~ /::/); my ($exp, $distance) = split ("::", $currExp); my ($par1, $par2) = map {lc} split (' ', $exp); next if !exists $lookup{$par1} || !exists $lookup{$par2}; for my $par1Entry (@{$lookup{$par1}}) { for my $par2Entry (@{$lookup{$par2}}) { next if $par1Entry->[0] != $par2Entry->[0]; # same line check next if abs ($par1Entry->[1] - $par2Entry->[1]) > $distance + 1; my $par1Ref = \$lines[$par1Entry->[0]][$par1Entry->[1]][1]; my $par2Ref = \$lines[$par2Entry->[0]][$par2Entry->[1]][1]; $$par1Ref = "<$tag $class>$$par1Ref"; $$par2Ref = "<$tag $class>$$par2Ref"; } } } @lines = map { [map {$_->[0] =~ s/\w+/$_->[1]/; $_->[0]} @$_] } @lines; print "@{$lines[$_]}\n" for 0 .. $#lines;