论文分区数据库与应用

还在为帮导师纯体力打工而烦恼吗?还在为统计论文分区而浪费时间吗?面对数以千计的论文记录和期刊列表,还在寻找浏览器扩展一条条搜索分区信息吗?

计算机的学生要有计算机学生解决问题的方式。说得好,我们要来点替代体力劳动的东西。

期刊分区数据库

想要自动化处理和分类期刊,一个期刊的分区数据库是不可缺少的。

本想研究下一些所谓的学术用浏览器扩展,找到可以查询期刊分区的API接口,后来想想不如找一找是否有现成的数据库。

这不,可以直接找到:hitfyd/ShowJCR。打开项目目录中的中科院分区表及JCR原始数据文件文件夹,找到jcr.db文件,这就是我们需要的数据库了。

具体数据库内容可参见仓库说明,值得注意的是,JCR/SCI分区信息更新于每年6月,而中科院分区信息更新于每年年底,CCF……不太清楚,反正就那回事。

数据库中有以下表(截至2024年5月):

1
2
3
4
5
6
7
8
9
10
11
12
13
jcr.db
- JCR2022 # JCR分区2022年版
- JCR2021 # JCR分区2021年版
- JCR2020 # JCR分区2020年版
- GJQKYJMD2024 # 国际期刊预警名单2024年版
- GJQKYJMD2023 # 国际期刊预警名单2023年版
- GJQKYJMD2021 # 国际期刊预警名单2022年版
- GJQKYJMD2020 # 国际期刊预警名单2021年版
- CCF2022 # CCF推荐期刊列表2022年版
- CCFT2022 # CCF推荐国内期刊(?)列表2022年版
- FQBJCR2023 # 中科院分区2023年版
- FQBJCR2022 # 中科院分区2022年版
- FQBJCR2021 # 中科院分区2021年版

或许有用的SQL示例

运行以下SQL代码:

1
2
3
SELECT jcr.Journal, jcr.ISSN, jcr."IF(2022)" AS IFactor, jcr.IFQuartile
FROM JCR2022 jcr
WHERE jcr.Journal = 'nature' COLLATE NOCASE

结果:

1
NATURE|0028-0836|64.8|Q1

或许有用的Python脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import sqlite3

JCR_DB = "jcr.db"

class JCRQuerier():
def __init__(self, jcr_db: str) -> None:
self.con = sqlite3.connect(jcr_db)
self.con.execute('PRAGMA foreign_keys = ON')

def get_journal_jcr_rank(self, journal_name: str):
cursor = self.con.cursor()
query = """
SELECT jcr.Journal, jcr.ISSN, jcr."IF(2022)" AS Ifactor, jcr.IFQuartile
FROM JCR2022 jcr
WHERE jcr.Journal = ? COLLATE NOCASE
"""
cursor.execute(query, (journal_name,))
res = cursor.fetchall()
cursor.close()
return res

def get_journal_cas_rank(self, journal_name: str):
cursor = self.con.cursor()
query = """
SELECT cas.Journal, cas.大类分区 AS CASBig, cas.小类1分区 CASSmall1
FROM FQBJCR2023 cas
WHERE cas.Journal = ? COLLATE NOCASE
"""
cursor.execute(query, (journal_name,))
res = cursor.fetchall()
cursor.close()
return res

def get_journal_rank_union(self, journal_name: str):
cursor = self.con.cursor()
query = """
SELECT jcr.Journal, jcr.ISSN, jcr."IF(2022)" AS Ifactor, jcr.IFQuartile, cas.大类分区 AS CASBig, cas.小类1分区 CASSmall1
FROM JCR2022 jcr, FQBJCR2023 cas
WHERE jcr.Journal = cas.Journal
AND jcr.Journal = ? COLLATE NOCASE
"""
cursor.execute(query, (journal_name,))
res = cursor.fetchall()
cursor.close()
return res

querier = JCRQuerier(JCR_DB)
journal_name = "nature"
rank = querier.get_journal_jcr_rank(journal_name)
print(rank)