各位兄弟姐妹们好,由于IKAnalyzer的词库不能满足于我的分词要求,所以我想自己扩展词库比如说:
已知一string为‘ipad216g’利用IKAnalyzer分词器后,分出的效果是:
ipad216g
ipad
216
g
----------
实际上我想要分的是ipad2 和 16g 这显然没有满足我的要求
于是我查询了文档发现org.wltea.analyzer.dic 类 Dictionary 下有
public static void loadExtendWords(java.util.List<java.lang.String> extWords)
加载扩展的词条
参数:extWords - List词条列表于是我写了如下程序:import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.wltea.analyzer.dic.Dictionary;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class Test {
public static void main(String[] args) throws Exception {
String text = "An IndexWriter creates and maintains an index.";
List<String> strList=new ArrayList<String>();
strList.add("ipad2");
Dictionary.loadExtendWords(strList);
String text2 = "ipad216g";
Test.testAnalyzer(new IKAnalyzer(), text2); // 使用IKAnalyzer,词库分词
}
/**
* 使用指定的分词器对指定的文本进行分词,并打印结果
*
* @param analyzer
* @param text
* @throws Exception
*/
public static void testAnalyzer(Analyzer analyzer, String text) throws Exception {
System.out.println("当前使用的分词器:" + analyzer.getClass());
TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(text));
tokenStream.addAttribute(TermAttribute.class);
while (tokenStream.incrementToken()) {
TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);
System.out.println(termAttribute.term());
}
}
}
但是检索结果还是没什么变化
依旧是:
----------
ipad216g
ipad
216
g
----------
无奈来请教各位朋友!是不是我理解错了?还是我程序写的有问题?如果有问题,我应该怎么改呢?
请大家帮我解决一下!再次感谢!
已知一string为‘ipad216g’利用IKAnalyzer分词器后,分出的效果是:
ipad216g
ipad
216
g
----------
实际上我想要分的是ipad2 和 16g 这显然没有满足我的要求
于是我查询了文档发现org.wltea.analyzer.dic 类 Dictionary 下有
public static void loadExtendWords(java.util.List<java.lang.String> extWords)
加载扩展的词条
参数:extWords - List词条列表于是我写了如下程序:import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.wltea.analyzer.dic.Dictionary;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class Test {
public static void main(String[] args) throws Exception {
String text = "An IndexWriter creates and maintains an index.";
List<String> strList=new ArrayList<String>();
strList.add("ipad2");
Dictionary.loadExtendWords(strList);
String text2 = "ipad216g";
Test.testAnalyzer(new IKAnalyzer(), text2); // 使用IKAnalyzer,词库分词
}
/**
* 使用指定的分词器对指定的文本进行分词,并打印结果
*
* @param analyzer
* @param text
* @throws Exception
*/
public static void testAnalyzer(Analyzer analyzer, String text) throws Exception {
System.out.println("当前使用的分词器:" + analyzer.getClass());
TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(text));
tokenStream.addAttribute(TermAttribute.class);
while (tokenStream.incrementToken()) {
TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class);
System.out.println(termAttribute.term());
}
}
}
但是检索结果还是没什么变化
依旧是:
----------
ipad216g
ipad
216
g
----------
无奈来请教各位朋友!是不是我理解错了?还是我程序写的有问题?如果有问题,我应该怎么改呢?
请大家帮我解决一下!再次感谢!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货