论坛首页 Java企业应用论坛

应网友需求发布IKAnalyzer3.1.2GA

浏览 3543 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-10   最后修改:2009-09-10
应网友要求,修订3.1.1对字母窜的切分策略,强化对英文单词的切分。
如:
window2000 将切分为  |    window2000  |    window    |   2000;
readme.txt  将切分为 |    readme.txt  |    readme    | txt;
linliangyi2005@gmail.com 将切分为 |   linliangyi2005@gmail.com   |   linliangyi   | 2005   |   gmail   | com ;


下载 :IKAnalyzer3.1.2稳定版完整包.rar

更多详细请参看《IKAnalyzer中文分词器V3.1.1使用手册.pdf》

或访问本人Blog:http://linliangyi2007.iteye.com/blog/429960

项目地址:http://code.google.com/p/ik-analyzer/


   发表时间:2009-09-13  
刚刚打开你的程序看了一下,看到一个类:

	/**
	 * 判断词元是否彼此包含
	 * @param other
	 * @return boolean true 完全包含 , false 可能不相交 或者 相交但不包含
	 */
	public boolean isOverlap(Lexeme other){
		if(other != null){
			if(this.begin <= other.begin && this.getEndPosition() >= other.getEndPosition()){
				return true;
			}else if(this.begin >= other.begin && this.getEndPosition() <= other.getEndPosition()){
				return true;
			}else {
				return false;
			}
		}
		return false;
	}      


这个地方为什么判断begin,然后是 getEndPosition之间的关系,是不是应该同样判断getBeginPosition? 还有写得代码太复杂了,两个条件变成一个或不就可以了吗?

另外hashcode和equal都没有判断文本的内容,这个也挺奇怪的

当然我还没看其他的代码,可能你的本意就需要这样?





0 请登录后投票
   发表时间:2009-09-13  
你好,可以问你个问题吗?看你写了关于很多CAS的,我出了个这样的问题,可以给我点帮助吗?java.security.cert.CertificateException: No subject alternative names present
0 请登录后投票
   发表时间:2009-09-13   最后修改:2009-09-13
potian 写道
刚刚打开你的程序看了一下,看到一个类:

	/**
	 * 判断词元是否彼此包含
	 * @param other
	 * @return boolean true 完全包含 , false 可能不相交 或者 相交但不包含
	 */
	public boolean isOverlap(Lexeme other){
		if(other != null){
			if(this.begin <= other.begin && this.getEndPosition() >= other.getEndPosition()){
				return true;
			}else if(this.begin >= other.begin && this.getEndPosition() <= other.getEndPosition()){
				return true;
			}else {
				return false;
			}
		}
		return false;
	}      


这个地方为什么判断begin,然后是 getEndPosition之间的关系,是不是应该同样判断getBeginPosition? 还有写得代码太复杂了,两个条件变成一个或不就可以了吗?

另外hashcode和equal都没有判断文本的内容,这个也挺奇怪的

当然我还没看其他的代码,可能你的本意就需要这样?



我想说的是,不要把这段代码等同于两个Lexeme对象的相等判断。代码没有错,也没有多余。

不判断文本内容是考虑到效率问题,对于明确的一段文字,相同位置上的字符是一样的

当然如果将begin改为getBeginPosition会更利于程序的阅读,这个会进行修改。
0 请登录后投票
   发表时间:2009-09-13   最后修改:2009-09-13
linliangyi2007 写道
potian 写道
刚刚打开你的程序看了一下,看到一个类:

	/**
	 * 判断词元是否彼此包含
	 * @param other
	 * @return boolean true 完全包含 , false 可能不相交 或者 相交但不包含
	 */
	public boolean isOverlap(Lexeme other){
		if(other != null){
			if(this.begin <= other.begin && this.getEndPosition() >= other.getEndPosition()){
				return true;
			}else if(this.begin >= other.begin && this.getEndPosition() <= other.getEndPosition()){
				return true;
			}else {
				return false;
			}
		}
		return false;
	}      


这个地方为什么判断begin,然后是 getEndPosition之间的关系,是不是应该同样判断getBeginPosition? 还有写得代码太复杂了,两个条件变成一个或不就可以了吗?

另外hashcode和equal都没有判断文本的内容,这个也挺奇怪的

当然我还没看其他的代码,可能你的本意就需要这样?



我想说的是,不要把这段代码等同于两个Lexeme对象的相等判断。代码没有错,也没有多余。

不判断文本内容是考虑到效率问题,对于明确的一段文字,相同位置上的字符是一样的

当然如果将begin改为getBeginPosition会更利于程序的阅读,这个会进行修改。



难道不能这么写


if(other == null) return false;
return  (this.begin <= other.begin && this.getEndPosition() >= other.getEndPosition()) ||
        (this.begin >= other.begin && this.getEndPosition() <= other.getEndPosition())
;



0 请登录后投票
   发表时间:2009-09-14  
potian 写道
linliangyi2007 写道
potian 写道
刚刚打开你的程序看了一下,看到一个类:

	/**
	 * 判断词元是否彼此包含
	 * @param other
	 * @return boolean true 完全包含 , false 可能不相交 或者 相交但不包含
	 */
	public boolean isOverlap(Lexeme other){
		if(other != null){
			if(this.begin <= other.begin && this.getEndPosition() >= other.getEndPosition()){
				return true;
			}else if(this.begin >= other.begin && this.getEndPosition() <= other.getEndPosition()){
				return true;
			}else {
				return false;
			}
		}
		return false;
	}      


这个地方为什么判断begin,然后是 getEndPosition之间的关系,是不是应该同样判断getBeginPosition? 还有写得代码太复杂了,两个条件变成一个或不就可以了吗?

另外hashcode和equal都没有判断文本的内容,这个也挺奇怪的

当然我还没看其他的代码,可能你的本意就需要这样?



我想说的是,不要把这段代码等同于两个Lexeme对象的相等判断。代码没有错,也没有多余。

不判断文本内容是考虑到效率问题,对于明确的一段文字,相同位置上的字符是一样的

当然如果将begin改为getBeginPosition会更利于程序的阅读,这个会进行修改。



难道不能这么写


if(other == null) return false;
return  (this.begin <= other.begin && this.getEndPosition() >= other.getEndPosition()) ||
        (this.begin >= other.begin && this.getEndPosition() <= other.getEndPosition())
;





呵呵,这个纯属代码风格问题。如果这个要讨论下去,又会引起争论了。事实上,对于分词器而言,两段代码没有本质区别,不是吗?既不影响效率,也不影响算法。

如果需要讨论代码编写的话,建议学习ruby吧,哪里有比java好的多的魔法代码哦,这跟本贴的中心就相去甚远了,还是就此打住吧。
0 请登录后投票
   发表时间:2009-09-14   最后修改:2009-09-14
因为最近想了解分词,所以找了Javaeye推荐的IK。我发帖的主要原因就是有一些不理解的地方,从一开始就没有想要说你的代码什么不好,只不过有点疑问,当然有可能是引起了你的误会

咱们到此打住吧



0 请登录后投票
   发表时间:2009-10-14  
强烈建议发布基于1。5版的。。。
0 请登录后投票
   发表时间:2009-10-14   最后修改:2009-10-14
尽管在工作中主要使用java,也接受java的繁琐,但对类似
if (true) {
  return true;
}
else {
  return false;
}

的写法非常反感。不能因为java的繁琐,我们就不去追求代码的简洁。potian的建议还是很中肯的。
0 请登录后投票
   发表时间:2009-10-14  
joachimz 写道
尽管在工作中主要使用java,也接受java的繁琐,但对类似
if (true) {
  return true;
}
else {
  return false;
}

的写法非常反感。不能因为java的繁琐,我们就不去追求代码的简洁。potian的建议还是很中肯的。


好吧,我承认繁琐。但有时候,真的是代码习惯问题啊,改过来怪怪的,请各位容忍一下下啦
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics