Lucene使用有效载荷和NLP标签进行搜索

时间:2013-12-11 07:32:59

标签: lucene nlp opennlp

我已经使用包含词性(POS)标记的有效负载的每个单词索引文档。 我想只搜索那些搜索查询字具有该POS标记的文档。 例如。 “访问谷歌”已谷歌作为名词。它应该只显示谷歌作为名词的文档。 可以编写自定义分析器吗? 如何在Similarity类中访问Payload时访问Term?

3 个答案:

答案 0 :(得分:0)

在lucene中执行完全(:google AND:'noun')查询可能很棘手...您的查询是什么以及如何将文档编写到索引中?

答案 1 :(得分:0)

我建议使用跨度查询。跨度查询可以返回Spans对象,该对象允许检查每个匹配令牌的有效负载。

请参阅PayloadTermQuery。

答案 2 :(得分:0)

您可以使用PayloadAttribute类将标记存储为有效负载,然后覆盖DefaultSimilarity类的scorePayload方法以使用标记。在您的情况下,如果标签内容是名词,则您希望返回1,否则返回零。

以下代码段对于设置有效内容信息非常有用

    String tag = "noun";
    byte[] payload = tag.getBytes(); 
    Payload payloadData = new Payload(payload);
    payloadAttr.setPayload(payloadData);

现在使用以下代码行在检索期间使用标记。这必须通过扩展DefaultSimilarity类来完成。

    class PayloadSimilarity extends DefaultSimilarity {
    ...
    ...
    protected float scorePayload(int doc, int start, int end, BytesRef payload) {
        String payloadData = payload.utf8ToString();
        return payloadData.equals("noun")? 1 : 0;
    }
    ...
    ...
    }    

最后在检索过程中将相似性类设置为扩展类。

    searcher.setSimilarity(new PayloadSimilarity());