`
ansjsun
  • 浏览: 199613 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词

阅读更多
      大家好.最近在做分词.在分词中遇到了各种各样的问题.在这里选择一个比较有意思的与大家分享.
      在这里说分词有点老生常谈了.的确.中文分词已经非常成熟了.但是在实体名识别上一直是中文分词的软肋.最近通过对ictclas的学习,和自己的总结.得出了一个还算不错的人名识别系统.

      目前这种方式已经开源.大家可以参看:https://github.com/ansjsun/ansj_seg , 在线测试:http://www.ansj.org/demo/seg.jsp


    主要思路是..先粗分,粗分的办法很多.但是在粗分的时候要尽量减少歧异.
比如
祝海林在孙健的右面!
进过第一步粗分的结果应当为
祝/ 海/ 林/ 在/ 孙/ 健/ 的/ 右面/

在得到以上的粗分序列我们就可以进行进一步分析了
首先我们得准备一些语料库.对其进行训练.
比如语料库里面有如下词
孙强
朱海林
孙海林
祝健
....

因为一般这种语料库在几十万级别.不能一一例举.所以我们拿具有针对这段文本的是个词做分析
利用字体位方式,我们得到如下统计结果
孙  2:1:1 \\戴表 孙 这个字在 2个词中的第1个位置出现了1次
孙  3:1:1
强  2:2:1
朱  3:1:1
海  3:2:2
,,,


得到如上频率后.我们就可以进行人名识别了

下面我尽量用伪代码的方式来进行一次分解
public void recogntion(Term[] terms) {

		for (int i = 0; i < terms.length; i++) {
                        //已名识别从前向后进行识别,4个字,3个字2字人名分别识别
			for (int j = 4; j > 1; j--) {
				freq = term.getTermNatures().personAttr.getFreq(j, 0);\\取得词位频率
				if ((freq > 0) ) {//进行初始化校验.当此字在识别位置出现时
					tempTerm = nameFind(i, beginFreq, j);//以序列结构进行人名识别
				}
			}
		}
	}

public Term nameFnd(int i , int beginFreq , j){

StringBuilder sb = new StringBuilder();
		int undefinite = 0;
		skip = false;
		PersonNatureAttr pna = null;
		int index = 0;
		int freq = 0;
		double allFreq = 0;
		Term term = null;
		int i = offe;
		for (; i < terms.length; i++) {
			// 走到结尾处识别出来一个名字.
			term = terms[i] ;
			pna = term.getTermNatures().personAttr;
			// 在这个长度的这个位置的词频,如果没有可能就干掉,跳出循环
			if ((freq = pna.getFreq(size, index)) == 0) {
					return null;
			}

			//增加人名
			sb.append(term.getName());
                       //这个人名的概率计算
			allFreq += Math.log(term.getTermNatures().allFreq+1) ;
			allFreq += -Math.log((double) (freq));
			index++;


			if (index == size + 2) {//当达到制定长度后跳出循环
				break;
			}
		}

		double score = -Math.log(factory[size]);
		score += allFreq ;
		double endFreq = 0;
		// 开始寻找结尾词,
		endFreq = terms[i].getTermNatures().personAttr.end + 1;

		//根据上下文.概率进行公司计算
		score -= Math.log(endFreq);
		score -= Math.log(beginFreq);
		
	
		
		term = new Term(sb.toString(), offe, TermNatures.NR);
		term.selfScore = score;

               //识别出来的人名进行返回
		return term;
}

进行如上步骤之后.我么得到了一个二维数组的序列:
如下:
-------->祝
祝海林--->海林
在
孙建
的
右面

下一个步骤就是比较 祝海林 和 祝+海林 哪个更像人名的过程了
其实在这里我们已经构成了隐马尔科夫链.通过贝叶斯定理公式:P(A|B)=P(B|A)*P(A)/P(B)
加上频率完全可以正确识别出来我们要找的实体名.
好了大概介绍到这里.有兴趣的朋友可以通过:http://www.ansj.org/ 获取代码.也希望能在这里认识一些志同道合的朋友共同勉励交流
2
3
分享到:
评论
14 楼 毛毛虫小白 2016-04-22  
您好,这里说的基于角色标注就是用到了字体位频率表里,在“名字内”角色的频数吗,加上找结尾词这样的“名字外侧”角色?那以后想改进提高准确率的时候,字体位频率表是封装了中科院的,只能补充结尾词(名字上下文)这样的角色吗?刚接触NLP和JAVA,看了您在源码中注释掉了B姓氏,E单名等,给factory赋了值(还有factory={BC,BCD,BCDE}),factory是什么呢
13 楼 ansjsun 2014-08-20  
fncj 写道
你好,我们最近要搞一个人名识别功能,发现有两个问题:1、里有不少外国姓名,都还有“·”字符的,支持好像有点问题。2、经常做会数据越界(莱九段 著、了了 著、安之阳 著 这三个词都会报错),用的0.9的版本。


现在都处2.x了..0.9太老了..用一个新点的..应该不会有问题
12 楼 fncj 2014-08-18  
你好,我们最近要搞一个人名识别功能,发现有两个问题:1、里有不少外国姓名,都还有“·”字符的,支持好像有点问题。2、经常做会数据越界(莱九段 著、了了 著、安之阳 著 这三个词都会报错),用的0.9的版本。
11 楼 曾洪星 2013-09-09  
你好,最近在读ansj的源码,词性对照表和词性关系表搞不太清楚,可以稍微解释一下吗?还有就是词性之间的频率是什么意思?期待你的指导!
10 楼 ansjsun 2012-11-10  
gaoyufeng36 写道
q
ansjsun 写道
gaoyufeng36 写道
您好,请问这个支持停词吗?



支持停用词的..放到了luecene插件中..

谢谢,停词的已经知道了。
如果我想把自定义的词典和停词词典,放在根目录下和项目一起发布。配置文件中是使用相对路径,这样可以吗

是的..用相对路径你要注意你发布平台..tomcat默认的相对路径是在bin下面..不同的容器环境不一样的..我建议你写绝对路径..这样保险点呵呵
9 楼 gaoyufeng36 2012-11-10  
q
ansjsun 写道
gaoyufeng36 写道
您好,请问这个支持停词吗?



支持停用词的..放到了luecene插件中..

谢谢,停词的已经知道了。
如果我想把自定义的词典和停词词典,放在根目录下和项目一起发布。配置文件中是使用相对路径,这样可以吗
8 楼 ansjsun 2012-11-02  
gaoyufeng36 写道
您好,请问这个支持停词吗?



支持停用词的..放到了luecene插件中..
7 楼 gaoyufeng36 2012-11-02  
您好,请问这个支持停词吗?
6 楼 ansjsun 2012-09-29  
wd_2007 写道
如何添加自定义的词,能给些思路,该从哪里看,MakeLibrary?
新添加词性又该入何添加,在。dic 文件下直接加入吗,
还有就是名字中,有了person.dic 为什么还反序列化将有些数据存在asian_name_freq.data中。谢谢!!! 请教问题

1.自定义词典添:https://github.com/ansjsun/ansj_seg/wiki/%E7%94%A8%E6%88%B7%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AF%8D%E5%85%B8%E7%9A%84%E6%B7%BB%E5%8A%A0
2.person.dic词语的上下文。asian_name_freq.data是字体位频率表。用处不一样。你看我博客有一个人名识别。
如上回答希望对你有帮助
5 楼 ansjsun 2012-09-22  
你提的那个问题已经解决了呵呵...牛啊..我跑了10多g的文本都没找出来..谢谢兄弟了
4 楼 ansjsun 2012-09-22  
zhangzhijian 写道
您好,这如果分词多的话,会报数组越界错误的。如把下面这段话分词。

我查了下你太牛了..40万分一的概率..尽然被你找到边界了...."大不列颠及北爱尔兰联合王国"..因为这个词的过....呵呵...
3 楼 ansjsun 2012-09-22  
的确是有问题。。我看看啊
2 楼 zhangzhijian 2012-09-20  
您好,这如果分词多的话,会报数组越界错误的。如把下面这段话分词。

早报讯 当G4S安保公司表示他们不能给伦敦奥运会提供足够的安保人员时,英国人感觉到自己的奥运可能是一场噩梦。但丹尼·<a href=\"http://info.2012.163.com/athlete/1418.html\">博伊</a>尔打造的伦敦奥运<a href=\"http://2012.163.com/special/2012openingceremony/\" title=\"伦敦奥运会开幕式\">开幕式</a>和随后发生的一切却是一场史诗般的表演。只要是亲身经历过伦敦奥运会的人,都会告诉你,他们变了,世界看他们的眼光也变了。伦敦奥运会给英国留下了怎样的遗产?《卫报》邀请了10位来自各行各业的人士畅谈对于伦敦奥运遗产的看法。<br/> <br/> 体育教育首需提高<br/> 我们曾承诺伦敦奥运会将给伦敦乃至英国留下丰厚的遗产,我们要让运动风再次席卷英伦,这些承诺在民众的帮助下眼看就要实现了。但我们也知道,热情只是催化剂,我们还需要在以下几个方面做出努力。<br/> 第一就是体育教育,体育课是学校课程中非常重要的一个部分。如果学校的体育课教学水平足够高的话,能够直接鼓励我们的年轻人投身到体育运动中去。我们的教育系统如果对课程时间和课余运动量进行一定程度的监督,我想学校的校长们一定会把体育课当作重中之重来对待的。<br/> 改善教练的执教水平也非常重要。没有金牌教练,哪里来的金牌运动员?我们需要各种层次的高水平教练,这样才能保证英国未来的运动成绩。<br/> 接下来就是地方政府了,我们应该制定一系列的法规来保证地方政府开放足够的运动场地和设施。我们要依靠政策来让所有人能够在他们的社区里享受到这些运动设施。<br/> 然后我们要调整一部分政府的运行机制。首先我们要对体育个体、俱乐部或者社团进行有效的管理,保证热情高涨的人们能够直接体会到政府政策的好处。只有通过这样的方式,我们的运动热情才会是长远的,最终达到激励下一代人的目的。<br/> 愿种族歧视消失<br/> 英国黑人长跑运动员法拉赫改变了我对英国国旗的看法。当他拿下伦敦奥运会男子5000米冠军的时候,大不列颠及北爱尔兰联合王国的国旗从他的肩膀上缓缓升起,那一刻的场景让我久久不能忘怀。<br/> 有摄影师将这个画面拍了下来,而这张照片在未来会成为英国文化的标志。我们知道自己在未来的运动<br/> 界一定会占据一席之地,但现在的我们还有许多要学习的。在这个五彩斑斓的世界里,黑色是非常重要的一部分,这一点我们需要铭记。<br/> 也许法拉赫的这张照片会让街头无辜被捕的黑人少年变少,也许这张照片会让种族歧视渐渐消失。我们度过了一个乌托邦式的夏天,在这个夏天里我们不分肤色,不分地域,大家都为自己的祖国加油助威,为自己的祖国增光添彩。在体育的世界里,我们已经证明不同的文化可以共存,那在日常生活中呢?<br/> 夏天终要过去,冬天就要到来。希望这个夏天给我们带来的改变能够永久……<br/> 我们找到真性情<br/> 艺术永远都在嫉妒着运动,因为运动是那么朴素而客观。在嫉妒的同时,艺术还把人们对于人和物的喜爱借给了体育,让体育不仅仅是冰冷的比分。不论是<a href=\"http://info.2012.163.com/athlete/861.html\">博尔特</a>的史诗级表演还是残奥运动员马丁·莱特,这个2005年7月7日伦敦爆炸案的幸存者的顽强意志,他们的胜利已经超出了比分和成绩的范畴。<br/> 在奥运会上,年轻人受到了感召。他们不再是整天想着破坏街边商店,也不再每天为日益升高的房价而烦恼。在奥运的赛场上,他们关注的是谁创造了最佳纪录,谁获得了优秀的成绩。现在轮到他们自己了,也许他们也会想要做出一点突破自己极限的成绩吧。<br/> 是艺术和体育让我们知道英国人到底是什么样的。从电影《2012》到丹尼·博伊尔的开幕式,我们让大家看到了英国人对待事物的方式,我们能在深爱一样东西的同时用自己的方式来讽刺它。我还记得一档叫做“最后一站”的节目,在那里我们找到了残奥会上正在上演的喜剧,我们可以拿这个开玩笑,却又不失敬意。<br/> 是体育和运动,让我们英国人变成了现在这样。而奥运会,我们不仅是作为观众目睹了这场盛事,我们还找到了自己的真性情。<br/> 大吃一惊的胜利<br/> 过去的几十年来,英国一直渴望着胜利。但我们好像总是不能获得令人满意的成绩,我们总是被胜利拒绝。撒切尔夫人和布莱尔给我们<br/> 带来了经济上的腾飞,但我们总感觉这样的胜利像是无根的浮萍,似乎随时可能失去它们。<br/> 现在,伦敦奥运会和残奥会重新塑造了我们英国人的信心。我们为自己是英国人而感到骄傲。金牌和奖牌榜上,我们都名列前三,这样的胜利无须质疑。无与伦比的运动设施证明我们英国能够成为一个世界领先的国家。<br/> 在奥运开始之前,有无数人都在唱衰伦敦,认为我们注定失败。但我们最终用一场胜利回击了一切质疑。奥林匹克公园准时完工,而且没有超出预算。所有的资金都得到了合理的运用,各个运动组织都得到了充足的资金来发展各自的项目。我们一扫过去30年的失败阴影,我们获得了一场让人大吃一惊的胜利。<br/> 98%参与者找到工作<br/> 关于2012伦敦奥运会,起码有一点可以确定,那就是本届奥运会是有史以来第一届事关生计的奥运会。98%参与过伦敦奥运场馆建设和运营的厨师、清洁工、安保人员和商店工作人员,都通过奥运会找到了适合的工作。这对伦敦市民来说是非常重大的胜利。<br/> 所有的工人都拿到了理想的工资,他们还凭借自己的努力在开幕式上享受到了来自全世界的掌声。而我们的志愿者,他们不是来取代那些工人的。他们愿意为奥运全身心地付出,这是志愿者们的一种美德。<br/> 实际上,参与到这项奥运盛事来的人们都是出于他们的好客、诚实和礼貌。普通的市民牺牲了自己的时间为远道而来的人们指明方向,用热情的拥抱欢迎他们的到来。这些志愿者所付出的东西是我们的政府无力企及的。<br/> 给当地人提供就业机会、体现伦敦市民好客美德、让英国人变得更团结,这才是本届伦敦奥运会和残奥会的真正意义所在。现在对我们来说最重要的就是把这股正面的力量继续保存下去。<br/> 奥运没有彻底落幕<br/> 奥林匹克毫无疑问在帮助着英国。伦敦奥运会的开幕式深得英国文化之精髓,虽然其他人可能不太了解我们的文化,但毫无疑问,这就是我们。我在过去的几周里和其他国家的一些商业人士探讨了一番,讨论的结果让我更加坚定了一点,那就是人们已经对英国刮目相看了。<br/> <br/> 其实,英国有相当出色的制造业,同时还有发达的金融服务业。但我不禁要抱怨的是,这两者之间居然没有丝毫的信任。幸运的是,伦敦奥运会的开幕式告诉我,我们英国人是最棒的,我们能把左脑和右脑完美地结合起来。<br/> 伦敦奥运会让我们对英国充满了期望,<a href=\"http://2012.163.com/special/2012closingceremony/\" title=\"伦敦奥运会闭幕式\">奥运会闭幕式</a>上我们把奥运的接力棒交给了里约热内卢,但这并不意味着奥运在英国的彻底落幕。也许英国还有很多问题,但日光似乎已经穿透厚厚云层,直接照耀到了我们的土地上,我们的任务就是让阳光永久照耀这片大地。<br/> 残奥会不再是附庸<br/> 我能感觉到,人们对待残疾人的态度已然改变。我们有一支年轻的队伍,我们的残奥会运动队平均年龄才20岁。我希望年轻人看到我们的表现之后能够激发他们自己的斗志,去追求他们自己的目标。就算你是一个残疾人,你也可以追求自己想要的生活。人们已经渐渐认识承认残疾人的能力,对我们来说这就是残奥会带来的改变。<br/> 在残奥会的每一个夜晚,我们都用自己的表现让在场所有的观众人更认可我们的能力。这样的场景之前从未出现过。现在人们会说:“你们是运动员,你们平时训练很刻苦。我们是来看你们比赛的。”残奥会已经不再是奥运会的附庸,我们从奥运的阴影里走了出来。<br/> 实际上残奥会的盛景对我们来说也许不再会上演了,不会再有8万人或者7万人齐聚一堂为我们加油助威。但我们知道,他们始终在支持着我们,不管是在体育场内还是在体育场外。我希望残奥会可以激励更多人参与到体育运动中来。<br/> 伦敦东区不错的开始<br/> 纽汉市位于伦敦市以东5公里,纽汉市的志愿者们走上街头为运动员、官员和体育迷指明方向。有超过27万人在这里享受到了我们热情的招待。每一个纽汉市的学校都把学校的孩子们送到赛场体验了一把什么是奥运会。有超过1000人参与了伦敦奥运会的开闭幕式,其中还有230个是孩子。<br/> 伦敦奥运会的遗产成功地“激励了一代人”(伦敦奥运会口号)。<br/> 2005年,纽汉市的孩子在新加坡亲眼目睹了伦敦获得奥运会主办权的过程。我们希望下一代也能进入到体育领域里来。我们将确保纽汉市的体育俱乐部以及东伦敦的大学将会给每个孩子提供起码20个运动项目的体验活动,帮助他们找到属于自己的那一项运动。<br/> 对于处于伦敦东区的我来说还有一个问题,那就是我们还需要2万名雇员才能达到伦敦市的平均水平。在奥运会的帮助下,今年我们已经为5000名市民找到了合适的工作。<br/> 这对我们来说是一个很不错的开始,但要真把奥运会的遗产用到实处,真的能完成借奥运会激励一代人的目标,我想我们还有许多的挑战。<br/> 政府仍有许多要学<br/> 伦敦奥运会带给了我们太多的感动,同时奥运会也让我们感到自己还有许多东西要学。伦敦奥运会给我们带来的影响在短时间内并不明显,也许不会有一个行业会因为奥运会而突飞猛进。但有一个行业肯定会受到影响,那就是旅游业。我们必须保证机场不再排长队,游客们都受到了热情的欢迎。只有感到开心的游客才会在伦敦快乐地购物。<br/> 对英国政府来说还有一点值得注意,那就是我们需要对未来保持乐观的态度。政府的高层人士必须每天早上起床的时候都要感觉到十分热爱自己的事业,这样才能保证我们一直乐观下去。<br/> 第一次为英国骄傲<br/> <br/> <br/> 直到伦敦奥运会开始之前,我都是一个悲观主义者。我甚至一度想要离开这个国家。直到我的一个朋友邀请我去看奥运会开幕式的彩排。<br/> 在那之后,我有生以来第一次为自己是一个英国人而感到骄傲。而且这种骄傲的感觉并不是转瞬即逝的,这样的骄傲之情将一直伴随着我。<br/> 实际上我一直并不是很喜欢运动,但残奥会改变了我的想法。残奥会一直在鼓舞着我。当然,我还在伦敦地区遇见了很多志愿者,他们忙碌的身影也非常让人感动。<br/> 伦敦奥运会让我们明白自己是怎么样的,从感情上来说,这是最重要的。<br/> (转载于英国《卫报》 董思韵译) <br/>
1 楼 allwefantasy 2012-09-14  
想法非常好。而且效果很明显呀...哈哈

相关推荐

Global site tag (gtag.js) - Google Analytics