【发布时间】:2010-10-11 14:10:17
【问题描述】:
我正在编写一个在大部分文本中搜索术语的 Perl 脚本。我想向用户显示的是搜索词周围文本的一小部分,因此用户可以了解使用此搜索词的位置的上下文。谷歌搜索结果是我试图完成的一个很好的例子,你的搜索词的上下文显示在链接的标题下。
我的基本搜索使用这个:
if ($text =~ /$search/i ) {
print "${title}:${text}\n";
}
($title 包含在其中找到搜索词的项目的标题) 不过这太多了,因为有时 $text 会包含数百行文本。
这将显示在网络上,所以我可以只提供标题作为实际文本的链接,但没有用户上下文。
我尝试修改我的正则表达式以捕获搜索词之前的 4 个词和之后的 4 个词,但如果搜索词位于 $text 的开头或结尾,则会遇到问题。
什么是完成此任务的好方法?我尝试搜索 CPAN,因为我确定有人为此提供了一个模块,但我想不出要搜索的正确术语。如果可能,我希望喜欢在没有模块的情况下执行此操作,因为在这里安装模块很痛苦。有人有什么想法吗?
【问题讨论】:
-
嗯 - 我找到了 Search::Tools::HiLiter (search.cpan.org/~karman/Search-Tools-0.22/lib/Search/Tools/…),但它看起来有点笨重而且不够灵活......不过它可以满足我的需求。
-
当您尝试在之前/之后捕获 4 个单词时,您的正则表达式是什么样的?
-
嗯 - 我把它从代码中去掉了,所以我想我做了类似 /(\S+\s+){1,4}($search)(\S+ \s+){1,4}/
-
其实大括号里应该是{0,4}。但我认为它以某种方式遗漏了文字......
标签: perl search full-text-search