我有一个数据集,在底层文本上具有多层注释,例如part-of-tags、来自浅解析器的块、名称实体以及来自各种 自然语言处理(NLP) 工具的其他注释。对于类似的句子The man went to the store
,注释可能如下所示:
词 POS 块 NER ==== === ===== ======== DT NP 人 人 NN NP 人 去了VBD副总裁 - 到 PP - DT NP 位置 商店 NN NP 位置
我想使用 Lucene 为一堆带有此类注释的文档编制索引,然后跨不同层执行搜索。一个简单查询的示例是检索所有将Washington标记为person的文档。虽然我并不完全致力于这种表示法,但从语法上讲,最终用户可能会按如下方式输入查询:
查询:Word=Washington,NER=Person
我还想做更复杂的查询,涉及跨不同层的注释顺序,例如,查找所有有单词标记的文档,然后是单词,arrived at
然后是单词标记的location。这样的查询可能如下所示:
查询:"NER=Person Word=arrived Word=at NER=Location"
用 Lucene 解决这个问题的好方法是什么?是否有索引和搜索包含结构化标记的文档字段?
有效载荷
一个建议是尝试使用 Lucene有效载荷。但是,我认为有效载荷只能用于调整文档的排名,而不是用于选择返回的文档。
后者很重要,因为对于某些用例,包含模式的文档数量确实是我想要的。
此外,仅检查与查询匹配的术语的有效负载。这意味着有效载荷甚至只能帮助第一个示例查询的排名,Word=Washington,NER=Person
因此我们只想确保该术语Washingonton
被标记为Person
. 但是,对于第二个示例查询, "NER=Person Word=arrived Word=at NER=Location"
我需要检查未指定且因此不匹配的术语上的标签。