Java 使用ApacheLucene创建引用向量

Java 使用ApacheLucene创建引用向量,java,lucene,Java,Lucene,我们正在开发一个检测剽窃的应用程序。我们正在使用ApacheLucene进行文档索引。我需要使用我们创建的索引为每个文档创建一个发生向量。我想知道是否有一种方法可以使用ApacheLucene实现这一点。我试着用矢量,但找不到合适的方法。我们非常感谢您的任何建议或帮助 谢谢。如果您想实现这一点,可以使用RAMDirectory来存储您的文档(假设您只想对一个文档执行此操作)。 然后,您可以使用IndexReader.termDocs(术语)获取此目录的术语文档,其中包含文档id(如果存储一个文档

我们正在开发一个检测剽窃的应用程序。我们正在使用ApacheLucene进行文档索引。我需要使用我们创建的索引为每个文档创建一个发生向量。我想知道是否有一种方法可以使用ApacheLucene实现这一点。我试着用矢量,但找不到合适的方法。我们非常感谢您的任何建议或帮助


谢谢。

如果您想实现这一点,可以使用RAMDirectory来存储您的文档(假设您只想对一个文档执行此操作)。 然后,您可以使用IndexReader.termDocs(术语)获取此目录的术语文档,其中包含文档id(如果存储一个文档,则仅一个)和文档中术语的频率。 然后可以对每个术语执行此操作,以创建发生向量

当然,您也可以对多个文档执行此操作,并一次创建多个发生向量


我确信您希望在documents=>SimpleDocuments中找到相似之处,您可能希望了解Lucene的更相似的实现:

我认为,
TermFreqVector
类可以满足您的需要。它甚至可以给你术语的位置,这样你就可以检测出有序的单词序列。要生成向量,您需要在索引时如下指定:

String text = "text you want to index; you could also use a Reader here";
Document doc = new Document();
doc.add(new Field("text", text, Store.NO, Index.ANALYZED, TermVector.WITH_POSITIONS));
TermPositionVector v = (TermPositionVector) this.reader.getTermFreqVector(docnum, this.textField);
int wordIndex = v.indexOf("want");
int[] positions = v.getTermPositions(wordIndex); // should return the position(s) of the word "want" in your text
在检索时,您可以运行短语查询(例如,“abc”~25)或
SpanQuery
s(必须以编程方式构造)

要从索引中获取术语频率和位置信息,请执行以下操作:

String text = "text you want to index; you could also use a Reader here";
Document doc = new Document();
doc.add(new Field("text", text, Store.NO, Index.ANALYZED, TermVector.WITH_POSITIONS));
TermPositionVector v = (TermPositionVector) this.reader.getTermFreqVector(docnum, this.textField);
int wordIndex = v.indexOf("want");
int[] positions = v.getTermPositions(wordIndex); // should return the position(s) of the word "want" in your text

你能用几句话描述一下这个发生向量应该是什么样子吗?您的意思是检索一组定义术语出现在中的文档吗?csupnig,谢谢您的考虑。假设有一个单词w={a,b,c,d,e}的词汇表,如果文档D1={a,b,c}中的单词a写了2次,b写了2次,c写了一次。那么发生向量应该是V(D1)=。谢谢