本人操作环境:
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版本用法可能与上述不同。