美文网首页KG
知识图谱(jena Fuseki)实战

知识图谱(jena Fuseki)实战

作者: 术枚派 | 来源:发表于2021-06-18 17:02 被阅读0次

我们的目标是爬取化工产品,然后转换为RDF数据,之后使用jena进行查询。

爬取化工产品的信息

我们的目标网站是MERCK。这个网站有一些的化工产品。使用的python包是BeautifulSoup。


首先读取存放URL的json文件

jsonFile = open("url.json",'r' , encoding='utf-8') 
urls = json.load( jsonFile)
items = urls.items()
#遍历json文件
for key , value in items:
    fatherClass = key 
    url = value

json文件内容如下,URL和对应的分类

{
    "分析色谱":"https://www.sigmaaldrich.cn/CN/zh/products/analytical-chemistry/analytical-chromatography",
    "分析试剂":"https://www.sigmaaldrich.cn/CN/zh/products/analytical-chemistry/analytical-reagents",
    "分析样品制备":"https://www.sigmaaldrich.cn/CN/zh/products/analytical-chemistry/analytical-sample-preparation",
    "光度法及快速化学品检测":"https://www.sigmaaldrich.cn/CN/zh/products/analytical-chemistry/photometry-and-rapid-chemical-testing
}

之后访问URL,获取页面文件,使用的是get请求。

    response = requests.get(url)
    response.encoding = response.apparent_encoding #设置编码格式
    print("状态码:"+ str( response.status_code ) ) #打印状态码
    # print(response.text)#输出爬取的信息

之后使用BeautifulSoup解析HTML文件,通过find_all方法找到对应的tag

    soup = BeautifulSoup(response.text, "lxml")
    div = soup.find_all('div' , attrs={'class':"MuiTypography-root MuiTypography-body1"})

在找到对应的tag后,遍历children获取其中的内容。去除空格是因为转换为NT文件后上传到jena Fuseki不能有空格。

for d in div:
        childrens = d.contents
        name = childrens[0].text
        description = childrens[1].text
         name = name.replace(" ", "")
        description = description.replace(" ", "")

之后就是将数据转换为RDF的格式

        subClassStr = "<http://%s> <http://%s> <http://%s>."
        descriptionStr = "<http://%s> <http://%s> <http://%s>."
        instanceStr ="<http://%s> <http://%s> <http://%s>."
        subClassStr = subClassStr %(name , "subclass", fatherClass)
        descriptionStr = descriptionStr%( name , "description",description )
        print("名字:", name , "————————描述:", description)
        triples.append(subClassStr)
        triples.append(descriptionStr)
        for i in range(10):
            tempStr = instanceStr %(name , "instance" , name + str(i))
            triples.append(tempStr)

之后存储文件

    filename = ("%s_triples.nt") % (fatherClass)
    with open(filename,"w+", encoding='utf-8') as fd:
        fd.write("\n".join(triples))
        print("write %s success!"% fatherClass)

使用jena Fuseki

在Windows下点击fuseki-server.bat

软件目录
之后在浏览器输入http://localhost:3030/即可使用。
web页面
查询语言是SPARQL。

查询

查询的语法是三元组的形式。

查询第三条是分析色谱的三元组的数目

PREFIX m: <http://>
SELECT  (COUNT (?subject) AS ?num )
WHERE {
  ?subject  ?re m:分析色谱 .
}

结果


结果

查询第三条是分析色谱的三元组的前两个属性的信息

SELECT  ?subject ?re
WHERE {
  ?subject  ?re m:分析色谱 .
}

结果


结果

代码

https://github.com/KxuanZhang/ChemicalProductKnowledgeGraph

相关文章

网友评论

    本文标题:知识图谱(jena Fuseki)实战

    本文链接:https://www.haomeiwen.com/subject/ltxlyltx.html