在perl中替换文本中的一组单词的速度-
上下文优先:我试图在维基百科页面上突出显示歌曲标题。首先,我从页面中获取引用的部分,检查它们是否存在于歌曲标题数据库中,然后突出显示我找到的部分。数据库部分速度惊人,提取歌曲标题(它们被引用)也是如此 因此(我认为)我需要替换HTML中的一组单词(标题),并将它们包装成这样的跨度(对于每个单词): 速度下降了10倍。将速度与NYTProf进行比较,所有差异似乎都在在perl中替换文本中的一组单词的速度-,perl,Perl,上下文优先:我试图在维基百科页面上突出显示歌曲标题。首先,我从页面中获取引用的部分,检查它们是否存在于歌曲标题数据库中,然后突出显示我找到的部分。数据库部分速度惊人,提取歌曲标题(它们被引用)也是如此 因此(我认为)我需要替换HTML中的一组单词(标题),并将它们包装成这样的跨度(对于每个单词): 速度下降了10倍。将速度与NYTProf进行比较,所有差异似乎都在CORE:subcont 为什么呢 (特别感谢您就如何避免替换标签内的文本提出建议,如id=“word\u to\u be\u rep
CORE:subcont
为什么呢
(特别感谢您就如何避免替换标签内的文本提出建议,如
id=“word\u to\u be\u replacement”
)我不知道您实际上在做什么,因为您只找出了您认为问题所在的内容(我们看不到其他内容)
首先,您有加入“”、“、$”、“
,但那只是qq(“$”)
接下来,如果你有一个用引号括起来的交替单词,你不需要在每个单词周围加引号。将单词分组,并在其周围加上引号:
s/ " (?: word1 | word2 | ... ) " /.../x;
我的第一个怀疑是,无论你的模式做什么,都会涉及到更多的回溯
为了避免替换HTML中可能存在的相同文本,我将使用HTML解析器,只查看文本。但是,这将比已经发生的事情花费更长的时间。事实上,没有更多的事情了——我正试图在维基百科页面上突出歌曲标题。首先,我从页面中获取引用的部分,检查它们是否存在于歌曲标题数据库中,然后突出显示我找到的部分。数据库部分速度惊人。我很荣幸能得到你的答案,SirYou可以用所有的问题来更新你的问题。也许你应该考虑使用HTML解析器?关于这一点,有一种说法。@TLP-no-事实上,我一直在使用解析器(Mojo::DOM)并在树中导航,最终得到的结果比较慢。蛮力“到处替换”真的很快,我想保持这一点。
my $re = join '|', map { quotemeta($_) } @words;
$dom =~ s/($re)/<span class="something">$1<\/span>/gi;
my $re = join '|', map { quotemeta(join '', '"', $_, '"') } @words;
s/ " (?: word1 | word2 | ... ) " /.../x;