【问题标题】:Lucene searching using payload and NLP tagsLucene 使用有效负载和 NLP 标签进行搜索
【发布时间】:2014-01-07 21:45:02
【问题描述】:

我已经对文档进行了索引,其中每个单词都具有包含词性 (POS) 标记的有效负载。 我只想搜索搜索查询词具有该 POS 标签的那些文档。 例如。 'access google' 有 google 作为名词。它应该只显示以 google 作为名词的文档。 编写自定义分析器有帮助吗? 在 Similarity 类中访问 Payload 时如何访问 Term?

【问题讨论】:

    标签: lucene nlp opennlp


    【解决方案1】:

    在 lucene 中进行精确 (:google AND :'noun') 查询可能会很棘手...您的查询是什么以及如何将文档写入索引?

    【讨论】:

      【解决方案2】:

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

      请参阅 PayloadTermQuery。

      【讨论】:

        【解决方案3】:

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

        下面的代码sn -p对设置payload信息很有用

            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());
        

        【讨论】:

        • 但这总是会抑制动词。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        相关资源
        最近更新 更多