Linux上多用户安装StanfordCoreNLP报错:一直运行不报错的所有错误点及解决方法

Linux上多用户安装StanfordCoreNLP报错:一直运行不报错的所有错误点及解决方法


最近做实验,需要用到这个库,来将文本转换为依赖树,在window上本地的java环境下,可以直接运行.但是在实验室的服务器上安装一直出错。

场景服务器中有多个用户,我是其中一个普通用户,没有管理员权限

安装步骤:

1. 安装java环境

因为Stanfordnlp是用java写的,所以需要在linux上安装java环境。配置jdk8及以上的版本
安装的具体步骤请参考下面链接:
linux安装java环境的详细步骤

2. 安装Stanfordnlp

  1. 可以直接去官网下载stanfordnlp的包,Stanfordnlp的官网
    将压缩包通过Xftp上传至服务器,解压之后并进入该文件夹,这里我下载的是3.9.2版本的,也可以通过某网盘下载,但是速度超慢

    unzip stanford-corenlp-full-2018-10-05.zip
    cd stanford-corenlp-full-2018-10-05
    
  2. 配置环境变量
    在第一步配置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,记得一定要更新一下配置文件

  3. 之后就可以安装这个包啦

    pip install stanfordcorenlp
    
  4. 包的使用

    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就是要有耐心,心态不能崩呀。加油!!!

参考文献

  1. linux安装java环境的详细步骤 https://blog.csdn.net/m0_46316970/article/details/117924909
  2. Stanfordnlp 官网:https://stanfordnlp.github.io/CoreNLP/
  3. 如何在下载java:在java.com上下载64位java https://jingyan.baidu.com/article/3aed632ede2a2f7010809114.html
  4. 【Solved】java.lang.IllegalStateException: Could not delete shutdown key file:权限问题: https://blog.csdn.net/lhyhaiyan/article/details/129258382
  5. JAVA系列:java.io.tmpdir默认目录查看与修改 https://blog.csdn.net/VIP099/article/details/120585270
  6. ubuntu stanford超详细安装步骤 https://blog.csdn.net/sunshine2304/article/details/127537459
  7. stanfordcorenlp安装教程&问题汇总&简单使用
  8. StanfordCoreNLP 踩过的坑(python,java)
  9. 【已解决】关于stanfordcorenlp一直运行且不报错的解决方案
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值