l0o0 / jasminum

A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据
GNU Affero General Public License v3.0
5.52k stars 285 forks source link

不要自动修改已有的 language 字段 #112

Closed zepinglee closed 2 years ago

zepinglee commented 2 years ago

https://gitee.com/redleafnew00/Chinese-STD-GB-T-7714-related-csl/issues/I5IMWS#note_11862481_link 的讨论,Zotero 群组中原有的中文文献都已经填写了正确的 language 信息(“zh”),但是新用户加入群组时,由于开启了茉莉花插件的自动设置语言功能而且配置不当,错误地将全部中文文献的 language 改成了“cn”,导致使用 CSL 无法正确处理语言。根据 https://github.com/l0o0/translators_CN/issues/73、 Zotero 官方文档(https://www.zotero.org/support/kb/item_types_and_fields#general_fields)和 CSL 规范(https://docs.citationstyles.org/en/stable/specification.html#standard-variables),language 允许的值有 zh, zh-CN, zh-TW, en, en-US, en-GB,而 cnzh_CN 都是不合规范的。

另外,文字和语言是不同的范畴。比如英语和拉丁语都使用拉丁字母,但是两者是不同的语言。同样,汉语和日语都使用汉字。所以 #105 从文字推断语言并非完全准确:比如 [\u4e00-\u9fa5] 匹配的是 CJK Unified Ideographs(中日韩统一表意文字),三种语言都会使用。如果直接设置为中文可能会将日文、韩文错误地设为中文。

所以建议“自动设置语言”时,不要修改用户已填的信息,仅在 language 为空或者不合规时才自动设置(可以使用 regex ([a-z]{2}(-[A-Z]{2})? 进行判断)。

@Maasea

Maasea commented 2 years ago

可能 "自动设置语言" 满足了我个人的需求,但并不适合所有人。我的初衷是:自动补全空缺的语言栏而不用人工去选择。受限于本人只阅读中英文献,所以未考虑全面。

但是 "不合规时自动设置语言" 的建议并不全面。比如用户即使知道 zh-CN 是合法的也想更改成 zh,保持整体的统一性。其次,自动识别语言从正则的角度去考虑确实是投机的行为,使用类似 languagedetect 的库可能是更好的方案。

在PR 的时候,我添加了这个功能,并没有与原来的功能合并,这样用户依旧可以使用原来的方式。如果有用户和我有相同的需求,可以开启这项功能。所以该功能目前不会影响正常的使用。

我现在的想法是:通过已有的语言识别库来更好的解决这个问题,用户可以选择填入 zh(en) 这样的简写形式或是 zh-CN (en-US)这样的形式。缺陷是不能保证100%的准确性。不知道你是否有更好的想法。

由于最近一段时间比较忙,并且上面的想法还会有更好的实现方式,我可能并不会马上提交一个新的PR 。如果你有时间或者更好的想法可以继续修改这项功能。

zepinglee commented 2 years ago

但是 "不合规时自动设置语言" 的建议并不全面。比如用户即使知道 zh-CN 是合法的也想更改成 zh,保持整体的统一性。其次,自动识别语言从正则的角度去考虑确实是投机的行为,使用类似 languagedetect 的库可能是更好的方案。

我没有使用茉莉花插件,应该有个功能是用户手动选择文献并批量修改语言,更适合你描述的场景,而且与自动设置并不矛盾。这样的话则由用户对修改的内容负责。我只是不希望插件在用户不知情时随意修改已有的信息。

目前我管理了一个 Zotero 群组用于开发 CSL 样式,这样更方便用户提供测试案例。其中的文献很多是各种体例的官方示例,比如 https://www.zotero.org/groups/4677213/chinese_csl_development/collections/GTTN32IE。所以不希望每次有新用户时加入时,各自使用的插件都对其中的内容修改一番。

在PR 的时候,我添加了这个功能,并没有与原来的功能合并,这样用户依旧可以使用原来的方式。如果有用户和我有相同的需求,可以开启这项功能。所以该功能目前不会影响正常的使用。

我现在的想法是:通过已有的语言识别库来更好的解决这个问题,用户可以选择填入 zh(en) 这样的简写形式或是 zh-CN (en-US)这样的形式。缺陷是不能保证100%的准确性。不知道你是否有更好的想法。

感觉需要一定的工作量,我其实并没有这方面的需求。

Maasea commented 2 years ago

我没有使用茉莉花插件,应该有个功能是用户手动选择文献并批量修改语言,更适合你描述的场景,而且与自动设置并不矛盾。 这样的话则由用户对修改的内容负责。我只是不希望插件在用户不知情时随意修改已有的信息。

我就是对 “手动选择文献并批量修改语言” 进行的修改。这里的自动是指对已经选择的文献进行自动甄别。

使用场景是:原来只能利用ctrl手动去多选文件,然后设置一种语言。因为在文献库里中文和英文往往是混杂排列,而且每个文献需要打开详情页才能看到语言栏是否为空,所以补全语言栏是一件麻烦的事情。我添加的功能是为了用户可以拖拽全选,而不用去关心语言栏的情况。如果用户和我一样只阅读中英文献,便不会引起上文提及的问题。

单纯说工作量的话,并不是很大,引入一个库而已。只是对原项目的修改较多。

zepinglee commented 2 years ago

强烈建议提高这个问题的优先级。

另外补充一下,我说的“自动修改”指的是插件在用户不知情的状态下修改 language 字段。

在最近的 https://github.com/redleafnew/Chinese-STD-GB-T-7714-related-csl/issues/62#issuecomment-1200653124 中,同样发生了茉莉花在用户新加入群组时自动修改了 language 字段,这破坏了原有的文献数据。

Maasea commented 2 years ago

你说的这是之前版本就有的功能。

该功能应该是 “中文条目自动设置语言”,但是由于默认设置的语言选项为 zh-CN 和 cn。而不是 zh-CN 和 zh,会导致语言填写错误。

由以下代码控制

<menulist flex="1" editable="true" id="jasminum.language" preference="pref-jasminum.language" maxwidth="100"> 
  <menupopup> 
    <menuitem label="zh-CN" value="zh-CN"/>  
    <menuitem label="cn" value="cn"/> 
  </menupopup> 
</menulist>

image

@l0o0

l0o0 commented 2 years ago

@zepinglee 目前默认是禁用自动设置语言栏的。该设置,是不是可以加一个提醒标记,记用户谨慎使用该功能?

zepinglee commented 2 years ago

@zepinglee 目前默认是禁用自动设置语言栏的。该设置,是不是可以加一个提醒标记,记用户谨慎使用该功能?

没必要,只要不覆盖已有的合法 language 值就行。

建议改成,开起了“自动设置语言”后,仅在 language 为空或者不匹配 /[a-z]{2}(-[A-Z]{2})?/ 时才自动设置语言。

zepinglee commented 2 years ago

自动设置语言功能在 Zotero 群租的多人协作时很不方便,比如甲要设成“zh”,乙设成“cn”,会导致该字段反复修改。

比如 https://github.com/redleafnew/Chinese-STD-GB-T-7714-related-csl/issues/62#issuecomment-1201994224,我昨天将全部 language 改成了 zh,结果晚上又被改成了 cn

zepinglee commented 2 years ago

@Maasea 我仔细看了一下 #105 的代码,确实跟我这里的“自动设置”问题无关,不好意思打扰了。