自然语言处理时的内存溢出

      近来在做自然语言处理的一个项目,使用了几个工具包,包括中科院计算所的ICTCLAS(java版),复旦大学的FudanNLP和斯坦福大学的stanford parser。Java版的ICTCLAS有一些Bug,但只要勤在网上Baidu或Google,总可以找解决办法。但FudanNLP和standford parser的麻烦在于其内存要求较高,特别是在分词或句法分析时更是如此。

 FudanNLP 词性标注时:

      官方给出的解决方案是增加Java运行时的内存大小,即增加Java Heap Size。如果你使用Eclipse的话,可以直接在eclipse.ini里配置-Xms500m -Xmx1g。但我这样配置后,依然会出现内存错误,同学好像就没有,郁闷:(

具体参见: http://code.google.com/p/fudannlp/issues/detail?id=8

Stanford Parser 
依存句法分析,分析到N个句子时出现:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.HashMap.resize(Unknown Source)
	at java.util.HashMap.addEntry(Unknown Source)
	at java.util.HashMap.put(Unknown Source)
	at edu.stanford.nlp.parser.lexparser.Interner.intern(Interner.java:16)
	at edu.stanford.nlp.parser.lexparser.HookChart.addEdge(HookChart.java:229)
	at edu.stanford.nlp.parser.lexparser.BiLexPCFGParser.processEdge(BiLexPCFGParser.java:558)
	at edu.stanford.nlp.parser.lexparser.BiLexPCFGParser.processItem(BiLexPCFGParser.java:594)
	at edu.stanford.nlp.parser.lexparser.BiLexPCFGParser.parse(BiLexPCFGParser.java:869)
	at edu.stanford.nlp.parser.lexparser.LexicalizedParserQuery.parse(LexicalizedParserQuery.java:259)
	at edu.stanford.nlp.parser.lexparser.LexicalizedParser.apply(LexicalizedParser.java:282)
这个的处理方法与FudanNLP类似,增加Java Heap Size到1G以上。
官方给的解决方案及类似问题可参见: http://nlp.stanford.edu/software/parser-faq.shtml#k

在此贴一下利用Stanford Parser进行依存句法分析的一个简单例子:
import java.util.Collection;
import java.util.Iterator;

import edu.stanford.nlp.parser.lexparser.LexicalizedParser;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.TypedDependency;
import edu.stanford.nlp.trees.international.pennchinese.ChineseGrammaticalStructure;

public class TestICTCLAS
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{	
		String grammar = ".\\models\\xinhuaFactoredSegmenting.ser.gz";
		String[] options = { "-maxLength", "80" };
		LexicalizedParser lp = LexicalizedParser.loadModel(grammar,options);


		String s = "国务院日前发出紧急通知,要求各地切实落实保证市场供应的各项政策,维护副食品价格稳定。";

		Tree t = lp.apply(s);

		ChineseGrammaticalStructure gs = new ChineseGrammaticalStructure(t);

		Collection<TypedDependency> tdl = gs.typedDependenciesCollapsed();

		System.out.println(tdl);
		
		for(TypedDependency td:tdl)
		{
			System.out.println(td.reln().getShortName()
					+":"+td.gov().nodeString()+","+td.dep().nodeString());
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值