我试图使同义词正常工作,为此,我试图理解令牌流中更好的图。
为此,我构建了以下代码:
builder.addTokenFilter(FlattenGraphFilterFactory.class); // nothing changes with this!
Analyzer analyzer = builder.build();
TokenStream ts = analyzer.tokenStream("*", new StringReader("go to the webpage!"));
(MySynonymGraphFilterFactory只是用于传递同义词列表的黑客。它扩展了将所有内容映射到所有内容的功能。)
tokenStreamToString()
然后我调用一个 System.out.println(tokenStreamToString(ts));
函数,该函数仅转储术语,位置增量和位置长度(该函数的代码包含在此问题的底部):
FlattenGraphFilter
我不明白的是这个。无论是否包含navigate<2> (0)open<2> (0)go to the webpage
,我都会得到相同的输出。这是输出:
tokenStreamToString()
(尖括号显示上一项的位置长度;括号显示下一项的位置增量)
有些东西我在这里不明白。我以为拉平流意味着没有令牌的位置长度> 1 ...我错了吗?我将不胜感激能帮助您理解这一点。
PS:我的调试功能 static String tokenStreamToString(TokenStream stream) throws IOException
{
CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class);
PositionIncrementAttribute posAtt = stream.addAttribute(PositionIncrementAttribute.class);
PositionLengthAttribute posLenAtt = stream.addAttribute(PositionLengthAttribute.class);
StringBuilder sb = new StringBuilder();
stream.reset();
while(stream.incrementToken())
{
int inc = posAtt.getPositionIncrement();
if(inc != 1)
sb.append('(').append(inc).append(')');
sb.append(termAtt.toString());
int posLen = posLenAtt.getPositionLength();
if(posLen != 1)
sb.append('<').append(posLen).append('>');
sb.append(' ');
}
return sb.toString();
}
的实现:
{{1}}
谢谢。