代码之家  ›  专栏  ›  技术社区  ›  Julia

如何使用Lucene获取常见短语

  •  5
  • Julia  · 技术社区  · 16 年前

    怎样才能得到这样的短语?我在网上找不到任何有用的东西,所有的建议,链接,提示,特别是例子都很感谢!

    编辑: 我只按标题和内容存储文档:

     Document doc = new Document();
     doc.add(new Field("name", f.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
     doc.add(new Field("text", fReader, Field.TermVector.WITH_POSITIONS_OFFSETS));
    

    我迫切需要从文本内容中索引最常见的短语,刚才我看到这种简单的“单词包”方法有多低效。

    3 回复  |  直到 10 年前
        1
  •  7
  •   Yuval F    16 年前

    朱莉娅,看来你要找的是 n-grams ,特别是 Bigrams (也叫搭配)。

    chapter about finding collocations (PDF) 从曼宁和舒茨那里 Foundations of Statistical Natural Language Processing .

    为了对Lucene做到这一点,我建议使用 Solr 具有 ShingleFilterFactory . this discussion 详情。

        2
  •  0
  •   Favonius    16 年前

    你有没有可能发布你写的任何代码?

    让我们考虑一个例子,其中有两个字段:

    现在在现实生活中,将我的ID:“finding nemo”作为两个不同的可搜索字符串是没有意义的。而我想索引评论中的所有内容。

    所以我要做的是,创建一个文档( org.apache.lucene.document.Document )反对处理这个。。。像这样的

    Document doc = new Document();
    doc.add(new Field("comments","Finding nemo was a very tough job for a clown fish ...", Field.Store.YES, Field.Index.ANALYZED));
    doc.add(new Field("id", "finding nemo", Field.Store.YES, Field.Index.NOT_ANALYZED));
    

    因此,我基本上创建了两个字段:

    1. 评论:我喜欢的地方 Field.Index.ANALYZED
    2. id:我指示lucene储存它的地方,但是 不要 Field.Index.NOT_ANALYZED

    这就是为默认标记器和分析器定制lucene的方法。否则,您可以编写自己的标记器和分析器。

    链接 http://darksleep.com/lucene/

        3
  •  0
  •   Community Mohan Dere    6 年前

    短语上下文丢失的问题可以通过使用PhraseQuery来解决。

    通过使用omitTermFreqAndPositions选项索引字段。 PhraseQuery使用此信息来定位术语之间在一定距离内的文档。

    要视为匹配的项之间的最大允许位置距离称为slop。 距离是按顺序重建短语的词的位置移动次数。

    退房 Lucene's JavaDoc for PhraseQuery

    See this example code which demonstrates how to work with various Query Objects:

    您还可以尝试在BooleanQuery类的帮助下组合各种查询类型。

    推荐文章