Skip to content

歧义纠正辞典

mumu edited this page Mar 20, 2018 · 4 revisions

#歧义纠正辞典

很多时候.分词发生歧异不是很好调整.用户需要更强的规则来约束所以.ansj中增加了歧义消除的一个强规则方式

在library/ambiguity.dic

中你会看到如下内容

习近平	nr
李民	nr	工作	vn
三个	m	和尚	n
的确	d	定	v	不	v
大	a	和尚	n
张三	nr	和	c
动漫	n	游戏	n
邓颖超	nr	生前	t 

这里例子告诉计算机

如果你发现 李民工作 ---> 李/民工/作 纠正为 --->李民/工作/ 这种类型..

第一列是识别串.第二列是分词结果.奇数行是词.偶数行是词性.

ps:这个是优先分词运行的.所以添加时候要谨慎...

当然 ambiguity.dic 的路径你可以在分词调用前..

用 MyStaticValue.ambiguityLibrary = "歧异词典的路径" 来设定

####歧义纠正是Ansj分词的最后最后的大招了。杀伤力巨大。谨慎使用。极可能造成其他的错误。

下面给一个例子。是动态添加的。

			//ansj_sej 5.1.x
			{
				Value value = new Value("川府办", "川府办", "n");
				Library.insertWord(AmbiguityLibrary.get(), value);

				value = new Value("京财企业务", "京财企", "nt", "业务", "j");
				Library.insertWord(AmbiguityLibrary.get(), value);

				//测试发现NLP新词发现导致 `川府办发` 依然被搞成了 `川府  办发` 因为字典分词在新词发现之前调用
				System.out.println(NlpAnalysis.parse("据说川府办发的发文很厉害"));
				
				System.out.println(NlpAnalysis.parse("京财企业务繁忙"));
			}

			//歧义纠正
			Value value = new Value("川府办", "川府办", "n");
			Library.insertWord(UserDefineLibrary.ambiguityForest, value);
			
			value = new Value("京财企业务", "京财企", "nt", "业务", "j");
			Library.insertWord(UserDefineLibrary.ambiguityForest, value);
			
			System.out.println(NlpAnalysis.parse("据说川府办发的发文很厉害"));;
			System.out.println(NlpAnalysis.parse("京财企业务繁忙"));;