我目前使用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
你在寻找Stanford Dependency Parser。像大多数斯坦福工具一样,这也与Stanford CoreNLP注释器下的depparse
捆绑在一起。其他解析器包括Malt parser(基于特征的移位缩减解析器)和Ryan McDonald的MST parser(准确但较慢的最大生成树解析器)。
与Java和其他语言集成的另一个解决方案是使用Spacy REST API。例如,https://github.com/jgontrum/spacy-api-docker提供了Spacy REST API的Dockerization。
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();
}