Closed Geo123abc closed 1 month ago
我个人其实更倾向于检测到重复条目后仅提醒,进入“重复条目”窗格,手动逐个检查新旧条目的字段(尤其是“年期卷页”,)然后手动合并。
对于你说的,你可以更详细解释一下吗:
对于操作 1、2 ,似乎合并条目就已经实现了:合并后的条目会同时存在于新旧两个条目所在的分类。
我不太理解这两个操作的区别,操作 2 是指“保留两者”吗? —— 如果是的话,这与 Linter 的理念相悖,因为 Linter 不允许存在重复条目 —— 重复条目给创建参考文献表造成了很大的干扰。
对于操作 3,我不是很清楚你所说的 Locate 是什么,是指年期卷页这类定位符?还是指 Zotero 检索(Locate / Lookup)引擎? 以及这个的作用是什么?
另外,这个功能做出来后不久 zoplicate 就发布了,并且比 Linter 的要完善不少。考虑到不要重复造轮子,Linter 的重复条目检测在更多操作(如自动保留新/旧等)这里就没有做更多改进,只保留了基本的检测提醒。因此你可以关闭 Linter 的重复条目检测,然后启用 Zoplicate 来实现重复条目的高级处理。
CC @ChenglongMa 也许你对这位同学的想法感兴趣吗?
感谢反馈,有些功能zoplicate已经实现了,不过我很愿意继续改进它。 谢谢!
我有注意到zoplicate这个插件,第91期 插件教程 zotero批量管理重复条目,这个链接就是zoplicate插件使用效果,但是我zotero安装了太多的插件,感觉系统有点吃不消,后来发现linter有这个功能,并且还可以。之前也在徘徊要把这个改进发到 zoplicate issue 还是 linter issue,在这大家都可以讨论一下。
下面这些仅仅是我个人观点,
一般情况下我们添加新条目是因为在当前collection中看不到这个条目(就是不知道zotero中有这个条目),所以才添加了这个重复条目,如果我们知道已经有了这个条目,并且已经定位到了,大概率应该不会再添加这个条目了。曾经一度我还想着在浏览器页面端显示当前文献是否已经存在在zotero中,但是后来被否了(性能消耗太大,记不清在哪提的了),所以:
zotero://select/items/1_R9GF3EQR
这个链接的效果比较像,不过更推荐下面代码:var item = await Zotero.Items.getByLibraryAndKeyAsync(Zotero.Libraries.userLibraryID,"R9GF3EQR");
Zotero.getActiveZoteroPane().selectItem(item.id); //如果当前collection中有`R9GF3EQR`,则直接定位到这个条目,否则在“zotero-my library”中定位这个条目
附注:“重复条目”窗格合并重复项会导致旧条目的元信息增多
var zoteroPane = Zotero.getActiveZoteroPane();
var items = zoteroPane.getSelectedItems();
for (let item of items) {
return item;
}
一个条目在和另一个条目合并前、合并后,分别执行上述代码,查看“relations”字段,可以发现是有变化的,而我们添加一个条目,很多时候是看不到我们的zotero库已经存在这个条目,如果往“relations”字段添加了信息之后,然后删除新添加的重复条目,长此以往,会造成zotero微弱的、不必要的膨胀。
dc:replaces
是 Dublin Core Metadata Initiative (DCMI) 元数据术语集中的一个元素,它用来指示一个资源取代或替代了另一个资源。在资源的元数据描述中使用 dc:replaces
表示当前的资源是之前资源的新版本或更新形式,或者以某种方式取代了那个资源。
例如,如果有一篇文章的新版本发布了,这个新版本可以在其元数据中使用 dc:replaces
来指出它替代了之前的旧版本。通常,这个元素会包含一个指向被替代资源的标识符,如一个URI(统一资源标识符)。
在实际应用中,dc:replaces
可以帮助用户了解资源之间的版本历史和更新关系,从而更好地管理和访问这些资源。例如:
也就是说合并之后,会在新生成的条目的元信息的“relations”字段写入信息,长久下来,会导致数据库的无关信息增多(我认为保留dc:replaces
应该是一种能避免,就避免的操作)
曾经一度我还想着在浏览器页面端显示当前文献是否已经存在在zotero中,但是后来被否了(性能消耗太大,记不清在哪提的了)
https://github.com/northword/zotero-format-metadata/issues/74 大约是这里面提到的三个链接。
操作2是为了在当前collection中能直接看到旧版本的条目,下一步用户可以在当前collection中手动合并两个重复的条目,或者直接删除新加的重复条目;
有两个问题想要讨论:
另外,跳转到“重复条目”窗格后,按住 Ctrl 并点击某条目,可以高亮其所在行,可以对比字段信息,对比完成后可以选择合并/删除,似乎可以实现你的需求,并且操作步数是接近的:
graph TD;
弹窗 --> |流程1|定位旧条目;
定位旧条目 -->|字段不需要修改| 选择操作1或2;
定位旧条目 -->|字段需要修改| GoToMerge;
GoToMerge --> 查看新旧条目;
查看新旧条目 --> 选择合并;
选择合并 --> 结束;
选择操作1或2 --> 结束;
弹窗 --> |流程2|GoToMerge2;
GoToMerge2 --> 查看新旧条目2;
查看新旧条目2 --> 合并2;
查看新旧条目2 --> 删除;
删除 --> 添加分类;
合并2 --> 结束;
添加分类 --> 结束;
- 如果当前添加的条目,文库存在多个与其重复项,如何处理打开 collection 和合并?
这个确实是我没有想到的,因为我现在的zotero库已经经历过查重维护了,也就是目前点击“重复条目”窗格,不会有重复的条目。不过,如果“文库存在多个与其重复项”,那就把这些条目到添加到当前collection中。
至于“操作3”,这个定位是在当前collection中定位,如果当前collection中没有这个条目,那么会自动跳转到my library 中,不涉及到选择其它的collection问题,但是具体选择哪个重复的旧条目,我认为可以生成多行,每一行都有三个操作,大致是这样子
重复条目1(是一个库中已有的旧条目) 操作1 操作2 操作3 重复条目2(是一个库中已有的旧条目) 操作1 操作2 操作3 重复条目3(是一个库中已有的旧条目) 操作1 操作2 操作3 ......
问题2 也是如上,在定位、跳转collection的时候,只涉及当前collection和my library这两个collection的问题,不涉及到其它collection的问题,也就是说操作3的点击事件是:
var itemkey = 重复条目N的itemkey;
var item = await Zotero.Items.getByLibraryAndKeyAsync(Zotero.Libraries.userLibraryID,itemkey);
Zotero.getActiveZoteroPane().selectItem(item.id); //效果是:如果当前collection中有`R9GF3EQR`,则直接定位到这个条目,否则在“zotero-my library”中定位这个条目
你可以再run javascript中运行上述代码,看一下效果
其实提出这个issue的目的是,尽量不跳转到“重复条目”窗格,减少打断当前工作的事件。
我觉得这个功能可能加在 zoplicate 里可能更好一些,因为他是一个专门针对重复条目的插件,并且我近期比较忙,没有太多精力去实现插件,希望你可以理解。
@ChenglongMa 不知道你是否有兴趣在 zoplicate 里实现这个功能呢?
好的,我这两天看一看 😊
您好,为了不打扰 northword,我在 zoplicate 重新开了一个 Discussion#65,欢迎移步讨论。
谢谢!
Describe the feature
一直困于zotero添加了重复条目如何处理,现在Linter插件给了很好的解决方案。
但是“Duplicates found”的功能可以改进一下
一般情况下我们添加新条目是因为在目前collection中看不到这个条目,所以推荐以下几个选项
可以参考一下这个插件的逻辑
第91期 插件教程 zotero批量管理重复条目【插件】
Additional context
No response