【问题标题】:Installing coreNLP in R在 R 中安装 coreNLP
【发布时间】:2016-01-11 07:29:59
【问题描述】:

我正在按照此链接上的说明使用 coreNLP https://github.com/statsmaths/coreNLP

但是,我发现了这个错误

> library(coreNLP)

Error in get(method, envir = home) : 
lazy-load database '/Users/apple/Library/R/3.2/library/coreNLP/R/coreNLP.rdb is  corrupt
In addition: Warning messages:
 1: In .registerS3method(fin[i, 1], fin[i, 2], fin[i, 3], fin[i, 4],  :
 restarting interrupted promise evaluation
 2: In get(method, envir = home) :
 restarting interrupted promise evaluation
 3: In get(method, envir = home) : internal error -3 in R_decompress1
 Error: package or namespace load failed for ‘coreNLP’

【问题讨论】:

    标签: r nlp stanford-nlp devtools r-package


    【解决方案1】:

    遇到java.lang.UnsupportedClassVersionError: edu/stanford/nlp/pipeline/StanfordCoreNLP : Unsupported major.minor version 52.0错误信息后:

    你需要

    • 安装 java 8,(作为超级用户),
    • 将操作系统使用的默认jvm更改为这个jvm(*见下文),
    • 在命令行上运行R CMD javareconf,然后
    • 将环境变量 LD_LIBRARY_PATH 设置为存储 libjvm.so 的目录。
    • 重启 R/RStudio

    • 确保您的计算机上存在交换文件(或交换分区)。调用free 以检查输出中是否有以swap 开头的行并且该行上的值不为零。

    我用的是 ubuntu,我的 java 8 libjvm.so 在这里:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so

    您可以在 .Rprofile 文件中执行此操作。添加这一行,可能在文件的底部:

    Sys.setenv(LD_LIBRARY_PATH=paste0(Sys.getenv("LD_LIBRARY_PATH"), ":", "/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/" ))

    当我在 R 中这样做时:

    R> Sys.getenv("LD_LIBRARY_PATH")
    [1] "/usr/local/lib64/R/lib:/usr/local/lib64:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/"
    R> library(coreNLP)
    R> initCoreNLP()
    

    我得到这个结果:

    Searching for resource: config.properties
    Adding annotator tokenize
    TokenizerAnnotator: No tokenizer type provided. Defaulting to PTBTokenizer.
    Adding annotator ssplit
    Adding annotator pos
    Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger ... done [1.1 sec].
    Adding annotator lemma
    Adding annotator ner
    Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz ... done [5.6 sec].
    Loading classifier from edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz ... done [2.1 sec].
    Loading classifier from edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz ... done [3.8 sec].
    Initializing JollyDayHoliday for SUTime from classpath: edu/stanford/nlp/models/sutime/jollyday/Holidays_sutime.xml as sutime.binder.1.
    Reading TokensRegex rules from edu/stanford/nlp/models/sutime/defs.sutime.txt
    Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.sutime.txt
    Reading TokensRegex rules from edu/stanford/nlp/models/sutime/english.holidays.sutime.txt
    Adding annotator parse
    Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [0.6 sec].
    Adding annotator dcoref
    Adding annotator sentiment
    
    R> example(getSentiment)
    
    gtSntmR> getSentiment(annoEtranger) # first Sentence of L'Etranger by A.Camus
      id sentimentValue sentiment
    1  1              1  Negative
    2  2              2   Neutral
    
    gtSntmR> getSentiment(annoHp) # first Sentence of Harry Potter V1
      id sentimentValue    sentiment
    1  1              4 Verypositive
    

    (*) 如何在 Linux 上查看默认的 jvm:

    update-alternatives --display java
    

    结果

    java - auto mode
      link currently points to /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
    

    要显示所有可用的替代品,请使用

    update-alternatives --list java
    

    结果(在我的机器上):

    /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
    /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
    /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
    

    改变替代方案:

    sudo update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
    

    稍微玩一下更新替代品。

    【讨论】:

    • 我尝试将路径设置为 /usr/lib/jvm...但我找不到 jvm 文件夹。我的电脑上已经有 java 8
    • 尝试 shell 命令updatedb; locate libjvm.so,如果需要,从 ubuntu 存储库安装它。
    【解决方案2】:
    > install.packages('devtools')
    > devtools::install_github("statsmaths/coreNLP")
    > download.file("http://nlp.stanford.edu/software/stanford-corenlp-full-2015-01-29.zip", '/path/to/save/stanford-corenlp-full-2015-01-29.zip')
    > unzip('/path/to/save/stanford-corenlp-full-2015-01-29.zip')
    

    上面来自https://github.com/statsmaths/coreNLP 的说明有效,可能是在 R 中安装库

    重新运行这些命令以重新安装 corenlp 包装器:

    > install.packages('devtools')
    > devtools::install_github("statsmaths/coreNLP")
    

    如果包没有损坏,你应该会看到这个:

    > devtools::install_github("statsmaths/coreNLP")
    Downloading GitHub repo statsmaths/coreNLP@master
    Installing coreNLP
    '/usr/lib/R/bin/R' --no-site-file --no-environ --no-save --no-restore CMD  \
      INSTALL '/tmp/RtmpFS9LWl/devtools667a3cdbc084/statsmaths-coreNLP-3a667c6'  \
      --library='/home/expert/R/x86_64-pc-linux-gnu-library/3.2' --install-tests 
    
    * installing *source* package ‘coreNLP’ ...
    ** R
    ** data
    *** moving datasets to lazyload DB
    ** inst
    ** preparing package for lazy loading
    ** help
    *** installing help indices
    ** building package indices
    ** testing if installed package can be loaded
    * DONE (coreNLP)
    Reloading installed coreNLP
    

    否则devtools 应该重新安装软件包。

    【讨论】:

    • 嗯,奇怪,我按照你的代码看到了相同的行,但我安装了库: library("coreNLP", lib.loc="~/Library/R/3.2/library") IT 再次显示相同的错误
    • 您使用的是哪个操作系统?终端上lsb_release -a 的输出是什么?
    • 在终端上执行rm -rf /Users/apple/Library/R/3.2/library/coreNLP,然后尝试在R中重新运行devtools::install_github("statsmaths/coreNLP")
    • 我在加载库时仍然发现“错误:‘coreNLP’的包或命名空间加载失败”。
    • lsb_release -a 的输出是什么?
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 2015-11-28
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    相关资源
    最近更新 更多