美文网首页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