不启动Solr,使用Solr的analyzer chain (使用mmseg4j分词)
2016-04-07 09:15
471 查看
这个本质上还是Lucene的analyzer chain,Solr的只是方便了使用:通过配置xml文件就可以把tokenizer和filter链接起来。我们有时候需要在自己代码里使用这个chain。本文记录怎么做。
先看整体代码 (groovy):
自定义的analyzer要集成Analyzer,并实现createComponents方法
需要resourceLoader来加载数据文件
上面链接了三个,可以更多:TokenizerFactory, SynonymFilterFactory, StopFilterFactory...
取token的方法比较特殊:需要用一个Attribute类: CharTermAttribute;需要操作tokenStream
必须要按这样的流程(lucene规定。。。):reset, incrementToken, end, close
本文出自 “我劝天公重抖擞” 博客,请务必保留此出处http://waynecui.blog.51cto.com/8231128/1761156
先看整体代码 (groovy):
class MyAnalyzer { def analyzer = new Analyzer() { @Override protected TokenStreamComponents createComponents(String s) { def loader = new ClasspathResourceLoader() // create tokenizer def factory = new MMSegTokenizerFactory(["mode": "complex", "dicPath": "dict"]) factory.inform(loader) Tokenizer tokenizer = factory.create() // create tokenfilters factory = new SynonymFilterFactory(["synonyms": "dict/synonyms.txt", "expand": "true", "ignoreCase": "true"]) factory.inform(loader) TokenFilter filter = factory.create(tokenizer) factory = new StopFilterFactory(["ignoreCase": "true", "words": "dict/stop_words_cn.txt"]) factory.inform(loader) filter = factory.create(filter) return new TokenStreamComponents(tokenizer, filter) } } def tokenize(String text) { def tokens = [] def ts = analyzer.tokenStream("text", text) def termAttr = ts.addAttribute(CharTermAttribute.class) ts.reset() while (ts.incrementToken()) { tokens.add(termAttr.toString()) } ts.end() ts.close() return tokens } public static void main(String[] args) { MyAnalyzer analyzer = new MyAnalyzer() println(analyzer.tokenize("我是一个粉刷匠")) } }有几个关键点:
自定义的analyzer要集成Analyzer,并实现createComponents方法
需要resourceLoader来加载数据文件
上面链接了三个,可以更多:TokenizerFactory, SynonymFilterFactory, StopFilterFactory...
取token的方法比较特殊:需要用一个Attribute类: CharTermAttribute;需要操作tokenStream
必须要按这样的流程(lucene规定。。。):reset, incrementToken, end, close
本文出自 “我劝天公重抖擞” 博客,请务必保留此出处http://waynecui.blog.51cto.com/8231128/1761156
相关文章推荐
- ApiDemo/FragmentRetainInstance 解析
- Airtable(数据管理)
- Airtable(数据管理)
- Airtable(数据管理)
- Climbing Stairs
- [LeetCode] Duplicate Emails 重复的邮箱
- liunx 下scp出现 Permission denied, please try again 的解决办法
- Nexus启动失败处理:The nexus service was launched, but failed to start.
- AIDL实例浅析
- Airtable(数据管理)
- could not bind to address 0.0.0.0:443 no listening sockets available, shutting d
- Mesos 维护原语 (Maintenance Primitives)
- LeetCode *** 70. Climbing Stairs
- 【一天一道LeetCode】#11Container With Most Water
- 【一天一道LeetCode】#11Container With Most Water
- 训练集(train set) 验证集(validation set) 测试集(test set)
- Count ways to reach the n’th stair
- Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect
- leetcode——70——Climbing Stairs
- 最简实例说明WAIT、NOTIFY、NOTIFYALL的使用方法