有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

默认情况下,Lucene(java框架)是否根据术语计算文档的tfidf和余弦相似性?

我正在开发一个基于搜索引擎的应用程序,当时正在开发Lucene java框架,我对Lucene默认提供的评分功能感到困惑,即评分功能是默认实现tf idf和余弦相似性,还是我们必须做其他事情

public class LuceneTester {

String indexDir =  "C:\\Users\\hamda\\Documents\\NetBeansProjects\\luceneDemo\\Index";
String dataDir =  "C:\\Users\\hamda\\Documents\\NetBeansProjects\\luceneDemo\\Data";
Indexer indexer;
Searcher searcher;
public static void main(String[] args) {
  LuceneTester tester;
  try {
     tester = new LuceneTester();
    tester.createIndex();
     tester.search("DataGuides");
  } catch (IOException e) {
     e.printStackTrace();
  } catch (ParseException e) {
     e.printStackTrace();
  }
}

private void createIndex() throws IOException{

  indexer = new Indexer(indexDir);
  int numIndexed;
  long startTime = System.currentTimeMillis();  
  numIndexed = indexer.createIndex(dataDir, new TextFileFilter());
  long endTime = System.currentTimeMillis();
  indexer.close();
  System.out.println(numIndexed+" File indexed, time taken: "
     +(endTime-startTime)+" ms");       
}

我在下面的搜索功能的末尾获得文档分数

private void search(String searchQuery) throws IOException, ParseException{
  searcher = new Searcher(indexDir);
  long startTime = System.currentTimeMillis();
  TopDocs hits = searcher.search(searchQuery);
  long endTime = System.currentTimeMillis();

  System.out.println(hits.totalHits +
     " documents found. Time :" + (endTime - startTime));
  for(ScoreDoc scoreDoc : hits.scoreDocs) {
     Document doc = searcher.getDocument(scoreDoc);
        System.out.println(scoreDoc.score+" File: "
        + doc.get(LuceneConstants.FILE_PATH));
  }
  searcher.close();
}
}

我在谷歌上搜索了一下,发现了以下内容: how can I implement the tf-idf and cosine similarity in Lucene? 我们将非常感谢您的帮助:)


共 (2) 个答案

  1. # 2 楼答案

    当我在http://lucene.apache.org/中查看一些细节时,我发现lucene评分模型默认使用这个类DefaultSimilarityhttp://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html,它扩展了TFIDFSimilarity类http://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html 因此,在这些文档中,评分模型默认实现tf idf和余弦相似性。不管怎样,我可能错了,所以你可以纠正我:)