python解析器的作用_在Python中使用Stanford解析器处理中文文本不起作用

武元白
2023-12-01

有两个(好吧,三个。。。请参见下面的“更新3”,了解第三个)单独的事情:

1)您的代码返回两个树(两个ROOT),但您只希望得到一个。发生这种情况是因为raw_parse_sents需要一个句子列表,而不是一个句子,如果您给它一个字符串,它将解析字符串中的每个字符,就像它自己的句子一样,并返回一个一个字符树的列表。所以要么传递raw_parse_sents一个列表,要么使用raw_parse。在

2)您没有指定model_path,默认值为英语。中文有五个选项,但看起来这一个与在线解析器匹配:parser = stanford.StanfordParser(model_path='edu/stanford/nlp/models/lexparser/xinhuaFactored.ser.gz', path_to_jar='stanford-parser.jar',path_to_models_jar='stanford-parser-3.5.1-models.jar')

结合这两个更改,我可以匹配在线解析器(为了匹配您的输出格式,我还必须将返回的listiterator强制转换为列表):

^{pr2}$

更新1:

我意识到你可能也在寻找一种更像网站上的输出格式,在这种情况下,这是可行的:for tree in parser.raw_parse(s):

print tree # or print tree.pformat().encode('utf-8') to force an encoding

更新2:classify.decisiontree.DecisionTreeClassifier.pp → pretty_format

metrics.confusionmatrix.ConfusionMatrix.pp → pretty_format

sem.lfg.FStructure.pprint → pretty_format

sem.drt.DrtExpression.pretty → pretty_format

parse.chart.Chart.pp → pretty_format

Tree.pprint() → pformat

FreqDist.pprint → pformat

Tree.pretty_print → pprint

Tree.pprint_latex_qtree → pformat_latex_qtree

更新3:

我现在正在尝试匹配您评论中句子的输出,'你好,我心情不错今天,你呢?'。在

我在写这篇文章的时候广泛地提到了Stanford Parser FAQ,并建议你去看看(尤其是“你能不能给我一些帮助,帮助我开始分析中文?”)。我学到的是:

通常,在分析中文文本之前,您需要将中文文本“分段”成由空格分隔的单词(由一个或多个字符组成)。在线解析器执行此操作,您可以在网页上看到分段步骤和解析步骤的输出。对于我们的测试句,它显示的分段是'你好 , 我 心情 不错 今天 , 你 呢 ?'。在

如果我在本地通过xinhuaFactored模型运行这个分段字符串,那么我的输出与在线解析器完全匹配。在

所以我们需要先通过分词器来运行文本,然后再通过解析器运行它。FAQ推荐了Stanford分词器,这可能是在线解析器正在使用的:http://nlp.stanford.edu/software/segmenter.shtml。在

(正如FAQ所提到的,解析器还包含一个模型xinhuaFactoredSegmenting,它在解析调用中执行近似的分段。但是,它将此方法称为“合理的,但并不优秀”,并且输出的结果与我们的标准在线解析器不匹配。)

 类似资料: