2017-10-28 144 views
0

我一直在Jupyter笔记本内练习Spacy NLP一段时间,并创建了一些适用于我需要的脚本。如何从网站内使用Spacy NLP

我也有一个我创建的网站(内置在React中)。我需要能够根据用户在我的网站上选择的内容将数据传递给Spacy脚本,然后在完成传入数据的工作后,需要再次从Spacy NLP脚本接收结果。

我一直在寻找相当一段时间(并且对于使用Python来说是新的),并且完全不知道如何基本上能够从我的网站中使用/访问Python Spacy脚本,并且还从脚本接收信息。

任何人都可以建议如何做到这一点?如果这是一个愚蠢的问题,并提前道歉。非常感谢。

+3

一个可能的解决方案是使用'flask'设置一个轻量级的web API。该API的终端会调用您的spacy脚本。还有一些灵感来看看[spacy-services](https://github.com/explosion/spacy-services)。 –

回答

0

当然,这取决于您想要做什么以及想要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:flaskhug(我个人最喜欢的 - 需要Python 3)。
  • 为了寻找灵感:在spacy-services回购,其中包括REST服务spaCy's displaCy visualizers(不幸的是,微翘的时刻已经过时 - 但这将尽快修复!)
  • 如果您需要加载并服务于不同的模型,并利用的缓存以获得更好的性能,请查看spacy_api项目 - spaCy社区成员开发的一个很好的扩展项目。它可以帮助您在单独的专用过程中加载模型。然而,如果你是Python的新手,这可能会让你立即跳入其中 - 你可能更适合从一个非常简单的方法入手,并且在你的应用程序运行后再开始。