spa中的Java替代品

问题描述 投票:4回答:3

我目前使用spaCy遍历依赖树,并生成实体。

nlp = get_spacy_model(detect_lang(unicode_text))
doc = nlp(unicode_text)

entities = set()
for sentence in doc.sents:

  # traverse tree picking up entities
  for token in sentence.subtree:
    ## pick entitites using some pre-defined rules

entities.discard('')
return entities

spaCy有什么好的Java替代品吗?

我正在寻找生成依赖树的库,就像spaCy一样。

编辑:

我查看了Stanford Parser。但是,它生成了以下解析树:

                     ROOT
                      |
                      NP
       _______________|_________
      |                         NP
      |                _________|___
      |               |             PP
      |               |     ________|___
      NP              NP   |            NP
  ____|__________     |    |     _______|____
 DT   JJ    JJ   NN  NNS   IN   DT      JJ   NN
 |    |     |    |    |    |    |       |    |
the quick brown fox jumps over the     lazy dog

但是,我正在寻找像spaCy那样的树结构:

                             jumps_VBZ
   __________________________|___________________
  |       |        |         |      |         over_IN
  |       |        |         |      |            |
  |       |        |         |      |          dog_NN
  |       |        |         |      |     _______|_______
The_DT quick_JJ brown_JJ   fox_NN  ._. the_DT         lazy_JJ
nlp stanford-nlp pos-tagger spacy
3个回答
1
投票

你在寻找Stanford Dependency Parser。像大多数斯坦福工具一样,这也与Stanford CoreNLP注释器下的depparse捆绑在一起。其他解析器包括Malt parser(基于特征的移位缩减解析器)和Ryan McDonald的MST parser(准确但较慢的最大生成树解析器)。


0
投票

与Java和其他语言集成的另一个解决方案是使用Spacy REST API。例如,https://github.com/jgontrum/spacy-api-docker提供了Spacy REST API的Dockerization。


-1
投票

spacy可以通过java程序运行。

应首先通过执行以下命令从命令提示符创建env

python3 -m venv env
source ./env/bin/activate 
pip install -U spacy
python -m spacy download en
python -m spacy download de

使用以下命令创建一个bash文件spacyt.sh,与env文件夹并行

#!/bin/bash 
python3 -m venv env
source ./env/bin/activate 
python test1.py

将spacy代码放在python脚本test1.py中

import spacy
print('This is a test script of spacy')
nlp=spacy.load("en_core_web_sm")
doc=nlp(u"This is a sentence")
print([(w.text, w.pos_) for w in doc])

//而不是print我们可以写入文件进行进一步处理

在java程序中运行bash文件

String cmd="./spacyt.sh";

        try {
            Process p = Runtime.getRuntime().exec(cmd);
            p.waitFor();
            System.out.println("cmdT executed!");
        } catch (Exception e) {
            e.printStackTrace();
        }
© www.soinside.com 2019 - 2024. All rights reserved.