查询扩展和关键字提取

概述

whoosh提供了计算一组文档的“关键术语”的方法。对于这些方法,“关键术语”基本上是指在给定的文档中频繁出现的术语,但在整个索引集合中相对较少出现。

由于这是一个纯粹的统计操作,而不是自然语言处理或人工智能功能,因此结果的质量将根据内容、文档集合的大小以及提取关键字的文档数而变化。

这些方法对于向用户提供以下功能非常有用:

  • 搜索词扩展。您可以从查询中提取前n个结果的关键字,并将它们作为附加/备用查询词建议给用户尝试。

  • 标签建议。提取单个文档的关键术语可能会为标记文档提供有用的建议。

  • “更像这样”。您可以从一个查询中提取前十个左右结果的关键字(并删除原始查询词),并将这些关键字用作另一个查询的基础,该查询可能使用用户没有想到的术语查找更多文档。

使用

  • 获取更多的文档,比如某个搜索结果。这要求对要匹配的字段进行矢量化或存储,或者您有权访问原始文本(例如从数据库中获取的文本)

    使用 more_like_this() ::

    results = mysearcher.search(myquery)
    first_hit = results[0]
    more_results = first_hit.more_like_this("content")
    
  • 提取a中前n个文档的关键字 whoosh.searching.Results 对象。 这要求字段是矢量化的或是存储的.

    使用 key_terms() 方法 whoosh.searching.Results 对象从结果集的前n个文档中提取关键字。

    例如,提取 five 关键术语来自 content 顶部区域 ten 结果对象的文档:

    keywords = [keyword for keyword, score
                in results.key_terms("content", docs=10, numterms=5)
    
  • 提取任意文档集的关键字。 这要求字段是矢量化的或是存储的.

    使用 document_number()document_numbers() 方法 whoosh.searching.Searcher 对象获取要从中提取关键字的文档的文档编号。

    使用 key_terms() A方法 whoosh.searching.Searcher 要提取关键字,给定文档编号列表。

    例如,假设您有电子邮件索引。从中提取关键术语 content 电子邮件领域 emailto 字段包含 matt@whoosh.ca ::

    with email_index.searcher() as s:
        docnums = s.document_numbers(emailto=u"matt@whoosh.ca")
        keywords = [keyword for keyword, score
                    in s.key_terms(docnums, "body")]
    
  • 从索引以外的任意文本提取关键字。

    使用 key_terms_from_text() A方法 whoosh.searching.Searcher 要提取关键字,给定文本:

    with email_index.searcher() as s:
        keywords = [keyword for keyword, score
                    in s.key_terms_from_text("body", mytext)]
    

扩展模型

这个 ExpansionModel 中的子类 whoosh.classify 模块为关键词实现不同的权重功能。这些模型从Terrier的原始Java实现转换为Python。