Lucene 4.0 中的词频 [英] Term frequency in Lucene 4.0

查看:43
本文介绍了Lucene 4.0 中的词频的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试使用 Lucene 4.0 计算词频.我的文档频率工作得很好,但不知道如何使用 API 来做词频.这是我的代码:

Trying to calculate term frequency using Lucene 4.0. I got document frequency working just fine, but can't figure out how to do term frequency using the API. Here's the code I have:

private static void addDoc(IndexWriter writer, String content) throws IOException {
    FieldType fieldType = new FieldType();
    fieldType.setStoreTermVectors(true);
    fieldType.setStoreTermVectorPositions(true);
    fieldType.setIndexed(true);
    fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS);
    fieldType.setStored(true);
    Document doc = new Document();
    doc.add(new Field("content", content, fieldType));
    writer.addDocument(doc);
}

public static void main(String[] args) throws IOException, ParseException {
    Directory directory = new RAMDirectory();  
    Analyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_40);
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);
    IndexWriter writer = new IndexWriter(directory, config);
    addDoc(writer, "Lucene is stupid");
    addDoc(writer, "Java is great");
    writer.close();
    IndexReader reader = DirectoryReader.open(directory);
    System.out.println(reader.docFreq(new Term("content", "Lucene")));
    reader.close();
}

我尝试过执行类似 reader.getTermVector(0, "content")... 的操作,但找不到仅获取该文档中特定术语频率的方法.

I've tried doing something like reader.getTermVector(0, "content")... but can't find a method to just get the frequency of a particular term in that document.

谢谢!

推荐答案

K,想通了.您可以从 MultiFields 获取 DocsEnum 对象,然后对其进行迭代.

K, figured it out. You can get a DocsEnum object from MultiFields, and then iterate over that.

private static void addDoc(IndexWriter writer, String content) throws IOException {
    FieldType fieldType = new FieldType();
    fieldType.setStoreTermVectors(true);
    fieldType.setStoreTermVectorPositions(true);
    fieldType.setIndexed(true);
    fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS);
    fieldType.setStored(true);
    Document doc = new Document();
    doc.add(new Field("content", content, fieldType));
    writer.addDocument(doc);
}

public static void main(String[] args) throws IOException, ParseException {
    Directory directory = new RAMDirectory();  
    Analyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_40);
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);
    IndexWriter writer = new IndexWriter(directory, config);
    addDoc(writer, "bla bla bla bleu bleu");
    addDoc(writer, "bla bla bla bla");
    writer.close();
    DirectoryReader reader = DirectoryReader.open(directory);
    DocsEnum de = MultiFields.getTermDocsEnum(reader, MultiFields.getLiveDocs(reader), "content", new BytesRef("bla"));
    int doc;
    while((doc = de.nextDoc()) != DocsEnum.NO_MORE_DOCS) {
          System.out.println(de.freq());
    }
    reader.close();
}

这篇关于Lucene 4.0 中的词频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆