0

我有一个 20gb 的数据库文件 (*.db),其中包含从 Scopus 获得的大量有关科学文章的信息。大多数信息都存储在数据库文件的响应表中。我只想从每篇发表的文章中获取主题领域。我不知道如何从数据库文件中获取它。

在数据库文件的每一行中,都存储了关于作者、文章以及主题区域的大量信息。一个片段如下所示:

{"abstracts-retrieval-response":{"coredata":{"prism:url":"http://api.elsevier.com/content/abstract/scopus_id/85012897283","dc:identifier":"SCOPUS_ID:85012897283","eid":"2-s2.0-85012897283","language":{"@xml:lang": "eng"},"authkeywords":{"author-keyword": [{"@_fa": "true", "$" :"austerity policies"},{"@_fa": "true", "$" :"housing policy"},{"@_fa": "true", "$" :"Italy"},{"@_fa": "true", "$" :"Mediterranean welfare regime"},{"@_fa": "true", "$" :"Neoliberalism"},{"@_fa": "true", "$" :"Spain"}]},"idxterms":null,"subject-areas":{"subject-area": [{"@_fa": "true", "@abbrev": "SOCI", "@code": "3303", "$" :"Development"},{"@_fa": "true", "@abbrev": "SOCI", "@code": "3322", "$" :"Urban Studies"},{"@_fa": "true", "@abbrev": "ENVI", "@code": "2308", "$" :"Management, Monitoring, Policy and Law"}]}}

从这个大(但实际上更大)表中,我只对获取dc-identifier和(多个)主题领域感兴趣。理想情况下,我会将它们放在 *.csv 文件中。

有没有一种直接的方法可以使用 Python 从 *.db 文件中获取这些信息?使用sqlite3我似乎能够使用以下代码访问数据库:

import sqlite3
conn = sqlite3.connect('C:/responses.db')       
c = conn.cursor()

对我来说,我不清楚我现在如何只能从数据库文件中获取 dc 标识符和主题区域信息。

4

1 回答 1

1

使用该json.loads()函数会将输入的 JSON 字符串转换为由一组分层的字典和列表组成的 Python 对象。然后,您需要使用标准 Python 运算符从中提取信息。以下是一个示例,尽管我不确定该示例是否提取了正确的文档 ID。这也未经测试,因此您可能需要调整或更正它。此外,您的示例输入有不平衡的花括号,因此对下面使用的结构的解释可能不太正确。

import sqlite3
import json

conn = sqlite3.connect('C:/responses.db')       
c = conn.cursor()

# Initialize the output list.
subjectlist = []

# Get the data from SQLite.
c.execute("select * from responses;")

# Iterate over all the rows of data
for row in c:
    # Extract and save the subject information.
    article = json.loads(row[0])
    doc_id = article["abstracts-retrieval-response"]["coredata"]["dc:identifier"]
    subjects = [s["$"] for s in article["abstracts-retrieval-response"]["coredata"]["subject-areas"]["subject-area"]]
    for s in subjects:
        subjectlist.append([doc_id, s])

在这段代码的结尾,subjectlist将是一个包含两个元素列表的列表,每个列表都由文档 ID 和主题区域组成。然后,您可以使用该csv库将其导出,或者将其作为新表推回数据库中,以便进一步查询。

于 2017-09-28T14:07:40.697 回答