模块讨论:Chemicals

Wong128hk在话题“建立CAS号重定向后续讨论”中的最新留言:6年前
          模块依照页面评级标准无需评级。
本模块属于下列维基专题范畴:
化学物质专题 (获评模块级不适用重要度
此类模块是化学专题化学物质专题的内容之一,该专题致力于提高维基百科对各类化学物质的覆盖率及内容质量。如果您愿意参与进来,可以帮助提高此类模块或移步专题首页获取更多讯息。
 模块级模块  根据专题质量评级标准,本模块无需评级。

建立CAS号重定向后续讨论

编辑
前期工作

 完成:已成立追踪分类Category:CAS号重定向(搭配模板{{CAS号重定向}} (编辑 讨论 说明  信息 链入 历史-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月19日 (二) 15:47 (UTC)回复
 完成,先前已完成Category:CAS不正确标志的条目的校对。(PS:已提出机器人请求:Wikipedia:机器人/作业请求)--Leiem留言2017年12月19日 (二) 15:55 (UTC)回复

(:)回应分类Category:无CAS号重定向的物质条目应该可以协助机器人运作。-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月20日 (三) 06:39 (UTC)回复
(~)补充@Wong128hkLeiem乌拉跨氪蘭斯特已根据CAS号#格式写了一个简易的校验函式
例如:
{{#invoke:Chemicals|check_CAS_test|1=7732-18-5}} → true (
{{#invoke:Chemicals|check_CAS_test|1=773332-18-5}} → false
{{#invoke:Chemicals|check_CAS_test|1=77-32-1-8-5}} → false
{{#invoke:Chemicals|check_CAS_test|1=娜娜奇}} → false[开玩笑的]
{{#invoke:Chemicals|check_CAS_test|1=abc-de-f}} → false
{{#invoke:Chemicals|check_CAS_test|1=124-38-9}} → true (二氧化碳
{{#invoke:Chemicals|check_CAS_test|1=125-38-9}} → false
已运用于{{CAS号重定向}} (编辑 讨论 说明  信息 链入 历史,会在建立错误的CAS号重定向时将其加入Category:CAS号不正确的重定向。请协助复查
-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月19日 (二) 17:39 (UTC)回复
(~)补充:由于违反CAS号#格式的重定向一定符合WP:CSD#R3,因此这笔编辑Special:Diff/47445017直接将校验失败者挂上{{Delete}} (编辑 讨论 说明  信息 链入 历史@Wong128hk若有违规请回退这笔编辑Special:Diff/47445017-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月19日 (二) 17:42 (UTC)回复

关于Module:Chemicals里面校验副程式,是否有用到d:Property:P231(用于加入CAS号的属性)的属性约束格式约束,因为d:Property:P231属性约束格式约束正规表达式的格式化字串限定符是“[1-9]\d+-\d\d-\d”,见d:Wikidata:Database reports/Constraint_violations/P231#Format的检测报告--林勇智 2017年12月21日 (四) 12:59 (UTC)回复

@D2513850不需使用正规表达式,只需要检查是否为三端由“-”分割组成的数字,以及最后一位校验码是否正确,此程式码的正确性将会高于正规表达式:“因为正规表达式不能做加法乘法与取模核对校验码”。-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 13:04 (UTC)回复
@D2513850(?)异议一个CAS编号以连字符“-”分为三部分,第一部分有2到7位数字,第二部分有2位数字,第三部分有1位数字作为校验码。CAS编号以升序排列且没有任何内在含义。校验码的计算方法如下:CAS顺序号(第一、二部分数字)的最后一位乘以1,最后第二位乘以2,依此类推,然后再把所有的乘积相加,再把和除以10,其余数就是第三部分的校验码。举例来说,水(H2O)的CAS编号前两部分是7732-18,则其校验码= ( 8×1 + 1×2 + 2×3 + 3×4 + 7×5 + 7×6 ) mod 10 = 105 mod 10 = 5(mod是求余运算符)-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 13:08 (UTC)回复
@D2513850(?)异议
  1. 算法先检查是否由“-”分割,且为三部分,因此等价于“[1-9]\d+-\d\d-\d
  2. 接着检查是否每一位都是数字因此等价于“[1-9]\d+-\d\d-\d
  3. “此部分为该正规表达式的缺陷!!正规表达式并未检查校验码!!”,接着依照CAS顺序号(第一、二部分数字)的最后一位乘以1,最后第二位乘以2,依此类推,然后再把所有的乘积相加,再把和除以10,其余数就与第三部分的校验码比对。
-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 13:19 (UTC)回复
@a2569875根据CAS号#格式的叙述,d:Property:P231里面正规表达式的格式化字串的值有错,应该是[1-9]\d{1,6}-\d\d-\d,另外先做字串格式检测,若该字串能匹配[1-9]\d{1,6}-\d\d-\d这个正规表达式才做校验码检测。--林勇智 2017年12月21日 (四) 13:54 (UTC)回复
@D2513850(?)异议多此一举,只要确定其为由“-”分割的三串数字就够了。-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 14:02 (UTC)回复
@a2569875只要求Module:Chemicals里面校验副程式能正确运作就好了--林勇智 2017年12月21日 (四) 14:15 (UTC)回复
(:)回应@D2513850pseudocode给你,这一定会运作好吗
 虚拟码 检查CAS ( 参数 CAS号 : 字串) ->英语Return_statement 布林字串
      如果 (以“-”分割 CAS号 字串的分割结果)的数量  3
         回传 “英语False_(logic)宣告 CAS无分割号 : 字串 = 第1个分割区 与 第2个分割区 的字串合并结果
      如果 ( (第1个分割区字数 < 2) 或者 (第1个分割区字数 > 7) )
         回传 “英语False_(logic)如果  第2个分割区字数  2
         回传 “英语False_(logic)如果  第3个分割区字数  1
         回传 “英语False_(logic)宣告 检查码 : 整数 = (第3个分割区)转成整数
      如果 ((第3个分割区)转成整数 ) 失败)
         回传 “英语False_(logic) 
      宣告 检查总和 : 整数 = 0
      循环 足标 i = 从 1 到 CAS无分割号的长度
         宣告 index : 自然数 = CAS无分割号的长度 + 1 - i
         宣告 cas_symbol : 整数 = (CAS无分割号的第index个字)转成整数
         如果 ((CAS无分割号的第index个字)转成整数 ) 成功)
             检查总和 = 检查总和 + (cas_symbol × i)
         否则 
             回传 “英语False_(logic)如果  (检查总和 除以 10 的余数) = 检查码
         回传 “是”
      否则 
         回传 “英语False_(logic)
-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 14:44 (UTC)回复
(:)回应@D2513850正规表达式根本不可能会具备求和、取余数并比较校验码的能力好吗,正规表达式非万能,因为他不是编程语言,只是描述语言。-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 14:46 (UTC)回复
(:)回应@a2569875若虚拟码的如果((第3個分割區)轉成整數)失敗)改成如果(((第3個分割區)轉成整數)失敗)或((CAS無分割號)轉成整數)失敗))的话--林勇智 2017年12月21日 (四) 15:03 (UTC)回复
(:)回应@D2513850那边的用途是为了确保“检查码”不是Null-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 15:05 (UTC)回复
(:)回应@D2513850比如上面故意放娜娜奇去测试,若执行“a = tonumber(娜娜奇)”(一定出错,因为娜娜奇不是一个数字,a会是Null,这时若直接把a拿去运算会CrashError,因此就让他直接返回英语Return_statement英语False_(logic)”以避免出错-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 15:11 (UTC)回复
宇帆先停停。另请@WhitePhosphorus来看看代码是否可行。--Temp3600留言2017年12月21日 (四) 15:16 (UTC)回复
(:)回应@Temp3600不认为我的算法有什么问题,完全按照CAS号#格式来Implement。-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 15:22 (UTC)回复
(:)回应@Temp3600比方说氯酸钙在这个版本Special:固定链接/44678491,我的程式就有算出其检查码应为0 (手算 4×1 + 7×2 + 7×3 + 1×4 + 0×5 + 0×6 + 1×7 = 50, 50 ≡ 0 mod 10),可是条目中却写三,我的程式有顺利抓出此错误,并加入Category:CAS不正确标志的条目三苯基膦氯化亚金的版本Special:固定链接/41034670中,也有检查出含非法字元,我的程式有顺利抓处此错误,并加入Category:CAS不正确标志的条目-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 15:37 (UTC)回复
我不会coding,所以我只能等WhitePhosphorus来判断。--Temp3600留言2017年12月21日 (四) 19:40 (UTC)回复
(:)回应@Temp3600我只是觉得感觉现在好像“我讲的一切都是错的”,然后“白磷讲的一切都一定是对的”,让我觉得很难过。拜托不要这样好吗,我希望我们还能和平交流-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 20:41 (UTC)回复
@A2569875Temp3600没什么问题。只不过输入字符串前后加任意个“-”函数看不出来,例如{{#invoke:Chemicals|check_CAS_test|1=-------2147485-70-7--------}} → false。不过看起来也不是什么大问题。 --砜中嘌呤的白磷萃取 打谱 2017年12月23日 (六) 03:39 (UTC)回复

@a2569875檢查CAS(娜娜奇娜娜奇娜-娜奇-1)的结果应该为“假”--林勇智 2017年12月21日 (四) 15:20 (UTC)回复

(:)回应@D2513850{{#invoke:Chemicals|check_CAS_test|1=娜娜奇娜娜奇娜-娜奇-1}} → false。-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 15:23 (UTC)回复
(:)回应@D2513850结果为假。不认为这里会出什么错。实际上也没有出错-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月21日 (四) 15:49 (UTC)回复
(:)回应@D2513850还有,娜娜奇本来就不是一个数字(如果娜娜奇是一个数字,告诉我数学上 等于多少 = ),所以在第一次循环 宣告 cas_symbol : 整數 = (CAS無分割號的第index個字)轉成整數之后的 如果 ((CAS無分割號的第index個字)轉成整數 ) 成功)这边就会直接因为转换失败而返回英语Return_statement英语False_(logic)”,不会进到最后的取余比对检查码程序。-- 宇帆(明年二月加入维基将满十周年!留言·欢迎签到·联络2017年12月22日 (五) 15:27 (UTC)回复
目前看来代码大致没问题,CAS号的规则应该不会有特例(这句需要专业的解惑),另外@D2513850维基数据里面的CAS有机器人添加吗?如果是人手添加我会有担心手误的时候,如果有机器人依数据库添加那较可放心,另@A2569875如果条目没有输入CAS码,而维基数据有可以在条目添加维基数据存在而条目内没有提供CAS码,在依人手或机器人添加(这两个任务是区分的)。--米莉娅诺朵卡 2017年12月22日 (五) 15:14 (UTC)回复
返回到“Chemicals”页面。