我正在尝试解析西班牙语的纯文本语料库以获得类似于SNLI语料库(用于蕴含)的结果,我在下面附上了snli语料库的摘录。
教堂的天花板上有裂缝。 ((教堂)((有(裂缝(在(天花板上)))))) (根(S(NP(DT The)(NN教堂))(VP(VBZ具有)(NP(NP(NNS裂缝))(PP(IN in)(NP(DT the)(NN天花板)))))) (。。)))
我尝试了下面的代码,但是输出根本不好。
from nltk import Tree
from functools import reduce
from nltk.parse.corenlp import CoreNLPParser
def binarize(tree):
"""
Recursively turn a tree into a binary tree.
"""
if isinstance(tree, str):
return tree
elif len(tree) == 1:
return binarize(tree[0])
else:
label = tree.label()
return reduce(lambda x, y: Tree(label, (binarize(x), binarize(y))), tree)
parser = CoreNLPParser(url='http://localhost:9002')
#parse, = parser.raw_parse('you could say that they regularly catch a shower, which adds to their exhilaration and joie de vivre')
parse, = parser.raw_parse('si idioma no es elegido entonces elegir español por defecto.')
print(parse)
t = parse
bt = binarize(t)
print(bt)
答案 0 :(得分:0)
我的输出是使用stanford-spanish-corenlp-2017-06-09-models.jar
生成的,可以在这里下载:https://nlp.stanford.edu/software/lex-parser.shtml#Download
由于某些原因,使用models.jar
文件的较新版本会产生不同的结果。
请确保将西班牙文.jar
和其他Stanford Core NLP放入文件夹中(我使用了最新的2018-10-05
)。
然后,当您启动Stanford Core NLP服务器时,请确保并以西班牙语启动它:
java -mx3g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -serverProperties StanfordCoreNLP-spanish.properties -port 9000 -timeout 15000
请注意,CoreNLPTagger
的西班牙语实例使用不同的标记集,该标记集在Spanish FAQ页面上有详细说明。
from nltk.parse.corenlp import CoreNLPParser
parser = CoreNLPParser(url='http://localhost:9000')
parsed = parser.raw_parse('si idioma no es elegido entonces elegir español por defecto.')
for node in parsed:
print(node)
以下示例输出:
(ROOT
(sentence
(S
(S
(conj (cs si))
(sn (grup.nom (nc0s000 idioma)))
(neg (rn no))
(grup.verb (vsip000 es)))
(S (participi (aq0000 elegido))))
(S
(sadv (grup.adv (rg entonces)))
(S
(infinitiu (vmn0000 elegir))
(s.a (grup.a (aq0000 español)))
(sp (prep (sp000 por)) (sn (grup.nom (nc0s000 defecto))))))
(fp .)))
答案 1 :(得分:0)
谢谢您的反馈。我尝试了获取输出的方法,但是它使用的是UD标签集,却什么也没做:
(ROOT
(sentence
(sn
(grup.nom
(SCONJ si)
(NOUN idioma)
(NOUN no)
(AUX es)
(VERB elegido)
(ADV entonces)
(VERB elegir)
(ADJ español)
(ADP por)
(NOUN defecto)))
(PUNCT .)))
我看到的是我需要连接到Stanford parser(斯坦福CoreNLP 3.7.0,更新于2016-09-12)(西班牙模型),而不是this page(斯坦福CoreNLP 3.9.1) ,于2018/04/05更新)。下面的解析示例来自斯坦福解析器演示页面,我正在寻找确切的输出结果:
(ROOT
(sentence
(sadv
(grup.adv (rg si)))
(sn
(grup.nom (nc0s000 idioma)))
(neg (rn no))
(grup.verb (vsip000 es) (vmp0000 elegido))
(S
(sadv
(grup.adv (rg entonces)))
(S
(infinitiu (vmn0000 elegir))
(s.a
(grup.a (aq0000 español)))
(sp
(prep (sp000 por))
(sn
(grup.nom (nc0s000 defecto))))))
(fp .)))
使用Ancora标签集中使用的标签集准确而完美地完成了这一点,您在上面也提到过。我尝试使用相同的解析器(解析器:spanishPCFG.ser.gz)进行跟踪,但是得到的结果与SNLI语料库(括号格式)的格式不同,并且它存在utf8代码问题(单词“'”) español'(尚未被识别):
mark(elegido-5, si-1)
nsubj(elegido-5, idioma-2)
neg(elegido-5, no-3)
cop(elegido-5, es-4)
root(ROOT-0, elegido-5)
mark(elegir-7, entonces-6)
advcl(elegido-5, elegir-7)
det(.-12, espa-8)
appos(espa-8, ol-9)
case(defecto-11, por-10)
nmod(ol-9, defecto-11)
punct(elegir-7, .-12)