项目的下载和maven安装
使用
git clone https://github.com/wks/ik-analyzer.git
将ik项目克隆下来,使用
mvn install -Dmaven.test.skip=true
命令将其安装到本地
ik-analyzer工程结构
cfg包负责配置管理,主要是读取IK-Analyzer.xml中的扩展词库和扩展停用词表 。dic包下是和词典相关的类。
分词所用词典的加载
在3.2.8版本中,dic包下的3个类是与词典的加载相关的类,DictSegment类表示词典子片段。分词相关的词典会被封装成DictSegmetn类,封装的过程是在Dictionary类中完成的。
在Dictionary类中,loadMainDict()方法,完成了对主词典的读取和封装。过程如下
- 新建DictSegment对象
- IO流逐行读取main.dic。
- 调用DictSegment的fillSegment方法将新词加入词典的数据结构中。
- 以上面的方式,读取扩展词典文件,加入到词典的数据结构中
** loadMainDict()的代码可以清晰看出以上过程 **
/**
* 加载主词典及扩展词典
*/
private void loadMainDict(){
//建立一个主词典实例
_MainDict = new DictSegment((char)0);
//读取主词典文件
InputStream is = Dictionary.class.getResourceAsStream(Dictionary.PATH_DIC_MAIN);
if(is == null){
throw new RuntimeException("Main Dictionary not found!!!");
}
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);
String theWord = null;
do {
theWord = br.readLine();
if (theWord != null && !"".equals(theWord.trim())) {
_MainDict.fillSegment(theWord.trim().toCharArray());
}
} while (theWord != null);
} catch (IOException ioe) {
System.err.println("Main Dictionary loading exception.");
ioe.printStackTrace();
}finally{
try {
if(is != null){
is.close();
is = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
//加载扩展词典配置
List<String> extDictFiles = Configuration.getExtDictionarys();
if(extDictFiles != null){
for(String extDictName : extDictFiles){
//读取扩展词典文件
is = Dictionary.class.getResourceAsStream(extDictName);
//如果找不到扩展的字典,则忽略
if(is == null){
continue;
}
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);
String theWord = null;
do {
theWord = br.readLine();
if (theWord != null && !"".equals(theWord.trim())) {
//加载扩展词典数据到主内存词典中
//System.out.println(theWord);
_MainDict.fillSegment(theWord.trim().toCharArray());
}
} while (theWord != null);
} catch (IOException ioe) {
System.err.println("Extension Dictionary loading exception.");
ioe.printStackTrace();
}finally{
try {
if(is != null){
is.close();
is = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
扩展词库文件和扩展停用词词库该放在哪里?
在3.2.8版本中,词库文件最终放在了dic包下,在使用的时候,需要将xml中配置的扩展词典文件,放在resources下的org/wltea/analyzer/dic/
目录下才能读取
可以看到其他的词典文件也是放在这个目录下的
网友评论