`
linliangyi2007
  • 浏览: 1013216 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

发布 IK Analyzer 2012 版本

阅读更多
新版本改进:
  • 支持分词歧义处理
  • 支持数量词合并
  • 词典支持中英文混合词语,如:Hold住



IK Analyzer 2012特性
  • 采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式;
  • 在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。
  • 2012版本的智能分词模式支持简单的分词排歧义处理和数量词合并输出。
  • 采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符
  • 优化的词典存储,更小的内存占用。支持用户词典扩展定义。特别的,在2012版本,词典支持中文,英文,数字混合词语。



分词效果示例
IK Analyzer 2012版本支持 细粒度切分 和 智能切分,以下是两种切分方式的演示样例。

文本原文1:
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了3个大版本。

智能分词结果:
ikanalyzer | 是 | 一个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级 | 的 | 中文 | 分词 | 工具包 | 从 | 2006年 | 12月 | 推出 | 1.0版 | 开始 | ikanalyzer | 已经 | 推 | 出了 | 3个 | 大 | 版本

最细粒度分词结果:
ikanalyzer | 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级 | 量级 | 的 | 中文 | 分词 | 工具包 | 工具 | 包 | 从 | 2006 | 年 | 12 | 月 | 推出 | 1.0 | 版 | 开始 | ikanalyzer | 已经 | 推出 | 出了 | 3 | 个 | 大 | 版本

文本原文2:
张三说的确实在理

智能分词结果:
张三 | 说的 | 确实 | 在理

最细粒度分词结果:
张三 | 三 | 说的 | 的确 | 的 | 确实 | 实在 | 在理

文本原文3
公路局正在治理解放大道路面积水问题

智能分词结果:
公路局 | 正在 | 治理 | 解放 | 大道 | 路面 | 积水 | 问题

最细粒度分词结果:
公路局 | 公路 | 路局 | 正在 | 治理 | 理解 | 解放 | 放大 | 大道 | 道路 | 路面 | 面积 | 积水 | 问题

文本原文4
据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡,20000余人受伤,近20万人无家可归。

智能分词结果:
据 | 路透社 | 报道 | 印度尼西亚 | 社会 | 事务部 | 一 | 官员 | 星期二 | 29日 | 表示 | 日 | 惹 | 市 | 附近 | 当地时间 | 27日 | 晨 | 5时 | 53分 | 发生 | 的 | 里氏 | 6.2级 | 地震 | 已经 | 造成 | 至少 | 5427人 | 死亡 | 20000 | 余人 | 受伤 | 近 | 20 | 万人 | 无家可归

最细粒度分词结果:
据 | 路透社 | 路透 | 社 | 报道 | 印度尼西亚 | 印度 | 尼 | 西亚 | 社会事务 | 社会 | 事务部 | 事务 | 部 | 一 | 官员 | 星期二 | 星期 | 二 | 29 | 日 | 表示 | 日 | 惹 | 市 | 附近 | 当地时间 | 当地 | 时间 | 27 | 日 | 晨 | 5 | 时 | 53 | 分发 | 分 | 发生 | 发 | 生 | 的 | 里氏 | 6.2 | 级 | 地震 | 已经 | 造成 | 至少 | 5427 | 人 | 死亡 | 20000 | 余人 | 受伤 | 近 | 20 | 万人 | 万 | 人 | 无家可归


GoogleCode下载:
http://code.google.com/p/ik-analyzer/downloads/list

分享到:
评论
99 楼 thewayuare 2014-07-02  
xiaolong_0702 写道
敬爱的楼主您好;
以前用的 lucene-core-3.4.0.jar和IKAnalyzer3.2.8.jar
现在升级到Lucene4.7.1.jar 和分词器的 IKAnalyzer2012_u6.jar时
报出异常
Caused by: java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.
(Ljava/lang/String;Ljava/io/Reader;)Lorg/apache/lucene/analysis/TokenStream;

是什么问题 怎么解决 急待求解。谢谢啦

98 楼 xiaolong_0702 2014-04-04  
敬爱的楼主您好;
以前用的 lucene-core-3.4.0.jar和IKAnalyzer3.2.8.jar
现在升级到Lucene4.7.1.jar 和分词器的 IKAnalyzer2012_u6.jar时
报出异常
Caused by: java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.
(Ljava/lang/String;Ljava/io/Reader;)Lorg/apache/lucene/analysis/TokenStream;

是什么问题 怎么解决 急待求解。谢谢啦
97 楼 sendreams 2014-01-13  
flhs2011 写道
林兄,我现在遇到一个关于最大词长切分的问题,我使用的是hibernate search,IKAnalyzer是通过
@Analyzer(impl = IKAnalyzer.class)
方式注入进去的,我现在想按照最大词长切分,IKAnalyzer的默认构造函数是最细粒度,我现在不知道如何配置最大词长切分,请告知,谢谢!

我不是作者,不过你说的这个修改配置文件即可。
IKAnalyzer.cfg.xml
96 楼 chris开到荼縻 2013-08-10  
博主,我刚接触IKAnalyzer,有些很基本的问题想向您请教。
首先,我在个人扩展字典里面存的有锦绣龙城,可是为什么检索后分词的结果还是锦绣,龙城?
其次,我对个人扩展字典进行编辑后,分词结果没有及时的改变是怎么回事?
最后,如果IKAnalyzer的主字典表里面有锦绣,龙城,我的扩展字典里已经存了锦绣龙城,分词结果如何使扩展字典的锦绣龙城?
谢谢博主了
95 楼 flhs2011 2013-06-19  
林兄,我现在遇到一个关于最大词长切分的问题,我使用的是hibernate search,IKAnalyzer是通过
@Analyzer(impl = IKAnalyzer.class)
方式注入进去的,我现在想按照最大词长切分,IKAnalyzer的默认构造函数是最细粒度,我现在不知道如何配置最大词长切分,请告知,谢谢!
94 楼 linliangyi2007 2013-02-15  
dillon1986 写道
我也是这样使用的
实现Configuration(),默认仍然使用DefaultConfig里的内容,除了扩展词库和扩展停用词库,然后为Dictionary添加了扩展词和扩展停用词
Dictionary dictionary = new Dictionary(Configuration)
dictionary.addWords();
dictionary.disableWords();
但是之后使用 IkSegmenter ikSegmenter = new IkSegmenter(text,true)
能分出扩展词,但是不能去停用词
是不是我的用法不对

lxxvzna 写道
你好:
     我下载的是IKAnalyzer2012_u6。请问一下,如何扩展词库。
帮忙看下,我的工程对吗
package com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.wltea.analyzer.cfg.Configuration;
import org.wltea.analyzer.dic.Dictionary;

public class StrengthenedIK {
	
	private static Dictionary d;
	private List<String> ws = new ArrayList<String>();
	
	public StrengthenedIK(){
		d = Dictionary.initial(new Configuration(){

			@Override
			public List<String> getExtDictionarys() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public List<String> getExtStopWordDictionarys() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public String getMainDictionary() {
				// TODO Auto-generated method stub
				return "gw.txt";
			}

			@Override
			public String getQuantifierDicionary() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public void setUseSmart(boolean arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public boolean useSmart() {
				// TODO Auto-generated method stub
				return false;
			}
			
		});
	}
	
	public void AddWords(String fn){
		readFileByLines(fn);
		d.addWords(ws);
	}
	
	public void readFileByLines(String fileName) {
        File file = new File(fileName);
        BufferedReader reader = null;
        try {        
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;                       
            while ((tempString = reader.readLine()) != null) {
            	ws.add(tempString);                            
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		StrengthenedIK ik = new StrengthenedIK();
		ik.AddWords("sougou8.txt");
		System.out.println("ok");
	}

}




天哪!!!你们那里看的说disableWords是用来添加停止词的啊,这个方法是用来删除词典内的词的,跟停止词没关系!
93 楼 dillon1986 2013-02-01  
我也是这样使用的
实现Configuration(),默认仍然使用DefaultConfig里的内容,除了扩展词库和扩展停用词库,然后为Dictionary添加了扩展词和扩展停用词
Dictionary dictionary = new Dictionary(Configuration)
dictionary.addWords();
dictionary.disableWords();
但是之后使用 IkSegmenter ikSegmenter = new IkSegmenter(text,true)
能分出扩展词,但是不能去停用词
是不是我的用法不对

lxxvzna 写道
你好:
     我下载的是IKAnalyzer2012_u6。请问一下,如何扩展词库。
帮忙看下,我的工程对吗
package com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.wltea.analyzer.cfg.Configuration;
import org.wltea.analyzer.dic.Dictionary;

public class StrengthenedIK {
	
	private static Dictionary d;
	private List<String> ws = new ArrayList<String>();
	
	public StrengthenedIK(){
		d = Dictionary.initial(new Configuration(){

			@Override
			public List<String> getExtDictionarys() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public List<String> getExtStopWordDictionarys() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public String getMainDictionary() {
				// TODO Auto-generated method stub
				return "gw.txt";
			}

			@Override
			public String getQuantifierDicionary() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public void setUseSmart(boolean arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public boolean useSmart() {
				// TODO Auto-generated method stub
				return false;
			}
			
		});
	}
	
	public void AddWords(String fn){
		readFileByLines(fn);
		d.addWords(ws);
	}
	
	public void readFileByLines(String fileName) {
        File file = new File(fileName);
        BufferedReader reader = null;
        try {        
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;                       
            while ((tempString = reader.readLine()) != null) {
            	ws.add(tempString);                            
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		StrengthenedIK ik = new StrengthenedIK();
		ik.AddWords("sougou8.txt");
		System.out.println("ok");
	}

}

92 楼 nina_gucas 2013-01-22  
楼主你好,最近在使用IK分词器,有一个问题请教:

当我的输入字符串是阿拉伯汉字和大写汉字的数字连在一起的时候,例如“9十二”,使用IK分词会报出java.lang.NullPointerException的异常,以下是我的代码:

String text = "9十二";
		
		StringReader reader = new StringReader(text);
		IKSegmenter ikSeg = new IKSegmenter(reader, true);

		Lexeme lex = null;  
        while((lex = ikSeg.next()) != null){  
            System.out.print(lex.getLexemeText()+" ");  
        }  

		reader.close();


请问是我调用的问题,还是IK分词器的bug,谢谢!
91 楼 linliangyi2007 2012-12-26  
lxxvzna 写道
你好:
     我下载的是IKAnalyzer2012_u6。请问一下,如何扩展词库。
帮忙看下,我的工程对吗


看了你的设计思路应该没问题。目前出现什么状况了吗?
90 楼 lxxvzna 2012-12-25  
你好:
     我下载的是IKAnalyzer2012_u6。请问一下,如何扩展词库。
帮忙看下,我的工程对吗
package com;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.wltea.analyzer.cfg.Configuration;
import org.wltea.analyzer.dic.Dictionary;

public class StrengthenedIK {
	
	private static Dictionary d;
	private List<String> ws = new ArrayList<String>();
	
	public StrengthenedIK(){
		d = Dictionary.initial(new Configuration(){

			@Override
			public List<String> getExtDictionarys() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public List<String> getExtStopWordDictionarys() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public String getMainDictionary() {
				// TODO Auto-generated method stub
				return "gw.txt";
			}

			@Override
			public String getQuantifierDicionary() {
				// TODO Auto-generated method stub
				return null;
			}

			@Override
			public void setUseSmart(boolean arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public boolean useSmart() {
				// TODO Auto-generated method stub
				return false;
			}
			
		});
	}
	
	public void AddWords(String fn){
		readFileByLines(fn);
		d.addWords(ws);
	}
	
	public void readFileByLines(String fileName) {
        File file = new File(fileName);
        BufferedReader reader = null;
        try {        
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;                       
            while ((tempString = reader.readLine()) != null) {
            	ws.add(tempString);                            
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		StrengthenedIK ik = new StrengthenedIK();
		ik.AddWords("sougou8.txt");
		System.out.println("ok");
	}

}
89 楼 linliangyi2007 2012-12-11  
wj3764 写道
请问楼主,配置停用词和扩展词的时候,能不能改变配置文件IKAnalyzer.cfg.xml的路径呢?比如,原来放在根目录下(web-inf/classes), 想放在configuration/lucene中, 应该怎么做呢?


目前IK没有采用目录搜索优先级方式来定义配置文件,所以,如果一定要修改,只能修改源码了!!

后期考虑加上这个功能
88 楼 wj3764 2012-12-11  
请问楼主,配置停用词和扩展词的时候,能不能改变配置文件IKAnalyzer.cfg.xml的路径呢?比如,原来放在根目录下(web-inf/classes), 想放在configuration/lucene中, 应该怎么做呢?
87 楼 czhcc 2012-11-20  
请问2012 U6版的源版有没有下载的?
86 楼 linliangyi2007 2012-11-08  
gf010010 写道
请问IKAnalyzer有没有处理同义词、近义词相关的模块,若有请问如何配置。



目前没有提供同义词近义词功能
85 楼 linliangyi2007 2012-11-08  
sabrina_joshua 写道
最近作业中需要使用分词工具,选择了 IKAnalyzer,使用的是2012版本。

错误信息如下:
12/10/06 21:09:20 INFO mapred.JobClient: Task Id : attempt_201210052358_0005_m_000000_1, Status : FAILED
java.lang.ArrayIndexOutOfBoundsException: 3072
	at org.wltea.analyzer.core.AnalyzeContext.moveCursor(AnalyzeContext.java:159)
	at org.wltea.analyzer.core.IKSegmenter.next(IKSegmenter.java:142)
	at com.sabrina.util.WordAnalyzerUtil.analyze(WordAnalyzerUtil.java:112)
	at com.sabrina.mapreduce.WebsiteAnalyzer$WebsiteAnalyzerMapper.map(WebsiteAnalyzer.java:82)
	at com.sabrina.mapreduce.WebsiteAnalyzer$WebsiteAnalyzerMapper.map(WebsiteAnalyzer.java:1)
	at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
	at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:416)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
	at org.apache.hadoop.mapred.Child.main(Child.java:249)



对应代码:
/*
	 *  分词主功能
	 *  
	 *  当待分词的内容有效时,返回ArrayList<LexemeInfo>类型结果;
	 *  否则,返回null.
	 */
	public ArrayList<LexemeInfo> analyze() {
		
		if(titleContent == null || titleContent == "") 
			return null;
		
		Reader reader = new StringReader(titleContent);
		
		// 配置管理类
		Configuration conf = new Configuration();
		conf.setUseSmart(true);	// 智能切分策略
		
		
		IKSegmenter segmenter = new IKSegmenter(reader, conf); // IK分词器(与Lucence无关)
		
		if (segmenter == null)
			return null;
		
		try {
			Lexeme word = segmenter.next();	// 获取下一个词元
			int beginPosition = -1; // 词元在字符串中的偏移量 
			String text = null;     // 词元内容
			int type = -1;			// 词元类型
			
			ArrayList<LexemeInfo> lexemeList = new ArrayList<LexemeInfo>();
			
			
			while(word != null) { // 判断是否还有未读的词元
				LexemeInfo lexeme = new LexemeInfo();
				
				beginPosition = word.getBeginPosition();
				text = word.getLexemeText();
				type = word.getLexemeType();
				

				lexeme.setWord(text);
				lexeme.setPosition(beginPosition);
				
				lexemeList.add(lexeme);
				
				word = segmenter.next(); // 顺次读取字符串中的词元
			}
			
			return lexemeList;
			
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}


请问下,可能会是什么原因引起的?。。


从您的错误信息上看,你使用的不是2012的最新版本,建议下载2012 U6版本,该bug应该已经修复,谢谢
84 楼 gf010010 2012-11-06  
请问IKAnalyzer有没有处理同义词、近义词相关的模块,若有请问如何配置。
83 楼 sabrina_joshua 2012-10-06  
最近作业中需要使用分词工具,选择了 IKAnalyzer,使用的是2012版本。

错误信息如下:
12/10/06 21:09:20 INFO mapred.JobClient: Task Id : attempt_201210052358_0005_m_000000_1, Status : FAILED
java.lang.ArrayIndexOutOfBoundsException: 3072
	at org.wltea.analyzer.core.AnalyzeContext.moveCursor(AnalyzeContext.java:159)
	at org.wltea.analyzer.core.IKSegmenter.next(IKSegmenter.java:142)
	at com.sabrina.util.WordAnalyzerUtil.analyze(WordAnalyzerUtil.java:112)
	at com.sabrina.mapreduce.WebsiteAnalyzer$WebsiteAnalyzerMapper.map(WebsiteAnalyzer.java:82)
	at com.sabrina.mapreduce.WebsiteAnalyzer$WebsiteAnalyzerMapper.map(WebsiteAnalyzer.java:1)
	at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
	at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:416)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
	at org.apache.hadoop.mapred.Child.main(Child.java:249)



对应代码:
/*
	 *  分词主功能
	 *  
	 *  当待分词的内容有效时,返回ArrayList<LexemeInfo>类型结果;
	 *  否则,返回null.
	 */
	public ArrayList<LexemeInfo> analyze() {
		
		if(titleContent == null || titleContent == "") 
			return null;
		
		Reader reader = new StringReader(titleContent);
		
		// 配置管理类
		Configuration conf = new Configuration();
		conf.setUseSmart(true);	// 智能切分策略
		
		
		IKSegmenter segmenter = new IKSegmenter(reader, conf); // IK分词器(与Lucence无关)
		
		if (segmenter == null)
			return null;
		
		try {
			Lexeme word = segmenter.next();	// 获取下一个词元
			int beginPosition = -1; // 词元在字符串中的偏移量 
			String text = null;     // 词元内容
			int type = -1;			// 词元类型
			
			ArrayList<LexemeInfo> lexemeList = new ArrayList<LexemeInfo>();
			
			
			while(word != null) { // 判断是否还有未读的词元
				LexemeInfo lexeme = new LexemeInfo();
				
				beginPosition = word.getBeginPosition();
				text = word.getLexemeText();
				type = word.getLexemeType();
				

				lexeme.setWord(text);
				lexeme.setPosition(beginPosition);
				
				lexemeList.add(lexeme);
				
				word = segmenter.next(); // 顺次读取字符串中的词元
			}
			
			return lexemeList;
			
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}


请问下,可能会是什么原因引起的?。。
82 楼 linliangyi2007 2012-09-28  
“将来你和我是怎么的关系”
yrclsgo 写道
[quote="linliangyi2007"
“将来你和我是怎么的关系”
为什么会把“和我”做一个词呢?


词典中确实存在部分垃圾词,可以将其删除
81 楼 yrclsgo 2012-09-27  
[quote="linliangyi2007"
“将来你和我是怎么的关系”
为什么会把“和我”做一个词呢?
80 楼 nickycheng 2012-09-07  
linliangyi2007 写道
XinYiTian 写道
博主,程序中几个单例的地方用到了double lock check,例如:
public static Dictionary initial(Configuration cfg){
if(singleton == null){
synchronized(Dictionary.class){
if(singleton == null){
singleton = new Dictionary(cfg);
return singleton;
}
}
}
return singleton;
}
private DictSegment[] getChildrenArray(){
if(this.childrenArray == null){
synchronized(this){
if(this.childrenArray == null){
this.childrenArray = new DictSegment[ARRAY_LENGTH_LIMIT];
}
}
}
return this.childrenArray;
}
private Map<Character , DictSegment> getChildrenMap(){
if(this.childrenMap == null){
synchronized(this){
if(this.childrenMap == null){
this.childrenMap = new HashMap<Character , DictSegment>(ARRAY_LENGTH_LIMIT * 2,0.8f);
}
}
}
return this.childrenMap;
}
double lock check已经被证实在java中是错误的做法,希望楼主修正,详情可以google: java double lock check



double check lock的问题很早之前已经解决了,问题产生的原因是对象的初始化是在主内存中完成,即堆内存,而编译器对代码进行优化,导致未完全初始化的对象引用被其他线程获取到。
在2001年,JVM1.2已经发布好久了.JMM(Java Memory Model)已经已经发布了新的规范,分配空间,初始化,调用构造方法只会在线程的工作存储区完成,在没有向主存储区复制赋值时,其它线程绝对不可能见到这个过程.而这个字段复制到主存区的过程,更不会有分配空间后没有初始化或没有调用构造方法的可能.在JAVA中,一切都是按引用的值复制的.向主存储区同步其实就是把线程工作存储区的这个已经构造好的对象有压缩堆地址值COPY给主存储区的那个变量.这个过程对于其它线程,要么是resource为 null,要么是完整的对象.绝对不会把一个已经分配空间却没有构造好的对象让其它线程可见.



http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
我看这上面说的是jdk5以后对于单例对象使用volatile关键字可以保证DCL不出问题,或者单例对象本身所有属性都是final的。
不知博主有什么解释没?

相关推荐

    IKAnalyzer2012完整分发包

    2. IKAnalyzer2012.jar(主jar包) 3. IKAnalyzer.cfg.xml(分词器扩展配置文件) 4. stopword.dic(停止词典) 5. LICENSE.TXT ; NOTICE.TXT (apache版权申明) 它的安装部署十分简单,将 IKAnalyzer2012.jar ...

    IKAnalyzer2012FF_hf1.zip

    标题中的"IKAnalyzer2012FF_hf1.zip"指的是IK Analyzer的2012年最终版(Final)的高频率更新1(Hot Fix 1)。IK Analyzer是一款开源的、基于Java语言开发的轻量级中文分词器,主要用于Java环境下对中文文本的分词...

    IKAnalyzer2012_u6中文分词器jar包

    IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包 IKAnalyzer2012_u6中文分词器jar包

    IK Analyzer 2012FF_hf1.7z

    "2012FF_hf1.7z" 是IK Analyzer的一个特定版本,可能包含了优化和改进,适应了2012年及之后的技术需求。 在Solr中,分词器扮演着至关重要的角色。它们负责将输入的中文文本分解成一系列的词汇单元,这些单元通常被...

    IKAnalyzer2012_u6中文分词器以及手册正式版.zip

    IKAnalyzer2012_u6中文分词器以及手册正式版 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2017/10/29 1:41 doc -a---- 2017/10/29 1:41 414 IKAnalyzer.cfg.xml -a---- 2017/10/29 1...

    IKAnalyzer2012.jar

    IKAnalyzer2012.jar 中文分词包

    IKanalyzer2012.rar

    IKanalyzer2012是一款基于Java语言的开源中文分词器,主要用于处理中文文本的分词任务。在中文搜索引擎和自然语言处理领域,分词是基础且关键的一环,因为中文没有明显的空格来区分词汇,需要通过特定的算法进行切分...

    IKAnalyzer2012FF_u1.jar

    使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IKAnalyzer2012_u6.jar solr-4.10.3下载地址:...

    IKAnalyzer2012FF_u1.jar下载

    IKAnalyzer2012FF_u1.jar 是一款广泛应用于Java环境中的中文分词库,尤其在搜索引擎和文本分析领域有着重要的应用。这个jar包包含了IK Analyzer的最新版本,即2012FF_u1更新版,它是一款开源的、高性能的中文分词...

    IKAnalyzer2012.zip

    IKAnalyzer2012是一个专为中文处理设计的开源分词工具,主要应用于搜索引擎、文本分析和信息检索等领域。这个工具包的核心是IKAnalyzer2012.jar文件,它包含了IK Analyzer的所有功能和实现,是一个Java编写的库,...

    IK Analyzer 2012FF_hf1和IKAnalyzer2012_u6

    标题提到的 "IK Analyzer 2012FF_hf1" 和 "IKAnalyzer2012_u6" 都是该分词器的不同版本。 IK Analyzer 2012FF_hf1 是2012年发布的HotFix 1更新版,"FF" 可能代表 "Final Fix",意味着这是对之前版本的最终修复,而 ...

    IKAnalyzer2012_u6

    IKAnalyzer2012_u6是一款基于Java语言开发的全文检索分析器,主要应用于中文信息处理,如搜索引擎、文本挖掘等场景。这个版本是u6更新,意味着它是IKAnalyzer的一个升级版,修复了前一版本可能存在的问题,并可能...

    IKAnalyzer2012_FF_hf1.jar

    解决lucene4.0与IKAnalyzer的冲突。解决Exception in thread "main" java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method ...本资源包含了IKAnalyzer2012_FF_hf1.jar及源码

    IKAnalyzer2012.jar.zip

    这个“IKAnalyzer2012.jar.zip”压缩包包含了IKAnalyzer的两个不同版本的jar包,分别是IKAnalyzer2012.jar和IKAnalyzer2012FF_u1.jar。 1. **IKAnalyzer简介** - IKAnalyzer是由国人开发的一款高性能的中文分词...

    IK Analyzer 2012FF_hf1及IK Analyzer 2012FF_hf1_source位于GOOGLE_CODE的资源转发

    2012FF_hf1 版本是IK Analyzer的一个特定版本,HF1代表Hot Fix 1,即该版本是对2012FF版本的小幅修正版。 IK Analyzer 2012FF_hf1 版本在原有的基础上进行了性能优化和错误修复,确保了其在处理中文文本时的准确性...

    IKAnalyzer2012_u3

    IK Analyzer 2012 IKAnalyzer2012_u3 IK Analyzer 2012 IKAnalyzer2012_u3 IK Analyzer 2012 IKAnalyzer2012_u3

    ikanalyzer2012ff_u1

    ikanalyzer2012ff_u1 是一个专为Solr 4.10.3版本设计的IK分词器插件。在中文信息检索和文本分析领域,分词器扮演着至关重要的角色,它能够将连续的汉字序列切分成具有语义意义的词语单元,便于后续的索引和查询操作...

    IK Analyzer 2012FF_hf1.zip

    从 2006年 12 月推出 1.0 版开始,IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,...

Global site tag (gtag.js) - Google Analytics