当然,这取决于您想要做什么以及想要spaCy提取什么。在大多数情况下,您至少需要一个API端点,您的应用程序可以发布一串文本,并将文本解析为spaCy Doc
,并返回您的应用程序需要的任何内容。例如,如果你需要提取的实体,您的端点会做这样的事情:然后
def extract_entities(text):
doc = nlp(text)
entities = [{'start': ent.start_char, 'end': ent.end_char, 'label': ent.label_}
for ent in doc.ents]
return {'entities': entities}
你的阵营应用可以做这样的事情:
fetch('http://your-api:8080/extract_entities', {
method: 'POST',
headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },
body: JSON.stringify({ text })
})
.then(res => res.json())
.then(json => this.setState({ entities: json.entities }))
你还需要确保预加载您正在使用的模型。特别是如果你使用的是spaCy v1.x,那么这些模型非常大且内存密集 - 但无论如何,你肯定不希望在每个请求或会话中加载模型。
一些额外的资源:
- 要设置您的REST API:
flask
或hug
(我个人最喜欢的 - 需要Python 3)。
- 为了寻找灵感:在
spacy-services
回购,其中包括REST服务spaCy's displaCy visualizers(不幸的是,微翘的时刻已经过时 - 但这将尽快修复!)
- 如果您需要加载并服务于不同的模型,并利用的缓存以获得更好的性能,请查看
spacy_api
项目 - spaCy社区成员开发的一个很好的扩展项目。它可以帮助您在单独的专用过程中加载模型。然而,如果你是Python的新手,这可能会让你立即跳入其中 - 你可能更适合从一个非常简单的方法入手,并且在你的应用程序运行后再开始。
一个可能的解决方案是使用'flask'设置一个轻量级的web API。该API的终端会调用您的spacy脚本。还有一些灵感来看看[spacy-services](https://github.com/explosion/spacy-services)。 –