使用js对zotero的标题和会议地址进行批量修改大小写.md

该博客介绍了如何使用JavaScript脚本来批量修改Zotero中选定文献的会议名称和标题的大小写格式。作者首先批评了谷歌学术的不统一,然后分享了如何利用Zotero的JS支持来定制文献的会议名称,使其首字母大写并排除特定缩写。此外,还提供了修改文献标题首字母大写的代码,以便统一格式。博客强调了只对选中文献进行修改并提醒读者做好备份,以防错误。
摘要由CSDN通过智能技术生成

前言

首先要批判一下谷歌学术,同一个会议/期刊的文章,会议名称都能不统一,直接导入endNote再插入,被老板说了好久,直接舍弃endNote了。

image-20221005192228999

image-20221005192650844

现在使用zotero导入后,发现zotero可以使用js修改,虽然这个软件功能不如endnote多,但是支持了js就很舒服。

虽然js没怎么用过,不过语法大差不差,有错误的话欢迎指正。

修改文献会议大小写的代码

官方api写的其实很详细,自己需要定制化的话请详见组件名称官方示例

下面这串代码功能主要是对 文献的会议名称进行更改,全部改成首字母大写,一些专有名词保持不变,删除一些缩写

zoteroPane = Zotero.getActiveZoteroPane();
items = zoteroPane.getSelectedItems();
//计数替换条目个数
var cnt = 0;
//缩写,需要全大写
var skip_set_abbreviation = new Set(['IEEE', 'CVF', 'CVPR', 'ECCV', 'IEEE/CVF'])
//副词on,of等
var skip_set_adverb = new Set(['on', 'of', 'and', 'the'])
//统一格式,有些会议会加简称,格式形如“(ECCV),(CVPR)”,删除掉这些简称,统一会议名称
var delete_set = new Set(['(ECCV)'])
var ans = ""
for (var i = 0; i < items.length; i++) {
    var item = items[i]
    var isProceed = true
    //需要修改的,一般是会议或者期刊
    var proceed = item.getField("proceedingsTitle");
    if (proceed === "") {
        isProceed = false
        proceed = item.getField("publicationTitle")
    }
    let words = proceed.split(" ");
    //如果是arXiv的话不做修改
    if (words[0].toLowerCase() === 'arxiv') {
        var logging = item.getField("title") + "因为是arxiv的文章,未做修改\n\n"
        // console.log(item.getField("title"))
        ans += logging
        continue
    }
    for (let i = 0; i < words.length; i++) {
        //遇到不需要改的就跳过
        if (skip_set_abbreviation.has(words[i]) || skip_set_adverb.has(words[i])) {
            continue
        }
        //删掉不要的会议缩写
        if (delete_set.has(words[i])) {
            words[i] = ""
            continue
        }
        words[i] = words[i].replace(words[i][0], words[i][0].toUpperCase())
    }
    //将修改后的单词拼接起来
    let s = words.join(" ");
    //去除前后多余的空格
    s = s.trim();
    ans += s + "\n\n"
    // console.log(s)d
    //写到文件中
    if (isProceed) {
        item.setField("proceedingsTitle", s);
    } else {
        item.setField("publicationTitle", s);
    }
    cnt++;
    await item.saveTx();
}
ans = "修改了" + cnt + "份文献的会议/期刊名称\n" + ans
return ans

编辑后的效果如下,并且已经写到了文件中去

image-20221005195330978

将文献名称修改大小写

其实zotero本身也有首字母大写的功能,不过不能跳过一些缩写,也不能一键操作,下面这串代码主要是对文献标题进行首字母大写

zoteroPane = Zotero.getActiveZoteroPane();
items = zoteroPane.getSelectedItems();

var cnt = 0;
var ans = ""

//需要全部大写的
var up = new Set(['smpl', '3d', '2d'])
//一些奇怪的缩写或者专有名词在这写
var map = new Map([["abcd...", "aBcd..."]])
for (var i = 0; i < items.length; i++) {
    var currTitle = items[i].getField("title");
    //先统一格式
    currTitle = currTitle.toLowerCase()
    for (var key of up) {
        //zotero的js不支持replaceAll,出此下策
        while (true) {
            var temp = currTitle.replace(key, key.toUpperCase());
            if (temp === currTitle) break
            currTitle = temp
        }
    }
    /*
       //修改一些特殊的专有名词,需要用的时候将"/ *"和"* /"删除掉
       for (var key of map) {
           //zotero的js不支持replaceAll,出此下策
           while (true) {
               var temp = currTitle.replace(key, map.get(key));
               if (temp === currTitle) break
               currTitle = temp
           }
       }
   */

    //一般题目全都是小写,除了首字母和冒号后的首字母
    var split = currTitle.split(":");
    for (var j = 0; j < split.length; j++) {
        currWord = split[j]
        var idx = 0
        while (idx < currWord.length && currWord[idx] === ' ') idx++
        split[j] = currWord.replace(currWord[idx], currWord[idx].toUpperCase())
    }
    var res = split.join(":");
    ans += res + "\n\n"
    items[i].setField("title", res);
    cnt++;
    await items[i].saveTx();
}
ans = "修改了" + cnt + "份文献的名称\n" + ans
return ans

运行效果如下所示

image-20221005204124119

注意

只对选中的文献进行修改,记得做好备份,万一修改错误不负责的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值