northword / zotero-format-metadata

Linter for Zotero. A plugin for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, and item languages, etc; detect duplicate items.
GNU Affero General Public License v3.0
417 stars 8 forks source link

[Feature Request] 标题转换大小写自定义术语 #58

Closed northword closed 6 months ago

northword commented 1 year ago

Describe the feature

Inspired by https://github.com/ManuelaRunge/Zotitle

Additional context

low priority

fredericky123 commented 7 months ago

期待一个自定义的术语库,comminity不断一起补充

wyy-yiyang commented 6 months ago

同意,需要自定义的术语库,比如拉丁名啥的不需要转小写

wyy-yiyang commented 6 months ago

似乎修改这个文件就可以src/utils/str.ts

wyy-yiyang commented 6 months ago

xpi中添加content\scripts\linter.js的chemElements补充

northword commented 6 months ago

提一个想法,咨询一下大家意见 —— “自定义术语” 仅支持全匹配。

比如对拉丁名 Jasminum sambac (L.) Ait ,设置术语 Jasminum sambac (L.) Ait , 仅当标题中存在 Jasminum sambac (L.) Ait 时,保留大小写;而对不是全匹配的(如 jasminum sambac (L.) Ait),不会将其修正为大写Jasminum sambac (L.) Ait

这样应该是比较合理的吗?

northword commented 6 months ago

此外,不知道是否可以提供一些需要使用自定义术语的标题例子(例如所提到的包含“拉丁名”的标题),如果部分术语具备共通的特征,应该可以写成规则避免大量手动设置。

fredericky123 commented 6 months ago

提一个想法,咨询一下大家意见 —— “自定义术语” 仅支持全匹配。

比如对拉丁名 Jasminum sambac (L.) Ait ,设置术语 Jasminum sambac (L.) Ait , 仅当标题中存在 Jasminum sambac (L.) Ait 时,保留大小写;而对不是全匹配的(如 jasminum sambac (L.) Ait),不会将其修正为大写Jasminum sambac (L.) Ait

这样应该是比较合理的吗?

非常同意,全匹配没问题

wyy-yiyang commented 6 months ago

提一个想法,咨询一下大家意见 —— “自定义术语” 仅支持全匹配。

比如对拉丁名 Jasminum sambac (L.) Ait ,设置术语 Jasminum sambac (L.) Ait , 仅当标题中存在 Jasminum sambac (L.) Ait 时,保留大小写;而对不是全匹配的(如 jasminum sambac (L.) Ait),不会将其修正为大写Jasminum sambac (L.) Ait

这样应该是比较合理的吗?

一些条目示例(部分我修改过,例如我设置了排除词Tuber,设置了条目斜体):

Chinese Black Truffle (Tuber indicum) Alters the Ectomycorrhizosphere and Endoectomycosphere Microbiome and Metabolic Profiles of the Host Tree Quercus aliena
A SPX domain-containing phosphate transporter from <i>Rhizophagus irregularis </i>handles phosphate homeostasis at symbiotic interface of arbuscular mycorrhizas
A Secreted Effector Protein of Laccaria bicolor Is Required for Symbiosis Development
A transcriptomic atlas of the ectomycorrhizal fungus<i> Laccaria bicolor</i>

最后,感谢大佬,辛苦!

wyy-yiyang commented 6 months ago

此外,不知道是否可以提供一些需要使用自定义术语的标题例子(例如所提到的包含“拉丁名”的标题),如果部分术语具备共通的特征,应该可以写成规则避免大量手动设置。

另外有个小问题,我设置了Tuber为自定术语,进行句首大写时,当条目标题为Assessment of ectomycorrhizal biodiversity in Tuber macrosporum productive sites时,Tuber不会被修改为小写,但题目为Assessment of ectomycorrhizal biodiversity in <i>Tuber macrosporum</i> productive sites时,Tuber会被修改为小写(我没添加Tuber macrosporum作为术语)。猜测应该是将<i></i>中的视为连续单词进行识别。 这应该不是一个大问题,因为我只添加了属名作为术语,而属名很少被单独使用,只需要知道插件识别时<i></i>中被视作一个词。

northword commented 6 months ago

因此我认为匹配时可以不使用全匹配。此外,通常拉丁名很难与其他单词重复,不使用全匹配有利于纠正已有条目中的错误。

这一点比较确定嘛?因为我不是生物这一块的,对拉丁名不是很了解,就如你所举例的 “Tuber” 检索,就可以检索出一些似乎并不是保持大写的情况:

亦或者你的关键词添加的其实是Tuber indicum才能保证对其他词的干扰降到最小?

句首大写时斜体的大写拉丁名也会被大写转成小写。

这可能是个bug,按目前的设计,包裹在 <i> 内的词语大小写是不会修改的。

UPDATE: 不是 bug,只有设置了 <span class="nocase> </span>" 的才不会修改大小写,<i> 会被当作单独的单词处理。你上面提到的<i>Tuber macrosporum</i> 被小写,是因为你修改的化学元素那里不识别 HTML 标签内的。

识别拉丁名并保证大小写和词库中一致,同时检测是否需要添加斜体标识。

实现起来复杂度可以接受,无非是多做几次正则替换。

由于物种拉丁名太多,很难设置成规则

这意味着插件本身不会对拉丁文物种名识别提供支持,只能由用户手动设置术语集合;如果量比较大的话,我就需要从文件里去读取术语,而不是直接存储在插件设置项内,因为会超出 Zotero 对设置项大小的限制。

wyy-yiyang commented 6 months ago

因此我认为匹配时可以不使用全匹配。此外,通常拉丁名很难与其他单词重复,不使用全匹配有利于纠正已有条目中的错误。

这一点比较确定嘛?因为我不是生物这一块的,对拉丁名不是很了解,就如你所举例的 “Tuber” 检索,就可以检索出一些似乎并不是保持大写的情况:

亦或者你的关键词添加的其实是Tuber indicum才能保证对其他词的干扰降到最小?

句首大写时斜体的大写拉丁名也会被大写转成小写。

这可能是个bug,按目前的设计,包裹在 <i> 内的词语大小写是不会修改的。

识别拉丁名并保证大小写和词库中一致,同时检测是否需要添加斜体标识。

实现起来复杂度可以接受,无非是多做几次正则替换。

由于物种拉丁名太多,很难设置成规则

这意味着插件本身不会对拉丁文物种名识别提供支持,只能由用户手动设置术语集合;如果量比较大的话,我就需要从文件里去读取术语,而不是直接存储在插件设置项内,因为会超出 Zotero 对设置项大小的限制。

我研究的这个物种的属名是少数与其他常见单词重复的属名😂,特别是与研究土豆等块茎的人重复,所以我只是自己加上用了。通常是使用种属名(例如Tuber indicum,而不是Tuber)会减小干扰。 拉丁名的量超级大,并根据每个人研究的方向和内容导致题目中接触到的种类较窄。如果全部拉丁名都储存在文件中似乎也很难保证符合大家心意。可以在设置时使用类似设置框,让有需要的自己填写就行,类似于这样?。

Image

northword commented 6 months ago

我研究的这个物种的属名是少数与其他常见单词重复的属名

那可以不使用全匹配,也可以加个开关。

如果全部拉丁名都储存在文件中似乎也很难保证符合大家心意。

我是指,类似自定义期刊缩写那个一样,让大家选文件路径,文件内自己填自己的。

可以在设置时使用类似设置框,让有需要的自己填写就行,类似于这样

主要就是数量,如果每个人只有几十个,那这样完全可以;但是几百上千个的话,一方面用户自己不好维护,另一方面容易大小超出限制。

wyy-yiyang commented 6 months ago

我是指,类似自定义期刊缩写那个一样,让大家选文件路径,文件内自己填自己的。

这个也可以,我看了一下我的翻译的术语库,也只有不到100个物种,其中还包含了物种缩写(如Tuber indicum缩写为T. indicum)。我只需要几十个物种,但可能设置成为文件路径会更适合大家使用和添加。

northword commented 6 months ago

一个可能的方案:

读取一个 CSV 文件,其中包含以下几列,每行一个术语,

source,target,caseSensitive,italic

CSV 文件可以用 Excel 打开,编辑就类似于 xsl 表格,编辑后正常保存即可,因此维护上还是比较方便的。

例,默认:

source,target,caseSensitive,italic
Tuber macrosporum
MnO2, MnO<sub>2</sub>

--Assessment of Ectomycorrhizal Biodiversity in Tuber Macrosporum Productive Sites
++Assessment of ectomycorrhizal biodiversity in Tuber macrosporum productive sites

--Assessment of ectomycorrhizal biodiversity in tuber macrosporum productive sites
++Assessment of ectomycorrhizal biodiversity in Tuber macrosporum productive sites

--Construction of Oxygen Vacancies in δ-MnO2 for Promoting Low-temperature Toluene Oxidation
++Construction of oxygen vacancies in δ-MnO<sub>2</sub> for promoting low-temperature toluene oxidation

--Construction of Oxygen Vacancies in δ-mno2 for Promoting Low-temperature Toluene Oxidation
++Construction of oxygen vacancies in δ-MnO<sub>2</sub> for promoting low-temperature toluene oxidation

例,大小写敏感:

source,target,caseSensitive,italic
Tuber macrosporum,,true
MnO2, MnO<sub>2</sub>, true

--Assessment of Ectomycorrhizal Biodiversity in Tuber Macrosporum Productive Sites
++Assessment of ectomycorrhizal biodiversity in tuber macrosporum productive sites

--Assessment of ectomycorrhizal biodiversity in tuber macrosporum productive sites
++Assessment of ectomycorrhizal biodiversity in tuber macrosporum productive sites

--Construction of Oxygen Vacancies in δ-MnO2 for Promoting Low-temperature Toluene Oxidation
++Construction of oxygen vacancies in δ-MnO<sub>2</sub> for promoting low-temperature toluene oxidation

例,斜体:

source,target,caseSensitive,italic
Tuber macrosporum,,,true
MnO2, MnO<sub>2</sub>, 

--Assessment of Ectomycorrhizal Biodiversity in Tuber Macrosporum Productive Sites
++Assessment of ectomycorrhizal biodiversity in <i>Tuber macrosporum</i> productive sites

--Assessment of Ectomycorrhizal Biodiversity in <i>Tuber Macrosporum</i> Productive Sites
++Assessment of ectomycorrhizal biodiversity in <i>Tuber macrosporum</i> productive sites

--Construction of Oxygen Vacancies in δ-MnO2 for Promoting Low-temperature Toluene Oxidation
++Construction of oxygen vacancies in δ-MnO<sub>2</sub> for promoting low-temperature toluene oxidation

大家觉得如何?

northword commented 6 months ago

第二个方案,在前一种的基础上,source 设置为字符串或正则表达式,如果是字符串,直接替换,如果是正则表达式,按正则表达式替换。这样可以去掉后两列(大小写敏感和斜体),因为正则表达式已经可以做到。

这种方案可操作性更强,相应有一些门槛(如果不会写正则的话多写几个字符串似乎也可

wyy-yiyang commented 6 months ago

第二个方案,在前一种的基础上,source 设置为字符串或正则表达式,如果是字符串,直接替换,如果是正则表达式,按正则表达式替换。这样可以去掉后两列(大小写敏感和斜体),因为正则表达式已经可以做到。

这种方案可操作性更强,相应有一些门槛(如果不会写正则的话多写几个字符串似乎也可

个人赞同方案二。直接展示AA替换为Aa更符合用户直觉。也不用考虑全匹配开关的事情。正则表达式更强大,后续使用潜力更强。即使不会正则表达式,多给几个常见的正则表达式填写示例可以解决大部分伙伴的需求。或者干脆多写几个字符串。目前我的翻译API术语库就是多写一些(因为不支持正则表达,但不涉及斜体)。

wyy-yiyang commented 6 months ago

这是我使用其他文献管理器时,作者提供的豁免转小写的词,可参考一下。其中一部分根据现有规则不会被修改为小写。

` "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "Austria", "Belgium", "Croatia", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Germany", "Greece", "Great Britain", "Hungary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Malta", "Netherlands", "Norway", "Poland", "Portugal", "Russia", "Slovakia", "Slovenia", "Spain", "Sweden", "Switzerland", "Turkey", "United Kingdom", "UK", "European Union", "European", "United Nations", "UN", "Canada", "Canadadian", "Japan", "Japanese", "US‐Japanese", "U", "US", "USA", "United States of America", "American", "China", "Amsterdam", "Brussels", "Cologne", "Columbia", "Den Haag", "London", "Moscow", "Munich", "Paris", "Vienna", "Zurich", "AG", "ARD", "ZDF", "GmbH", "WDR", "Amazon", "Google", "Microsoft", "CEO", "CEOs", "CFO", "CSR", "DAX", "F&E", "I", "Inc", "Ltd", "MBA", "M&A", "M&As", "NASDAQ", "R&D", "VC", "VCs", "RNA", "DNA" `

northword commented 6 months ago

image

image

zotero-format-metadata.zip

👆预览链接:把 zip 换成 xpi,就可以安装到 Zotero 里,可以看看是否可以满足需要

wyy-yiyang commented 6 months ago

zotero-format-metadata.zip

👆预览链接:把 zip 换成 xpi,就可以安装到 Zotero 里,可以看看是否可以满足需要

反馈:有个不知道算不算bug 的问题,条目使用右键,Linter,将标题改为句首大写: 自定义术语:tuber borchii,<i>Tuber borchii</i> escherichia coli,Escherichia coli 输入:Expression and Purification of a <span class="nocase">tuber borchii</span> fruitbody‐specific protein, TBF‐1, from <span class="nocase"><i>escherichia coli</i></span> : generation of polyclonal antibodies 输出:Expression and purification of a <span class="nocase"><i>Tuber borchii</i></span> fruitbody‐specific protein, TBF‐1, from <span class="nocase"><i>Escherichia coli</i></span> : generation of polyclonal antibodies 输入:Expression and Purification of a <span class="nocase"><i>tuber borchii</i></span> fruitbody‐specific protein, TBF‐1, from <span class="nocase"><i>Escherichia coli</i></span> : generation of polyclonal antibodies 输出:Expression and purification of a <span class="nocase"><i><i>Tuber borchii</i></i></span> fruitbody‐specific protein, TBF‐1, from <span class="nocase"><i>Escherichia coli</i></span> : generation of polyclonal antibodies

似乎标题中的<span class="nocase">并不起作用,是优先级的问题?有小概率会导致两个<i>。可能我需要继续尝试

此外,根据标识符更新全部字段显示为: Expression and Purification of a <i>Tuber borchii</i> Fruitbody‐Specific Protein, TBF‐1, from <i>Escherichia coli</i> : Generation of Polyclonal Antibodies

github-actions[bot] commented 6 months ago

:rocket: This ticket has been resolved in v1.16.0. See Release 1.16.0 for release notes.

wyy-yiyang commented 6 months ago

两个<i>

应该可以通过正则解决,我想想

northword commented 6 months ago

似乎标题中的并不起作用,是优先级的问题?

确实是,目前使用自定义术语替换是在最后直接整个替换的,没管 no case;

我理解的是 如果某个词需要 no case,那就不应该加一个自定义术语让他大写?

有小概率会导致两个

没写判断前后的,只写了替换,如果你需要避免这种,在第一列的正则里可以把前后的<i>给包含进去

此外,根据标识符更新全部字段显示为: Expression and Purification of a Tuber borchii Fruitbody‐Specific Protein, TBF‐1, from Escherichia coli : Generation of Polyclonal Antibodies

这个数据来自于线上数据库,插件没有处理,除非选择的是更新并lint

wyy-yiyang commented 6 months ago

我理解的是 如果某个词需要 no case,那就不应该加一个自定义术语让他大写?

有道理。我又试了一下,如果是词组只nocase其中一个就能避免被修改。

没写判断前后的,只写了替换,如果你需要避免这种,在第一列的正则里可以把前后的<i>给包含进去

有一部分文献导入时已经含有<i>。感觉选择正则表达式的csv反而不如方案一的简洁🤣。但是正则实现的功能更强。

最后,再次感谢大佬的更新

wyy-yiyang commented 6 months ago
大佬,有个问题, 自定义词如下: 1 2
H+ H+
NH4+ NH4+
N- N-

假设题目the HPLC Of NH4 and NH4+ H H+ N N- N-AAA BBB CCc Ddd 输出为the H<sup>+</sup>PLC of NH<sub>4</sub><sup>+</sup> and NH4+ H H+ N N<sub>-</sub> N-AAA BBB CCc ddd

但只要HPLC往后挪几个就不会被改,同时NH4有时会被替换为NH<sub>4</sub><sup>+</sup>,或者NH4+被换成NH<sub>4</sub><sup>+</sup>+(多了+)。

northword commented 6 months ago

是插件没有安全创建正则表达式导致的,目前插件为了方便把非正则的也变成了正则,于是 + 就成了一个正则表达式的术语,导致了错误。

今天晚点修复。

github-actions[bot] commented 6 months ago

:rocket: This ticket has been resolved in v1.16.2. See Release 1.16.2 for release notes.

fredericky123 commented 6 months ago

这是我使用其他文献管理器时,作者提供的豁免转小写的词,可参考一下。其中一部分根据现有规则不会被修改为小写。

`"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "Austria", "Belgium", "Croatia", "Czech Republic", "Denmark", "Estonia", "Finland", "France", "Germany", "Greece", "Great Britain", "Hungary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Malta", "Netherlands", "Norway", "Poland", "Portugal", "Russia", "Slovakia", "Slovenia", "Spain", "Sweden", "Switzerland", "Turkey", "United Kingdom", "UK", "European Union", "European", "United Nations", "UN", "Canada", "Canadadian", "Japan", "Japanese", "US‐Japanese", "U", "US", "USA", "United States of America", "American", "China", "Amsterdam", "Brussels", "Cologne", "Columbia", "Den Haag", "London", "Moscow", "Munich", "Paris", "Vienna", "Zurich", "AG", "ARD", "ZDF", "GmbH", "WDR", "Amazon", "Google", "Microsoft", "CEO", "CEOs", "CFO", "CSR", "DAX", "F&E", "I", "Inc", "Ltd", "MBA", "M&A", "M&As", "NASDAQ", "R&D", "VC", "VCs", "RNA", "DNA"`

有没有构造好一个常见的csv在此分享一下

wyy-yiyang commented 6 months ago

有没有构造好一个常见的csv在此分享一下

每个人使用的自定义词差别还挺大的,我的基本都是物种的种属名,其他的很少见

fredericky123 commented 6 months ago

我感觉上面那些个单词就够我用了

wyy-yiyang commented 6 months ago

我感觉上面那些个单词就够我用了

上面的词我没有构建自定义词组,因为没遇到需要改的,若果你有需要可以自己构建一下哦。按理说作者加在排除词中更合适(xpi中在content\scripts\linter.js的chemElements中补充)。

northword commented 6 months ago

我感觉上面那些个单词就够我用了

上面的词我没有构建自定义词组,因为没遇到需要改的,若果你有需要可以自己构建一下哦。

不建议,自动更新会覆盖。

按理说作者加在排除词中更合适。

见 #171 。

wyy-yiyang commented 6 months ago

见 #171

棒,我看规则的时候没注意到这个。原来作者已经匹配过了。

我感觉上面那些个单词就够我用了

这些词作者已经在基础的规则里构建过了,不用单独添加

northword commented 6 months ago

见 #171

棒,我看规则的时候没注意到这个。原来作者已经匹配过了。

我感觉上面那些个单词就够我用了

这些词作者已经在基础的规则里构建过了,不用单独添加

这些还没添加,这是计划中的,部分能识别到是因为命中了其他规则。

wyy-yiyang commented 6 months ago

见 #171

棒,我看规则的时候没注意到这个。原来作者已经匹配过了。

我感觉上面那些个单词就够我用了

这些词作者已经在基础的规则里构建过了,不用单独添加

这些还没添加,这是计划中的,部分能识别到是因为命中了其他规则。

奥奥,确实有一些匹配到了其他规则,等更新就行了~

fredericky123 commented 5 months ago

请问现在有自定义的库吗,我发现我这边连国家名也匹配不了

image
wyy-yiyang commented 5 months ago

请问现在有自定义的库吗,我发现我这边连国家名也匹配不了

有了,更新即可,添加上需要的国名试试

fredericky123 commented 5 months ago

请问现在有自定义的库吗,我发现我这边连国家名也匹配不了

有了,更新即可,添加上需要的国名试试

是自己补充词库是吧,插件本身自带的没有国名

wyy-yiyang commented 5 months ago

是自己补充词库是吧,插件本身自带的没有国名

没注意插件本身自带词有哪些,但是最快的是自己加上。有的国家名可能有多意,加的时候注意下就行。

northword commented 5 months ago

插件还没自带国名的数据,这段时间在忙另一个项目,着急的话就先自己写一下吧。

fredericky123 commented 5 months ago

好嘞,已经先添加自定义了

wangfh5 commented 4 months ago

是插件没有安全创建正则表达式导致的,目前插件为了方便把非正则的也变成了正则,于是 + 就成了一个正则表达式的术语,导致了错误。

今天晚点修复。

我注意到改动之后,特殊符号会全部转义。那请问现在如果想要让正则表达式生效,是要怎么处理?

northword commented 4 months ago

/ 开始和结束的将被识别为正则表达式。如果没有正常识别,请报告为一个新的 issue。

fredericky123 commented 4 months ago

目前的词汇包含国别名等,没含Chinese这样的国人大写,下个版本不知能否包含一下

ddcxxx commented 1 month ago

很奇怪的一个点,在下面这两个标题中,第一个的northern China中的China能被识别保留,第二个的southwest China的China就会被转换为小写 Plant morphometric traits and climate gradients in northern China: a meta-analysis using quadrat and flora data. A shrubby resprouting pine with serotinous cones endemic to southwest China