4

我目前使用 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 那样生成依赖树的库。

编辑:

我调查了斯坦福解析器。但是,它生成了以下解析树:

                     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
4

4 回答 4

2

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

于 2016-12-22T06:33:57.923 回答
1

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

于 2019-06-20T02:23:49.223 回答
0

我最近发布了spaCy4j,它模仿了 spaCy 中的 Token 容器对象,并与spaCy 服务器或 CoreNLP 集成。

一旦你有一个正在运行的 spacy-server docker(很容易设置),它就像:

// Create a new spacy-server adapter with host and port matching a running instance of spacy-server.
SpaCyAdapter adapter = SpaCyServerAdapter.create("localhost", 8080);

// Create a new SpaCy object. It is thread safe and should be reused across our app
SpaCy spacy = SpaCy.create(adapter);

// Parse a doc
Doc doc = spacy.nlp("My head feels like a frisbee, twice its normal size.");

// Inspect tokens
for (Token token : doc.tokens()) {
    System.out.printf("Token: %s, Tag: %s, Pos: %s, Dependency: %s%n", 
            token.text(), token.tag(), token.pos(), token.dependency());
}

如有任何问题等,请随时通过 github 联系。

于 2021-07-04T06:21:25.957 回答
-2

spacy可以通过java程序运行。

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

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])

// 代替打印,我们可以写入文件以进行进一步处理

在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();
        }
于 2019-03-26T13:23:23.950 回答