Linux上多用户安装StanfordCoreNLP报错:一直运行不报错的所有错误点及解决方法
本篇文章目录,主要是报错的第二个是我的错误
最近做实验,需要用到这个库,来将文本转换为依赖树,在window上本地的java环境下,可以直接运行.但是在实验室的服务器上安装一直出错。
场景:服务器中有多个用户,我是其中一个普通用户,没有管理员权限。
安装步骤:
1. 安装java环境
因为Stanfordnlp是用java写的,所以需要在linux上安装java环境。配置jdk8及以上的版本
安装的具体步骤请参考下面链接:
linux安装java环境的详细步骤
2. 安装Stanfordnlp
-
可以直接去官网下载stanfordnlp的包,Stanfordnlp的官网
将压缩包通过Xftp上传至服务器,解压之后并进入该文件夹,这里我下载的是3.9.2版本的,也可以通过某网盘下载,但是速度超慢unzip stanford-corenlp-full-2018-10-05.zip cd stanford-corenlp-full-2018-10-05
-
配置环境变量
在第一步配置java环境变量的时候,我们在.bashrc文件下加入java的环境变量export CLASSPATH=.../stanford-corenlp-4.5.1/stanford-corenlp-4.5.1.jar //这里是你的Stanfordnlp解压的路径
这个环境变量附加到java环境变量CLASSPATH的后面,两个路径之间用冒号连接:
export JAVA_HOME=Java/jdk8 //这里修改为你自己的jdk的位置 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:/这个是你自己的路路径位置/Download/stanford-corenlp-full-2018-10-05/stanford-corenlp-3.9.2.jar export PATH=${JAVA_HOME}/bin:$PATH
然后退出bashrc文件 按ESC 输入:wq退出并且保存。
再更新一下 souce ~/.bashrc,记得一定要更新一下配置文件。 -
之后就可以安装这个包啦
pip install stanfordcorenlp
-
包的使用
from stanfordcorenlp import StanfordCoreNLP path = r"/Download/stanford-corenlp-full-2018-10-05/" //这里是你的压缩包解压的路径 nlp = StanfordCoreNLP(path, quiet=False,logging_level=logging.DEBUG) //这里的后面两个参数是可以看到debug的错误的信息,可以不加 nlp = StanfordCoreNLP(path) sentence="I like swimming . But Tom likes singing. Can you help me ?" tokens = nlp.word_tokenize(sentence) dep_outputs = nlp.dependency_parse(sentence)
查看是否有对应的分词和依赖树的输出。
一般情况下,就安装好了。
但是我的二般情况,报错了。下面是错误信息。
报错
1:ModuleNotFoundError
就是报错ModuleNotFoundError没有这个包,我没有遇到这个错误,但是看其他人的解决方案,
如果报这个错,大概率就是java环境没有配置好。
按照上面的java配置一般不会出错,配置jdk8及以上的版本。注意要是64位
参考:如何在下载java:在java.com上下载64位java
2. 一直运行卡在nlp = StanfordCoreNLP(path)这一步,也不报错
我确定我的java配置没有任何问题,但就是一直卡在这里,这个时候
nlp = StanfordCoreNLP(path, quiet=False,logging_level=logging.DEBUG)
后面的两个参数就尤为重要,可以打印错误信息。方便debug
错误信息如下:
INFO:root:Initializing native server...
INFO:root:java -Xmx4g -cp "/media/ubuntu/projects/JiaMengWei/Download/stanford-corenlp-full-2018-10-05/*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9008
INFO:root:Server shell PID: 1653843
[main] INFO CoreNLP - --- StanfordCoreNLPServer#main() called ---
[main] INFO CoreNLP - setting default constituency parser
[main] INFO CoreNLP - warning: cannot find edu/stanford/nlp/models/srparser/englishSR.ser.gz
[main] INFO CoreNLP - using: edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz instead
[main] INFO CoreNLP - to use shift reduce parser download English models jar from:
[main] INFO CoreNLP - http://stanfordnlp.github.io/CoreNLP/download.html
Exception in thread "main" java.lang.IllegalStateException: Could not delete shutdown key file
at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.<init>(StanfordCoreNLPServer.java:216)
at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.main(StanfordCoreNLPServer.java:1477)
[Thread-0] INFO CoreNLP - CoreNLP Server is shutting down.
INFO:root:Waiting until the server is available.
INFO:root:Waiting until the server is available.
INFO:root:Waiting until the server is available.
INFO:root:Waiting until the server is available.
有两种情况:第一种情况我没有遇到,但是网上也有解决方法
1. 就是权限问题,看自己是不是在普通用户下运行的
参考这个链接:权限问题
2. 但是我们是实验室共用的服务器,有多个普通用户,且没有管理员权限
幸好有男朋友哈哈,帮我看到了源码。源码链接
报错的地方:
分析:
发现这个装临时文件的文件夹tmp已经存在才会报错,没有shutdown 关键的file。关键的就是我们是实验室的服务器,里面有多个普通用户,tmp文件已经存在了,也就是有其他人已经使用过这个Stanfordnlp的库,并且建立tmp文件夹在公共区域,且我没有权限删除,导致我无法使用这个包。(唉,还是自己对linux的权限管理不熟悉哇,搞前端的也要学一学)。
解决方法:就是在自己的用户权限下,建一个tmp,不和其他用户共用。
export _JAVA_OPTIONS=-Djava.io.tmpdir=/media/ubuntu/projects/.../tmp/ 这里的。。是我自己的用户名,换成你自己要建的路径tmp
参考JAVA系列:java.io.tmpdir默认目录查看与修改
总结
至此,解决问题,啊这个问题困扰我一整天,终于解决了,这个linux自己太不了解了,以后要多学学。JAVA也要拾起来,而且debug的错误信息日志也很重要,不报错,就要想办法看怎么能看到log日志文件,来分析它的错误,对症下药,还有就是一定要有耐心啊,找bug就是要有耐心,心态不能崩呀。加油!!!
参考文献
- linux安装java环境的详细步骤 https://blog.csdn.net/m0_46316970/article/details/117924909
- Stanfordnlp 官网:https://stanfordnlp.github.io/CoreNLP/
- 如何在下载java:在java.com上下载64位java https://jingyan.baidu.com/article/3aed632ede2a2f7010809114.html
- 【Solved】java.lang.IllegalStateException: Could not delete shutdown key file:权限问题: https://blog.csdn.net/lhyhaiyan/article/details/129258382
- JAVA系列:java.io.tmpdir默认目录查看与修改 https://blog.csdn.net/VIP099/article/details/120585270
- ubuntu stanford超详细安装步骤 https://blog.csdn.net/sunshine2304/article/details/127537459
- stanfordcorenlp安装教程&问题汇总&简单使用
- StanfordCoreNLP 踩过的坑(python,java)
- 【已解决】关于stanfordcorenlp一直运行且不报错的解决方案