【DBpedia Spotlight】知识图谱实体链接/抽取文本实体

修改论文模型时需要对DBpedia进行实体链接,官方的DBpedia Spotlight就非常好用,特此记录。

1 Docker

由于DBpedia Spotlight需要部署到服务器中,使用的是Docker,这里我们需要先下载。(注意不支持MacBook M1)

一直点默认安装即可,不过安装完成后可能碰到WLS2不一致的问题,官方也给出了。按照里面说的去下载Ubuntu就行。

在成功安装完Docker后,选择Images(镜像),可以从里面找到ubuntu。

2 DBpedia Spotlight

DBpedia Spotlight可以把我们输入的文本中的实体抽取出来,将其对应到知识图谱DBpedia。官方提供了一个示例网站:https:/demo.dbpedia-spotlight.org

下面在Windows的Docker中部署DBpedia Spotlight服务:

1、先去下载对应语言的模型,我常用英文,这里下载的英文模型。

2、在上找到对应的Docker命令行代码,英文的如下:

docker run -tid --restart unless-stopped --name dbpedia-spotlight.en --mount source=spotlight-model,target=/opt/spotlight -p 2222:80 dbpedia/dbpedia-spotlight spotlight.sh en

3、Windows打开命令行窗口(先按win+R,输入cmd,再回车),运行刚刚的Docker命令行,由于我已经运行工,这里就不再运行了。

4、如果运行成功,那么Docker里会有对应的镜像,然后点击旁边的RUN,就可以得到对应的容器,运行该容器,然后编写相应代码。

3 实体抽取

下列代码需要先按前面的方法把Docker运行起来后才能生效。该代码的效果和前面提到的网址功能一样,可以将输入的文本text里和知识图谱DBpedia中对应的实体关联,以字典形式返回。

import json
import re
import requests

DBPEDIA_SPOTLIGHT_ADDR = "http://localhost:2222/rest/annotate"

def _text2entities(text, confidence):
    headers = {
          
   "Accept": "application/json"}
    data = {
          
   "text": text, "confidence": confidence}

    response = requests.get(url=DBPEDIA_SPOTLIGHT_ADDR, params=data, headers=headers)
    response = response.json()
    return (
        [f"<{
            
     x[@URI]}>" for x in response["Resources"]]
        if "Resources" in response
        else []
    )
经验分享 程序员 微信小程序 职场和发展