Python 调用 Stanford Parser 两种方法

来源:互联网 发布:日文汉化软件 编辑:程序博客网 时间:2024/05/16 09:34

本人操作环境:
windows7,64位操作系统
64位Python2.7.6
jython2.5.2

NLTK-3.0.4

JAVA 8


方法一:官网推荐的Jython接口

参考:
http://nlp.stanford.edu/software/lex-parser.shtml#Download
https://github.com/vpekar/stanford-parser-in-jython


第一,将stanford.py放到F:\jython2.5.2\Lib;
第二,在文件test_stanford.py中将englishPCFG.ser.gz的完整路径作为StanfordParser的参数,如下:
PARSER = StanfordParser('E:\jcode\englishPCFG.ser.gz')
第三,将stanford-parser.jar的完整路径添加到jython的classpath中,在stanford.py的文件头部添加如下代码:
sys.path.append('F:\jython2.5.2\extlibs\stanford-parser.jar')
第四,在cmd中运行test_stanford.py
结果如下图:


第五,注意这三个软件的版本,Stanford parser v.3.5.0(我试了高版本3.6.0,会报错), Java 8, Jython 2.5.2
注:关于Jython的安装和配置环境变量很简单,请自行百度。


方法二:调用NLTK中的stanford parser接口
参考:
http://stackoverflow.com/questions/13883277/stanford-parser-and-nltk
http://blog.csdn.net/qq_19670461/article/details/42681551
第一,修改F:\Python2.7.6\Lib\site-packages\nltk-3.0.4-py2.7.egg\nltk\parse\stanford.py文件中的如下代码:

 # Run the tagger and get the output.            stdout,stderr=java(cmd, classpath=(self._stanford_jar, self._model_jar,'E:/jars/slf4j-api-1.7.17.jar'),                                  stdout=PIPE, stderr=PIPE)            stdout = stdout.decode(encoding)
将slf4j-api-1.7.17.jar的完整路径加入到classpath中,这样就可以解决如下异常
java.lang.ClassNotFoundException: org/slf4j/LoggerFactory
slf4j下载地址:http://www.slf4j.org/download.html
第二,运行如下demo

# -*- coding: cp936 -*-  import os    from nltk.parse import stanford    #添加stanford环境变量,此处需要手动修改,jar包地址为绝对地址。  os.environ['STANFORD_PARSER'] = 'E:/jars/stanford-parser.jar'  os.environ['STANFORD_MODELS'] = 'E:/jars/stanford-parser-3.6.0-models.jar'    #为JAVAHOME添加环境变量  java_path = "C:/Program Files/Java/jdk1.8.0_51/bin/java.exe"  os.environ['JAVAHOME'] = java_path    #句法标注  parser = stanford.StanfordParser(model_path="E:/jcode/englishPCFG.ser.gz")  print list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))  
运行结果如下:

其他功能参考Python2.7.6\Lib\site-packages\nltk-3.0.4-py2.7.egg\nltk\parse\stanford.py文件中头部示例。
第三,注意nltk的版本3.0版本,3.1版本用法可能与上述不同。

3 0
原创粉丝点击