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