我使用Lucene索引一组句子。我的问题是两个"实体"我创建一个这样的邻近查询:
"EntityA EntityB"~22
我希望检索包含这两个实体的所有句子,最大范围为22个字符。 现在我想使用Lucene Highlighter来检索两个实体之间的单词。 我使用这样的代码来分割片段中的内容,但我不知道如何在两个实体之间的精确点设置片段。
for (int i = 0; i < numTotalHits; i++) {
int id = hits[i].doc;
Document doc = searcher.doc(hits[i].doc);
String text = doc.get("content");
TokenStream tokenStream = TokenSources.getAnyTokenStream(searcher.getIndexReader(), id , "content", analyzer);
String[] frag = getFragmentsWithHighlightedTerms(analyzer, query, "content", text, 10, 10);
for (int j = 0; j < frag.length; j++) {
System.out.println((frag[j].toString()));
}
我的目的是检索实体内的文本,例如:
entity1 --> Canada
entity2 --> Ottawa
sentence --> Natural Resources Canada, Canadian Forest Service, Ottawa.
result --> , Canadian Forest Service,
答案 0 :(得分:0)
“foo bar”~22语法将根据我的知识创建一个22 slop的短语查询。 22指定最多可以有22个移动以使2个令牌以与查询中相同的顺序彼此靠近。 22次移动将涉及使用其他令牌切换位置,并且与令牌长度无关(在此上下文中,令牌表示单词)。
使用短语查询检索相关结果后,我认为没有任何可靠的方法可以在2个实体之间获取整个片段。
如果您可以自己构建查询对象,我实际上会自己使用正则表达式查询,因为您已经提到了22个字符范围,并在其上突出显示。然后,您可以轻松地从突出显示的文本中修剪2个实体。