当前位置: 首页 > 面试题库 >

如何从Lucene的特定字段中获取唯一术语列表?

梁池暝
2023-03-14
问题内容

我有几个领域的大型语料库的索引。这些字段中只有一个包含文本。我需要基于此字段从整个索引中提取唯一单词。有谁知道我如何在Java中使用Lucene做到这一点?


问题答案:

您正在寻找术语向量(字段中所有单词的集合以及每个单词的使用次数,不包括停用词)。您将对索引中的每个文档使用IndexReader的getTermFreqVector(docid,field),并在其中填充HashSet

替代方法是使用term()并仅选择您感兴趣的字段的术语:

IndexReader reader = IndexReader.open(index);
TermEnum terms = reader.terms();
Set<String> uniqueTerms = new HashSet<String>();
while (terms.next()) {
        final Term term = terms.term();
        if (term.field().equals("field_name")) {
                uniqueTerms.add(term.text());
        }
}

这不是最佳解决方案,您正在阅读然后丢弃所有其他字段。FieldsLucene
4中有一个类,仅返回单个字段的term(field)。



 类似资料:
  • 我有一个具有如下结构的数据帧: 但是是Any类型,我无法提取它的任何字段。有人能说出我做错了什么,或者我应该遵循什么方法来代替这个吗? 谢谢

  • 问题内容: 说我有一个对象列表,其中包含两个字段和,均为String类型。 如果有可能,如何在不迭代列表的情况下获取所有值的列表? 问题答案: 对象是对内存地址的引用。然后,该对象的字段是指向其他内存地址的其他引用。因此,对象列表是引用列表。因此,列表不可能直接访问对象字段(由引用给出的引用)。最简洁的答案是不。 注意:无论如何,您都会找到可以实现所需功能的API,但该API仍在内部循环。

  • 我知道,如果我尝试使用JPA插入一个记录,如果它违反了唯一约束,它会抛出一个异常,其中包含cause MysqlintegrityConstraintViolationException(原因MysqlintegrityConstraintViolationException)。 我想向用户显示用户友好的消息。因此我想获得发生违规的字段名。我可以使用cause获得消息,它给消息提供类似于密钥'do

  • 我试图从特定的属性分类法中获取术语slug,但什么也得不到。 提前非常感谢!

  • 问题内容: 我有一个看起来像这样的列表列表: 删除重复列表的最佳方法是什么?使用上面的示例,我正在寻找会产生这种情况的代码: 我最初以为我可以使用,但这似乎不适用于列表列表。我还看到了一个使用的示例,但是代码对我来说并不完全清楚。谢谢您的帮助! 问题答案: uniq_animal_groups = set(map(tuple, animal_groups)) 尽管您将得到一组元组而不是一组列表,但

  • 当我打印我的API响应时,它给出了下面的xml作为响应: