从全文搜索结果中提取小的相关位文本(如 Google 所做的那样)

Posted

技术标签:

【中文标题】从全文搜索结果中提取小的相关位文本(如 Google 所做的那样)【英文标题】:Extract small relevant bits text (as Google does) from the full text search results 【发布时间】:2010-10-31 13:27:09 【问题描述】:

我在一个论坛数据库中实现了全文搜索,我想显示 以谷歌的方式搜索结果。即使对于一个很长的 html 页面也只有两三个 搜索结果列表中显示的文本行。通常这些是行 其中包含一个搜索词。

如何根据文本本身和搜索词提取几行文本的好算法是什么。我可以想出一些简单的方法,比如在文本中出现搜索词之前使用一行文本,然后在之后使用一行——但这似乎太简单了。

想了解一些方向、想法和见解。

谢谢。

【问题讨论】:

添加了自然语言处理 (nlp) 标签 【参考方案1】:

专注于内容的开头。想想当你访问博客时你会看哪里。开头的段落告诉你文章的方向是否正确。所以在你的算法中反映这一点是有意义的。

检查搜索词在标题(H1、H2 等)中的出现情况并给予它们更高的优先级。

这应该让你开始。

【讨论】:

【参考方案2】:

如果您正在寻找比“前/后行”方法更高级的东西,摘要器可能会解决问题。

这是一个基于朴素贝叶斯的系统:http://classifier4j.sourceforge.net/

贝叶斯是许多垃圾邮件过滤器使用的统计系统 - 几年前我研究了贝叶斯摘要器,发现它们在摘要文本方面做得很好,只要有大量的文本需要处理。不过,我实际上并没有尝试过上面的库,所以你的里程可能会有所不同。

【讨论】:

【参考方案3】:

您是否尝试过代码中的“搜索词出现之前/之后的行”,以查看对于这种简单的编码投资,结果是否足以满足您的需求?可能已经够了?

否则,您可以选择句子片段:所以不要在行上分开,而是在换行符、句号、逗号、间隔的连字符等处分开。然后显示包含搜索词的片段。您可以将每个匹配的句子片段用“...”之类的东西分开。

如果你得到很多这样的片段,你可以尝试对这些片段进行优先级排序,按优先级降序排列,只显示其中的第一个 n。和/或将片段缩减为仅搜索词和搜索词周围的几个词。

只是一些可以帮助您入门的非正式想法?

【讨论】:

以上是关于从全文搜索结果中提取小的相关位文本(如 Google 所做的那样)的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch基础3:全文搜索

SQLite 全文搜索相关性排名

(VBA Excel) 从字符串中提取文本和相关字母并输出结果

3 中文文本中的关键字提取

Perl 脚本自动提取《人民日报》全文数据库中的动态词频数据

如何按“块”文本拆分解析的文本?