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

修改论文模型时需要对知识图谱DBpedia进行实体链接,官方的DBpedia Spotlight就非常好用,特此记录。
 
上次的记录博客给师弟看了依然有疑问,更新下再写详细点~
之后会再写一个从零开始构建自己的知识图谱并通过RGCN获取实体嵌入的博客。

1 Docker

由于DBpedia Spotlight需要部署到服务器中,官方使用的是Docker,这里我们需要先下载Docker。(提供一个我使用的Docker版本

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

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

 
 

2 DBpedia Spotlight

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

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

1、在DBpedia Spotlight的github上找到对应的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

image-20220416110221706

2、Windows打开命令行窗口(先按win+R,输入cmd,再回车),运行刚刚的Docker命令行。

3、如果运行成功,那么Docker里会有对应的镜像,然后点击旁边的RUN就可以得到对应的容器,接着再运行这个容器。

   

3 实体抽取

下列代码需要先按前面的方法把Docker运行起来后才能生效。该代码的效果和前面提到的网址功能一样,可以将输入的文本text里和知识图谱DBpedia中对应的实体进行关联。这段代码实现的功能是,我们传入一段文本,该函数这段文本里的DBpedia的实体。confidence是置信度,值越高提取文本里的实体越准确,但是可能实体数量也会变少,就和前面那个示例网站一样。

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


if __name__ == '__main__':
    print(_text2entities('My favorite star is Leonardo!', 0.5))

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39763246/article/details/124210505