不懂SRL的自己去扫盲吧,简言之就是predict-argument分析。找了一些工具,其中暂时调通两个
1. swirl
http://sourceforge.net/projects/swirl-parser/,可以从这下载,本工具里readme介绍较详细,主要是注意有多种输入格式。
带有名实体标注的可能效果比较好,什么都没有的效果比较差一点,下面就简单说一下什么都没有的输入格式。
格式:
0 Some O - countries O - are O be having O have difficulties O - in O - managing O manage a O - place O - to O - live O live for O - their O - citizen O - as O - they O - tend O tend to O - get O get overpopulated O - . O -
每一行一个句子,每个单词都是一个三元组(单词 O -),针对动词的srl,如果是动词,则最后的-要填上动词原形,如上例中的have,tend等,最前面的是一个0,类似于分类器的类别标签吧,不管它,加了便是。
这样使用swirl就可以parse了,命令行格式比较简单./swirl_parse ./swirl_model ./charniak_model input云云,有说明自己看吧。
缺点是有些特殊符号不识别,就会down掉,比如双引号、横线等,而且分析速度较慢,效果也一般。
2. mate-tools
由google code上下载 http://code.google.com/p/mate-tools/
需要下载srl的tar包,以及对应语言的各种model文件
暂时只调了英文的pipeline的形式,即输入单纯的英文的句子,就能输出诸如词性标注、句法、语义角色等信息,以conll2009的形式,见demo(http://barbar.cs.lth.se:8081/parse),中文等其他语言应该也类似吧。
输入格式按列来分布,只要保证第二列是单词即可,其他无所谓,如
- I -
- am -
- tied -
该换句子的时候, 就加个空行。
需要修改script中的pipeline的sh文件中的内容,上面都有写,自己对应好就ok,下面贴一个自己的
##################################################
## (1) The following needs to be set appropriately
##################################################
INPUT=data/eng/test.txt
LANG="eng"
LEMMATIZER_MODEL="models/CoNLL2009-ST-English-ALL.anna-3.3.lemmatizer.model"
POS_MODEL="models/CoNLL2009-ST-English-ALL.anna-3.3.postagger.model"
PARSER_MODEL="models/CoNLL2009-ST-English-ALL.anna-3.3.parser.model"
SRL_MODEL="models/CoNLL2009-ST-English-ALL.anna-3.3.srl-4.1.srl.model"
OUTPUT="$LANG.out"
##################################################
## (2) These ones may need to be changed
##################################################
JAVA="java" #Edit this i you want to use a specific JRE.
MEM="4g" #Memory for the JVM, might need to be increased for large corpora.
CP="srl.jar:lib/anna-3.3.jar:lib/liblinear-1.51-with-deps.jar:lib/opennlp-tools-1.5.2-incubating.jar:lib/opennlp-maxent-3.0.2-incubating.jar:lib/seg.jar"
JVM_ARGS="-cp $CP -Xmx$MEM"
在根目录执行这个script就ok了。生成的结果文件会在当前目录保存。
mate-tool不会受什么符号影响,而且速度较快。
最后贴个结果吧
1 Our our our PRP$ PRP$ _ _ 3 3 NMOD NMOD _ _ A1 _
2 current current current JJ JJ _ _ 3 3 NMOD NMOD _ _ AM-TMP _
3 population population population NN NN _ _ 4 4 SBJ SBJ Y population.01 A2 _
4 is be be VBZ VBZ _ _ 0 0 ROOT ROOT _ _ _ _
5 6 6 6 CD CD _ _ 6 6 DEP DEP _ _ _ _
6 billion billion billion CD CD _ _ 7 7 NMOD NMOD _ _ _ _
7 people people people NN NN _ _ 4 4 PRD PRD _ _ _ _
8 and and and CC CC _ _ 4 4 COORD COORD _ _ _ _
9 it it it PRP PRP _ _ 10 10 SBJ SBJ _ _ _ A1
10 is be be VBZ VBZ _ _ 8 8 CONJ CONJ _ _ _ _
11 still still still RB RB _ _ 10 10 TMP TMP _ _ _ AM-TMP
12 growing grow grow VBG VBG _ _ 10 10 VC VC Y grow.01 _ _
13 exponentially exponentially exponentially RB RB _ _ 12 12 MNR MNR _ _ _ A2
14 . . . . . _ _ 4 4 P P _ _ _ _