这是一个含糊不清的文字:“一个人看到了一头大象。”
每个单词都有属性:引理、词性和取决于其词性的各种语法属性。
对于“锯”,它就像:
{lemma:see,pos:动词,时态:过去},{lemma:saw,pos:名词,number:单数}
所有这些属性都来自 3rd 方工具,Lucene 本身不参与词消歧。
我想执行类似“pos=verb & number=singular”的查询,而不是在结果中得到“saw”。
我想将不同的语法注释编码成字符串,如 "l:see;pos:verb;t:past|l:saw;pos:noun;n:sg" 并搜索正则表达式 "pos\:verb[^\|]+ n\:sg",但由于性能问题,我绝对负担不起正则表达式查询。
也许可以应用一些带有发布列表有效负载的技巧?
UPD:我的解决方案草稿
以下是我的项目的细节:一个单词可以拥有的解析次数是固定的(比如 8 次)。因此,我想在每个属性的有效负载中插入解析号,并在发布列表相交阶段使用此有效负载。例如,我们有一个 'pos = Verb' 的发布列表,如 ...|...|1.1234|...|...,还有一个 'number = Singular' 的发布列表:...|... |2.1234|...|... 在发布列表处理的所有阶段处理“pos = Verb AND number = single”之类的查询时,将接受“x.1234”条目,直到它们被拒绝的交集阶段因为不对应的解析数字。
我认为这是一个非常紧凑的解决方案,但是将它整合到 Lucene 中会有多难呢?