模組討論: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”页面。