浏览 3599 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-01-17
现在是,我可以模仿org.apache.solr.analysis.PatternReplaceCharFilter创建一个新的CharFilter,来对整个输入内容进行修改:例如,我的一个文本文件的全部内容是,“这是我的全部文本内容”,那么在我的CharFilter中,我能够对整个文本文件内容,即“这是我的全部文本内容”进行任意处理。 但是,对Filter而言,就不是这么回事儿了。在Apache 3.1 Cookbook,第八章的小节Developing Your Own Filter,第218页,有一个Filter的例子。这个例子很明白的显示,在Filter中只能一次获取一个Token,然后对Token进行处理,无法获取整个文本文件分词过后的Token流,如“这 是 我 的 全部 文本 内容”。但有时候我想会有这种需求,那就是访问分词过后的整个Token流,而不是一次只能访问一个,因为有时候你想在Token流中发现pattern并处理。 有谁有什么建议么?谢谢~~~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2013-01-19
Filter是可以读完super的全部或部分token到自己的buffer中,然后按自己的逻辑控制incrementToken方法。
|
|
返回顶楼 | |
发表时间:2013-01-21
elton_john007 写道 Filter是可以读完super的全部或部分token到自己的buffer中,然后按自己的逻辑控制incrementToken方法。
谢谢指教~~~ 我看了看文档,感觉是incrementToken的返回值很有讲究。下面是我的试验代码,可以运行: private final StringBuffer buffer = new StringBuffer(); @Override public boolean incrementToken() throws IOException { if (input.incrementToken()) { String term = charTermAttr.toString(); buffer.append(term).append(" "); return true; } else { System.out.println("the indexed content is: " + buffer); buffer.setLength(0); } return false; } 我想就可以在打印语句那里对buffer里的内容进行匹配识别了(当然可以用更好的数据结构来取代buffer)。另外,我感觉只能用input.incrementToken()来获得TokenStream的内容。 这个是不是你的建议?或者还有更好的想法?谢谢~~~ |
|
返回顶楼 | |