查询扩展和关键字提取¶
概述¶
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。