IDAEO知識庫

🏛 本文屬於主題館「health」

查一個藥要踩過幾個坑:九個會產生「看起來正常的輸出」的失敗,每個都附可重跑的驗證

這個系列的每一篇,都是在同一批公開資料上查出來的:政府的藥品許可證資料集、文獻檢索的公開介面、試驗登錄庫的結果欄位。過程中我們踩到九個坑,它們的共同特徵是**不會報錯**——查詢照樣回傳、程式照樣結束、數字照樣印出來,只是答案是錯的(例如用成分名查藥證品名欄回 0 筆,同一份資料的主成分欄卻有 17 張)[F1]。本文把九個坑逐一寫出來,每一個都附上可以自己重跑的驗證方式,以及一組正控制(應該要成功的案例)與負控制(應該要失敗的案例)。最後附一句 should-FAIL:拿一個資料夾名稱裡的日期當論文編號去查,它查得到,而且是一篇真的論文[F16];換一個超出編號範圍的數字才會回 0[F17]。

檔案室裡,一人站在一格打開卻空無一物的抽屜前皺眉;身後與四周,整面牆的其他抽屜微開著縫,裡頭都塞滿了卷宗。
查詢結果是 0 筆,不代表那個東西不存在——它可能就放在別的抽屜裡。

一、最危險的不是報錯,是「看起來正常的輸出」

如果一個查詢丟出例外,你會停下來檢查。但下面九種失敗全都不會丟出例外:

  • 查詢送出去了,回傳 200,回了 0 筆——而正確答案不是 0。
  • 查詢回了 5 筆,每一筆都是真的論文——但沒有一篇跟你的問題有關。
  • 逐字比對兩段文字,回傳「不相同」——而它們在人眼裡一模一樣。
  • 一張許可證的有效日期還沒到——但它已經被註銷了。

這一類失敗的共同結構是:檢查的對象存在,但檢查的問題問錯了。 所以本文每一個坑都配一組控制:一個應該成功的案例(正控制),一個應該失敗的案例(負控制)。如果負控制沒有失敗,那你的檢查本身就是壞的。

以下每一個坑,都是在寫這個系列的過程中真的撞到的。

二、第一類:查詢式沒錯,但你查的是錯的欄位

淺色木製輸送帶送來一疊文件,落入等候的雙手中;文件本身製作精良,但上頭描繪的卻是古代陶器、草藥束與舊式解剖圖,與桌上的現代器材完全無關。
依相關性排序的檢索永遠會回傳結果,只是排在前面的可能完全文不對題。

坑 1:用成分名查藥證,會得到 0 筆

症狀:想查「台灣有哪些含 semaglutide 的藥」,用成分名去搜品名,回傳 0 筆。看起來像「台灣沒有這個成分」。

驗證方式:下載主管機關的全部藥品許可證資料集,把中文品名與英文品名兩欄接起來搜尋 `semaglutide`(不分大小寫),再單獨搜主成分略述欄。

實查結果:品名欄 0 筆,主成分略述欄 17 張許可證[F1]。

正控制:改用英文品名 `MOUNJARO` 搜品名欄,回傳 18 張——證明搜尋邏輯本身是好的[F2]。 負控制:搜一個不存在的字串 `zzzzpatide`,品名欄與主成分欄都是 0——證明它會回 0,不是永遠回 0[F3]。

教訓回傳 0 的時候,先問「這個欄位存不存這種資訊」,再問「是不是真的沒有」。 品名欄不索引成分,這不是資料錯,是欄位設計。

坑 2:排序型檢索沒有「查無」這個答案

症狀:用中文詞去查英文文獻庫,回傳好幾筆,每一筆都是真論文,看起來像有相關研究。

驗證方式:在文獻檢索的公開介面用 `瘦瘦針` 當查詢字串。

實查結果(實查日快照):回傳 5 筆,前五篇的標題分別是關於統一新羅時代的醫學進展、背俞穴的針刺方法、宋代對膿瘍的認知與治療、中世紀東亞的生命與身體,以及醫方知識的傳承[F4]。沒有一篇跟這類藥有關——它們是被「瘦」與「針」這兩個字元配對到的。

負控制:改查一個亂數字串,回傳 0 筆[F5]。這一步很重要:它證明了那 5 筆不是機器壞掉隨便回的,而是引擎真的認為那 5 筆最相關。

教訓「有回傳」與「有命中」是兩件事。 任何以相關性排序的檢索,都會把「最像的」當成答案交出來;它沒有「查無」這個選項可以選,除非完全比對不到任何 token。跨語言查詢尤其危險,因為假陽性率會高到看不出來。

三、第二類:過濾條件安靜地砍掉了你要找的東西

一隻手拿著細網篩懸在寬淺的碗上,篩網上留著八顆淡色小石;碗底陰影裡,卻堆著一大片篩落下去的石頭,光線幾乎照不到。
篩子只給你看留下來的那幾顆,掉下去的那一大堆,它不會告訴你。

坑 3:用研究型別過濾,會整批砍掉綜述類證據

症狀:為了「只看隨機對照試驗」,在查詢式加上研究型別過濾。結果變乾淨了,看起來很專業。

驗證方式:同一個主題查詢,比較加不加 `PUB_TYPE:"Randomized Controlled Trial"` 的結果數。

實查結果(實查日快照):不加過濾 209 筆,加了之後剩 8 筆[F6]。被砍掉的包括一篇系統性回顧與統合分析,以及一篇同一議題的期刊評論——用編號單獨測,兩篇加上該過濾後都變成 0 筆[F7]。

注意這裡有一個反直覺的結果,而且它被我們自己的測試改寫過兩次:我們原本預期主要的樞紐試驗都會被這個過濾砍掉,實測第一輪發現有一篇停藥試驗沒有被砍掉,仍留在結果裡[F6];但再往下測,另一篇同為第三期的關鍵試驗確實被砍掉了[F18]。

原因在於型別標記本身就不一致。同樣是第三期隨機分派試驗,一篇被標上了「隨機對照試驗」這個型別,另一篇沒有——後者被標的是「第三期臨床試驗」「比較性研究」「等效性試驗」等等[F18]。加上型別過濾之後,沒有那個標記的就整篇消失。

所以正確的敘述有三層:型別過濾一定會砍掉整合多個試驗的綜述類證據[F7];它也可能砍掉個別的樞紐試驗,取決於該篇被標了什麼[F18];而且被砍掉的那一篇,你在結果清單裡看不到任何痕跡。

這一條是我們原本的假設先被自己的測試推翻、再被第二次測試部分還原後改寫的。

正控制:不加過濾時,前面提到的那篇系統性回顧與那篇期刊評論各自都查得到(各 1 筆)[F7];兩篇第三期試驗不加過濾時也各查得到 1 筆[F18]。四篇都在,差別只在加了過濾之後誰還留著。

教訓過濾條件不會告訴你它砍掉了什麼。 加過濾之前,先記下不加過濾的筆數;差額就是你放棄的東西。

坑 4:用資料庫來源過濾,會讓整篇文獻消失

症狀:習慣在查詢式加上「限 PubMed 來源」,因為那樣比較「正規」。

驗證方式:用一份沒有 PMID、只有 PMC 編號的文獻來測。本系列引用的 STEP 1 體組成分析就是這種——它以學會年會摘要的形式發表,只有 PMC 編號。

實查結果:不加來源過濾,查得到 1 筆;加上 `SRC:MED` 之後,變成 0 筆[F8]。

正控制:換一篇同時有 PMID 與 PMC 編號的文獻,加上同樣的來源過濾仍然查得到 1 筆[F8]——證明過濾語法沒寫錯。

教訓沒有 PMID 的東西不等於不存在。 會議摘要、部分期刊的補充材料、預印本都可能落在這個縫裡。若你的文獻檢索一律加來源過濾,你永遠不會知道自己漏了什麼。

四、第三類:「有這個欄位」不等於「有這個東西」

坑 5:查得到適應症,不等於查得到仿單

症狀:從公開資料查到了適應症全文,於是以為「仿單查到了」。

驗證方式:把資料集的表頭列印出來,數欄位。

實查結果:共 28 欄,其中沒有任何一欄是警語、禁忌、交互作用、副作用或不良反應[F9]。

教訓適應症欄是仿單的一小塊,不是仿單。 一份只有適應症的整理,若寫成「依據仿單」,讀者會以為裡面包含了安全性資訊。這個系列的每一篇都把這件事寫出來。

同一類的一個小陷阱:資料集的下載網址結尾是 `csv`,但實際下載回來的檔案,`file` 指令判定為 Zip 壓縮檔[F10]。副檔名與內容不一致,直接用 CSV 讀取器開會失敗——而失敗訊息通常是編碼錯誤,會把人引導到錯的方向。

坑 6:判斷藥證是否有效,不能只看有效日期

(這一坑放在這裡,因為它也是「欄位在說謊」的一種。)

症狀:用「有效日期是否已過」來判斷一張許可證還有沒有效,看起來天經地義。

驗證方式:在資料集裡找出「註銷狀態欄是空的、但註銷日期或註銷理由有值」的紀錄,數數量。

實查結果:這樣的許可證有 343 張[F11]。

正控制:其中兩張的中文品名是易週糖注射劑 3 毫克與 4.5 毫克。它們的有效日期是 2027/09/23(還沒到),但註銷日期是 2026/03/18、註銷理由是「自請註銷」,而註銷狀態欄是空的[F11]。只看有效日期,會判斷成仍然有效。

教訓正確的判斷方式是「註銷狀態、註銷日期、註銷理由三個欄位任一有值,即視為已退場」。 這一條直接決定了整個系列第一篇的清單對不對。

五、第四類:字面比對比你以為的脆弱

兩張手寫的索引卡並排放在深色布上,乍看一模一樣;從左側斜射而來的光線,卻照出其中一張紙的纖維走向與另一張截然不同。
兩個看起來相同的字,背後可能是不同的字碼——眼睛看不出來,機器一比對就露餡。

坑 7:自由文字欄位用精確比對,必然漏數

症狀:想數「有幾張許可證的適應症是這一句」,於是用完全相同比對。

驗證方式:取出成分為 orlistat 的現行指示藥品,列出所有相異的適應症字串。

實查結果:共 15 張。用出現次數最多的那一句去做精確比對,只命中 8 張,漏掉 7 張[F12]。差異包括「十八歲」與「18歲」、「大於等於」與「≧」、半形括號與全形括號、句號與逗號、以及單位前面多打的一個空格。

「有幾種寫法」這個數字本身取決於計數口徑,同一批 15 張有三個都正確的答案(本系列凡引用此數字一律標明口徑)[F12]:

計數口徑相異寫法數
原始字串,不做任何處理8 種
先做 NFKC 正規化6 種
NFKC 後再去掉全部空白字元5 種

三個數字不衝突,它們數的是不同東西。正規化幫得上忙,但不會把問題消掉:即使做到最寬鬆的第三種口徑,仍有 5 種寫法,因為「十八歲」與「18歲」、頓號與逗號這類差異不是正規化能消掉的[F12]。引用這類數字時,只寫數字不寫口徑,等於沒寫。

教訓自由文字欄位不受統一寫法的約束。 要數這種欄位,只能先枚舉全部相異值,再人工歸類;不能先假設「應該只有一種寫法」。

坑 8:政府檔裡有肉眼看不見的字

症狀:把仿單原文複製到自己的稿子裡,再寫程式逐字比對,結果回報「不相同」。肉眼看兩邊一模一樣。

原因:原始檔使用了 Unicode 的「中日韓相容表意文字」區(U+F900 到 U+FAFF)。這些字元與一般寫法外觀相同、編碼不同

驗證方式:掃描整份資料集,統計落在該區間的字元。

實查結果(實查日快照):全檔 72,013 個資料列中,有 748 列含有這類字元,總計出現 8,380 次,共 85 種不同字元;出現最多的是「療」。單看兩張許可證的適應症欄,猛健樂那一張有 13 個、週纖達那一張有 39 個[F13]。

正控制:對同一段文字做 NFKC 正規化之後再掃,落在該區間的字元數變成 0[F13]。 負控制:掃許可證字號那一欄(全部是 ASCII 與常用漢字),落在該區間的字元數是 0[F13]——證明掃描器不是把所有漢字都當成相容字。

這個負控制救了我們一次。 在準備這篇稿子的過程中,同一段掃描程式被重寫了一次,範圍上界寫成了外觀相同的一般漢字,結果掃描結果變成「全部 72,013 列都含相容字、85 種變成 685 種」。這個坑會反咬寫檢查的人——如果沒有負控制,那組明顯不合理的數字會被當成新發現寫進文章。

教訓宣稱「逐字相同」時,必須說明比對前做了哪一種正規化。 本系列的做法是:兩邊都先做 NFKC 再逐字元比對;引用時只把相容區的字元換成一般寫法,其餘全形半形、括號種類、標點差異一律照原檔保留。

六、第五類:同一個東西,有兩個以上都正確的數字

三把刻度不同的木尺並排量著同一段短木條,起始邊都對齊在一起;但三把尺上的刻度落點各自不同——三把尺都做得很準。
同一段長度,三種量法都對,數字卻不一樣——問題不在誰量錯了,在用的是哪一把尺。

坑 9:母體數與主要終點,都可能有多個合法版本

實例一:同一份資料,母體筆數有三個版本。 同一份藥品許可證資料,用不同的計數方式會得到不同的數字(皆為實查日快照):資料列數 72,013、相異許可證字號數 66,459;而某個第三方查詢工具的說明文字寫的是另一個數字 71,836[F14]。三個都不是錯的——它們數的東西不同(列、許可證、該工具建立索引當天的快照)。

實例二:同一個試驗、同一個主要終點,論文與登錄庫的數字不一樣。 本系列引用的一個停藥試驗,論文摘要寫的主要終點是安慰劑組 +14.0%、用藥組 −5.5%;試驗登錄庫同一個終點欄位寫的是 14.8% 與 −6.7%[F15]。差異的原因就寫在登錄庫的族群說明裡:那一筆的分析排除受試者停掉試驗用藥之後的資料,論文摘要用的是不排除的算法[F15]。

教訓「我對過原文」這句話沒有資訊量,除非你說出對的是哪一份、哪一種算法。 引用數字時要一併寫下計數單位與分析設定,否則下一個人拿另一個同樣正確的數字來,就會變成無法收斂的爭論。

七、一句 should-FAIL:只驗「編號存在」,會 100% 全綠

最後一件事,是關於檢查本身。

一個常見的品管做法是「檢查每個引用的論文編號是否查得到」。這個檢查有一個致命的性質:它幾乎永遠會過。

驗證方式:拿一個跟文獻完全無關的數字當論文編號去查。我們用的是一個工作資料夾名稱裡的日期:`20260819`。

實查結果查得到。那是一篇 1946 年發表在心臟科期刊上的論文,標題是「One hundred positive hypoxemia tests」[F16]。

負控制:換一個超出編號範圍的數字 `999999999`,回傳 0 筆[F17]——證明這個查詢確實會回 0,只是很難回 0。

教訓「編號存在」是一個幾乎沒有鑑別力的檢查。 真正要驗的是三件事:(一)這個編號配的論文,講的是不是你說的那件事;(二)你引的那個數字,是不是真的出現在摘要或登錄庫的結果欄位裡;(三)讀者點進去,是不是真的看得到。第三點特別容易被忽略——本系列引用的多數樞紐試驗都有付費牆,所以每一篇都額外附一條開放取用版本或試驗登錄庫結果頁的路徑。

八、把九個坑收成一張表,以及這套方法的邊界

#一句話驗證負控制長什麼樣
1成分名查不到藥證同時查品名欄與主成分欄,比對筆數用不存在的字串,兩欄都要回 0
2排序型檢索沒有「查無」看回傳內容,不看回傳筆數用亂數字串,要回 0
3型別過濾砍掉綜述記下加過濾前後的筆數差被砍掉的那筆,單獨查要能查到
4來源過濾讓整篇消失用一筆沒有 PMID 的資料測用有 PMID 的那筆測,要留下
5有適應症不等於有仿單把表頭列出來數欄位找警語欄,要找不到
6自由文字精確比對必漏先枚舉所有相異值最常見那句的命中數要小於總數
7同一個數字有多個版本寫下計數單位與分析設定換一種算法,數字要跟著變
8看不見的相容字兩邊都先 NFKC 再比對掃純 ASCII 欄位,要回 0
9只看有效日期會判錯三個註銷欄任一有值即視為退場找有效日期未到但已註銷的實例

這套方法的邊界,也要寫清楚。

它只處理「查得對不對」,不處理「證據強不強」。 一個數字查對了、來源標對了,不代表那個研究設計得好,也不代表它適用於你。

它需要一手來源可公開取得。 本系列能這樣做,是因為藥品許可證資料、文獻檢索介面與試驗登錄庫都有公開的查詢方式。碰到沒有公開一手來源的主題,這套流程走不完,那時候誠實的做法是寫「截至實查日未查到」,並附上查詢式與正控制,而不是補一個看起來像真的的答案。

它防不了「問錯問題」。 所有的控制都只能檢查你問的那個問題,答案對不對;它不會告訴你這個問題本身值不值得問。

本文為資料查證方法的整理,所有實查結果皆為實查日的快照,不構成醫療建議。

本文屬「GLP-1 證據系列」,系列的證據基礎在 瘦瘦針在台灣的法定底帳:哪些藥證還有效、哪些早就退場、名字又錯在哪,該篇並列出全系列十篇。

引用來源逐條

正文每一個 `[F<n>]` 標記,都對應下面一條定義。每條依序寫出:主張、來源逐字原文、查詢網址、依據層級、查核日期。

  • [F1]|以 semaglutide 搜藥品許可證資料的中文品名+英文品名欄回傳 0 張,搜主成分略述欄回傳 17 張|(實查輸出)semaglutide: 品名欄命中=0 主成分欄命中=17|全部藥品許可證資料集;比對方式:許可證字號去重後,對「中文品名+英文品名」與「主成分略述」分別做小寫子字串比對|editorial(我們的計數,方法如左)|2026-08-26
  • [F2]|正控制:以 MOUNJARO 搜英文品名欄回傳 18 張|(實查輸出)正控制 MOUNJARO in 英文品名 = 18|同 F1|editorial|2026-08-26
  • [F3]|負控制:以 zzzzpatide 搜品名欄與主成分欄皆回傳 0 張|(實查輸出)負控制 zzzzpatide 品名欄 = 0 主成分欄 = 0|同 F1|editorial|2026-08-26
  • [F4]|以「瘦瘦針」查 Europe PMC,實查日回傳 5 筆,前五篇為古代東亞醫學史相關論文|(實查輸出)hitCount(當日快照)= 5/37257929 How Did the Clinical Medicine Progress during the Unified Silla Era/36316824 Anatomical structures and needling method of the back-shu points BL18, BL20, and BL22/38768993 The Perception and Treatment of People about Abscesses in the Song Period/31092803 An Exploration into Life, Body, Materials, Culture of Mediaeval East Asia/29724986 Knowledge Transmission of Medical Prescription and the Role of the Literati Officials|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&pageSize=5&query=%E7%98%A6%E7%98%A6%E9%87%9D|editorial(實查日快照;筆數會變動)|2026-08-26
  • [F5]|負控制:以亂數字串 zzqqxxvvnonsense 查詢,回傳 0 筆|(實查輸出)hitCount(當日快照)= 0|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&pageSize=5&query=zzqqxxvvnonsense|editorial|2026-08-26
  • [F6]|同一主題查詢加上研究型別過濾,實查日筆數自 209 降為 8;該主題的主要停藥試驗在加過濾後仍留在結果內|(實查輸出)不加過濾 hitCount= 209/加 PUB_TYPE 過濾 hitCount= 8,結果清單含 38078870|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&query=tirzepatide%20AND%20withdrawal%20AND%20%22weight%20regain%22(與加上 %20AND%20PUB_TYPE:%22Randomized%20Controlled%20Trial%22 的版本比較)|editorial(實查日快照)|2026-08-26
  • [F7]|一篇系統性回顧(PMID 42534203)與一篇期刊評論(PMID 42043833)在加上研究型別過濾後皆為 0 筆,不加過濾時各為 1 筆|(實查輸出)EXT_ID:42534203 無過濾 hitCount= 1/加RCT過濾 hitCount= 0;EXT_ID:42043833 無過濾 hitCount= 1/加RCT過濾 hitCount= 0|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&query=EXT_ID:42534203%20AND%20SRC:MED(與加上型別過濾的版本比較)|editorial(實查日快照)|2026-08-26
  • [F8]|PMC8089287 不加來源過濾回傳 1 筆,加上 SRC:MED 回傳 0 筆;正控制 PMC9542252 加上 SRC:MED 仍回傳 1 筆|(實查輸出)A. PMCID:PMC8089287(無過濾)hitCount= 1/B. PMCID:PMC8089287 AND SRC:MED hitCount= 0/C. PMCID:PMC9542252 AND SRC:MED hitCount= 1|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&query=PMCID:PMC8089287(與加上 %20AND%20SRC:MED 的版本比較)|editorial|2026-08-26
  • [F9]|藥品許可證資料集共 28 欄,無警語、禁忌、交互作用、副作用或不良反應欄位|許可證字號、註銷狀態、註銷日期、註銷理由、有效日期、發證日期、許可證種類、舊證字號、通關簽審文件編號、中文品名、英文品名、適應症、劑型、包裝、藥品類別、管制藥品分類級別、主成分略述、申請商名稱、申請商地址、申請商統一編號、製造商名稱、製造廠廠址、製造廠公司地址、製造廠國別、製程、異動日期、用法用量、包裝與國際條碼|同上資料集 CSV 表頭列|official_text|2026-08-26
  • [F10]|資料集下載網址結尾為 csv,但下載內容經 file 判定為 Zip 壓縮檔|(實查輸出)exp36.txt: Zip archive data, at least v2.0 to extract, compression method=deflate|https://data.fda.gov.tw/data/opendata/export/36/csv|editorial(實查日快照)|2026-08-26
  • [F11]|註銷狀態欄為空、但註銷日期或註銷理由有值者共 343 張;實例為易週糖注射劑 3 毫克與 4.5 毫克,有效日期 2027/09/23、註銷日期 2026/03/18、註銷理由「自請註銷」、註銷狀態欄為空|(實查輸出)註銷狀態空、但註銷日期或理由有值 = 343 張/衛部菌疫輸字第001199號 易週糖注射劑3毫克/0.5毫升 狀態= '' 日期= '2026/03/18' 理由= '自請註銷' 有效= 2027/09/23/衛部菌疫輸字第001200號 易週糖注射劑4.5毫克/0.5毫升 狀態= '' 日期= '2026/03/18' 理由= '自請註銷' 有效= 2027/09/23|同上資料集,許可證字號去重後統計|official_text(欄位值)+editorial(統計)|2026-08-26
  • [F12]|orlistat 現行指示藥品 15 張,適應症相異寫法數依計數口徑有三個值:原始字串 8 種、NFKC 後 6 種、NFKC 再去全部空白後 5 種;以最常見那句精確比對僅命中 8 張|(實查輸出)有效指示藥張數= 15/A 原始字串相異數= 8/B NFKC 後相異數= 6/C NFKC+去所有空白後相異數= 5/用最常見那句做精確比對 → 命中 8 / 15 張(漏 7)/負控制:以不存在的成分名 zzzlistat 查主成分略述欄 = 0 張|同上資料集;條件:主成分略述含 orlistat、藥品類別含「指示」、註銷三欄皆空|official_text(欄位值)+editorial(統計)|2026-08-26
  • [F13]|相容表意文字統計(實查日快照):72,013 個資料列中 748 列含此區字元,共出現 8,380 次、85 種;猛健樂 028463 適應症 13 個、週纖達 001225 適應症 39 個;NFKC 後為 0;許可證字號欄為 0|(實查輸出)ROW-LEVEL: rows=72013, rows_with_compat=748, occurrences=8380, distinct=85/衛部藥輸字第028463號 適應症 compat count = 13/衛部菌疫輸字第001225號 適應症 compat count = 39/NEG CONTROL 許可證字號欄 compat = 0/POS CONTROL: NFKC 後 028463 適應症 compat = 0/(同一支掃描程式把區間上界誤寫成外觀相同的一般漢字時的輸出,即文中所述被負控制擋下的那一次)ROW-LEVEL 含相容字列數= 72013 次數= 997958 字種= 685|同上資料集;掃描範圍 U+F900–U+FAFF,以明確碼位比較|editorial(我們的統計,方法如左)|2026-08-26
  • [F14]|同一份資料的母體筆數有三個版本(皆為實查日快照):資料列 72,013、相異許可證字號 66,459、第三方查詢工具說明文字所載 71,836|(實查輸出)RAW_ROWS= 72013 UNIQUE_LICENSE= 66459/(第三方工具說明)衛福部食藥署 全部藥品許可證 search (data.gov.tw 9122, 71,836 件)|同上資料集,與第三方查詢工具的說明文字|editorial(實查日快照)|2026-08-26
  • [F18]|同為第三期隨機分派試驗,出版型別標記不一致:一篇含「Randomized Controlled Trial」故加過濾後留下,另一篇不含該標記故加過濾後為 0。本條引用的是 Europe PMC/PubMed 的書目 metadata 欄位(pubTypeList)與檢索回傳筆數,不是 ClinicalTrials.gov 試驗登錄庫欄位,也不是這兩篇論文的研究結果|(實查輸出)EXT_ID:38078870 pubTypeList=Clinical Trial, Phase III/Research Support, Non-U.S. Gov't/research-article/Multicenter Study/Randomized Controlled Trial/Journal Article;加過濾 hitCount=1。EXT_ID:40353578 pubTypeList=Clinical Trial, Phase III/Comparative Study/Equivalence Trial/Multicenter Study/Journal Article(無 RCT 標記);加過濾 hitCount=0,不加過濾 hitCount=1|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&resultType=core&query=EXT_ID:40353578%20AND%20SRC:MED(與加上 %20AND%20PUB_TYPE:%22Randomized%20Controlled%20Trial%22 的版本比較)|editorial(我們對檢索系統書目 metadata 的實查輸出)|2026-08-26
  • [F15]|同一試驗同一主要終點,論文摘要為 14.0%/−5.5%,試驗登錄庫為 14.8%/−6.7%,差異來自登錄庫該筆排除停藥後資料|論文摘要:The mean percent weight change from week 36 to week 88 was -5.5% with tirzepatide vs 14.0% with placebo/登錄庫族群說明:All randomized participants who received at least one dose of the study drug, had randomization and at least one post-randomization values for this outcome, excluding data after discontinuation of the study drug.|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&query=EXT_ID:38078870%20AND%20SRC:MED 與 https://clinicaltrials.gov/api/v2/studies/NCT04660643|peer_reviewed(論文值)+registry(登錄庫值)|2026-08-26
  • [F16]|以 20260819 當論文編號查詢,查得到一篇 1946 年的論文。本條要證明的是檢索器的行為(一個無關數字也會命中真論文),引用的是檢索回傳的題名與年份這兩個書目欄位,不是該 1946 年論文的研究結果|(實查輸出)title: One hundred positive hypoxemia tests./journal: Acta cardiologica | year: 1946|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&query=EXT_ID:20260819%20AND%20SRC:MED|editorial(我們的檢索輸出;書目欄位本身可在 Europe PMC/PubMed 核到)|2026-08-26
  • [F17]|負控制:以 999999999 當論文編號查詢,回傳 0 筆|(實查輸出)EXT_ID:999999999 hitCount= 0|https://www.ebi.ac.uk/europepmc/webservices/rest/search?format=json&query=EXT_ID:999999999%20AND%20SRC:MED|editorial|2026-08-26

FAQ

為什麼查詢回傳 0 筆不能當成「沒有」?
因為 0 有兩種來源:真的沒有,或你查的欄位不存這種資訊。實例是用成分名 `semaglutide` 去查藥品許可證資料的品名欄,回傳 0 筆;但同一份資料的主成分略述欄有 17 張[F1]。要分辨這兩種 0,需要一個正控制(換一個確定存在的字串去查,要查得到)[F2],以及一個負控制(用不存在的字串去查,兩欄都要回 0)[F3]。
なぜ照会が 0 件を返したことを「ない」と受け取ってはいけないのですか?0 には二つの由来があるからです。本当にないか、あなたが調べた欄がその種の情報を格納していないかです。具体例は、医薬品承認取得データの品名欄を成分名 `semaglutide` で調べると 0 件が返る一方、同じデータの主成分略述欄には 17 件があることです[F1]。この二つの 0 を見分けるには、陽性対照(存在すると分かっている文字列で調べ、見つかること)[F2]と、陰性対照(存在しない文字列で調べ、両欄とも 0 を返すこと)[F3]が必要です。
Why can a query returning 0 records not be taken as "there is none"?Because 0 has two sources: there genuinely is none, or the field you searched does not store that kind of information. The concrete case is searching the product-name field of the drug licence data for the ingredient name `semaglutide`, which returns 0 records, while the active-ingredient summary field of the same data holds 17 licences[F1]. Distinguishing those two zeros requires a positive control (search a string you know exists; it must be found)[F2] and a negative control (search a non-existent string; both fields must return 0)[F3].
用中文詞查英文文獻庫會發生什麼事?
會拿到「真的論文、但完全無關」的結果。以「瘦瘦針」查詢,實查日回傳 5 筆,主題分別是古代東亞的醫學史與針刺方法,沒有一篇與這類藥有關[F4]——它們是被「瘦」與「針」兩個字元配對到的。用亂數字串當負控制查詢,回傳的是 0 筆[F5],證明引擎確實會回 0,那 5 筆是它真的認為最相關。
中国語の語で英語の文献データベースを調べると何が起きますか?「実在の論文だが、まったく無関係」な結果が得られます。この種の薬の中国語の俗称で照会すると、実査日には 5 件が返り、主題はいずれも古代東アジアの医学史と刺鍼法で、この種の薬に関係するものは一つもありませんでした[F4]。二つの文字によって照合されたものです。ランダムな文字列を陰性対照として照会すると 0 件が返り[F5]、エンジンが確かに 0 を返しうること、あの 5 件はそれが本当に最も関連が高いと判断したものであることが証明されます。
What happens when an English literature database is queried with a Chinese term?You get results that are real papers and entirely unrelated. Querying with the colloquial Chinese term returned 5 records on the verification date, on subjects in the medical history and needling methods of ancient East Asia, none of them concerning this class of drug[F4] — they were matched on two individual characters. Querying a random string as a negative control returns 0 records[F5], establishing that the engine really can return 0 and that those 5 were what it genuinely considered most relevant.
加「只看隨機對照試驗」的過濾條件有什麼問題?
它會安靜地砍掉一部分證據,而且被砍掉的不只是綜述類,正確的說法有三層。第一層:它一定會砍掉整合多個試驗的綜述類證據——實測同一個主題查詢,不加過濾 209 筆、加了剩 8 筆[F6],被砍掉的包含一篇系統性回顧與統合分析[F7]。第二層:它**也可能**砍掉個別的樞紐試驗,取決於那一篇被標了什麼型別。同樣是第三期隨機分派試驗,PMID 38078870 被標上「Randomized Controlled Trial」,加過濾後仍在(1 筆);PMID 40353578 沒有這個標記,只被標成「第三期臨床試驗」「比較性研究」「等效性試驗」「多中心研究」,加過濾後就變成 0 筆(不加過濾是 1 筆)[F18]。第三層:被砍掉的那一篇,你在結果清單裡看不到任何痕跡——結果只會變少,不會告訴你少了誰。
「無作為化比較試験だけ」というフィルタ条件を加えると何が問題ですか?エビデンスの一部を静かに削り、しかも削られるのは総説類だけではありません。正しい記述は三層です。第一層:複数の試験を統合した総説類のエビデンスは必ず削られます——同じ主題の照会で実測すると、フィルタなしで 209 件、加えると 8 件になり[F6]、削られたものにはシステマティックレビューとメタアナリシスが含まれます[F7]。第二層:**個別の主要試験も削りうる**。その一篇にどの型別が付されているかによります。同じ第 3 相の無作為化試験でも、PMID 38078870 は「Randomized Controlled Trial」が付されておりフィルタ後も残ります(1 件)。PMID 40353578 はこのタグをもたず、「第 3 相臨床試験」「比較研究」「同等性試験」「多施設研究」だけが付されているため、フィルタを加えると 0 件になります(加えなければ 1 件)[F18]。第三層:削られた一篇は、結果の一覧に何の痕跡も残しません。結果は減るだけで、誰が減ったかは教えてくれません。
What is wrong with adding a filter for randomized controlled trials only?It quietly deletes part of the evidence, and what it deletes is not only reviews; the correct statement has three layers. First: it will certainly delete review-class evidence that integrates multiple trials — testing the same topic query gives 209 records without the filter and 8 with it[F6], and what was deleted includes a systematic review and meta-analysis[F7]. Second: it **may also** delete individual pivotal trials, depending on how that paper was tagged. Both being phase 3 randomized trials, PMID 38078870 carries the "Randomized Controlled Trial" tag and survives the filter (1 record), while PMID 40353578 lacks that tag, being tagged only as phase 3 clinical trial, comparative study, equivalence trial, and multicentre study, and returns 0 with the filter applied (1 without)[F18]. Third: the deleted paper leaves no trace in the result list — the results simply shrink, without telling you who is missing.
為什麼有的文獻加了「限 PubMed」就查不到?
因為它沒有 PMID。本系列引用的一份體組成分析以學會年會摘要形式發表,只有 PMC 編號;不加來源過濾查得到 1 筆,加上限 PubMed 之後變成 0 筆[F8]。用一篇同時有兩種編號的文獻做正控制,加同樣的過濾仍然查得到[F8],證明語法沒寫錯。
なぜ「PubMed に限る」を加えると見つからなくなる文献があるのですか?PMID がないからです。本シリーズが引用するある体組成解析は学会年会抄録の形で発表され、PMC 番号しかありません。出所フィルタなしでは 1 件見つかり、PubMed に限ると 0 件になります[F8]。二つの番号を併せもつ文献を陽性対照とすると、同じフィルタを加えても見つかり[F8]、構文に誤りがないことが証明されます。
Why do some papers disappear when a "PubMed only" clause is added?Because they have no PMID. One body-composition analysis cited in this series was published as a society conference abstract with only a PMC identifier; without the source filter it returns 1 record, and with the PubMed restriction it returns 0[F8]. Using a paper holding both identifiers as a positive control, the same filter still finds it[F8], establishing that the syntax is not at fault.
什麼是「看不見的相容字」?
是 Unicode 中日韓相容表意文字區(U+F900 到 U+FAFF)的字元,與一般寫法外觀相同、編碼不同。實查日的統計是:全檔 72,013 個資料列中有 748 列含這類字元,總計 8,380 次、85 種[F13]。不做正規化的話,正確的引文也會被判成不符。
「見えない互換文字」とは何ですか?Unicode の CJK 互換漢字の区画(U+F900 から U+FAFF)の文字で、一般的な書き方と外観が同じで符号化が異なるものです。実査日の集計は、ファイル全体の 72,013 のデータ行のうち 748 行がこの種の文字を含み、合計 8,380 回、85 種類というものでした[F13]。正規化しなければ、正しい引用も不一致と判定されてしまいます。
What are "invisible compatibility characters"?Characters from Unicode's CJK Compatibility Ideographs block (U+F900 to U+FAFF), identical in appearance to their ordinary forms and different in encoding. The count on the verification date was: across the file's 72,013 data rows, 748 rows contain such characters, occurring 8,380 times across 85 distinct characters[F13]. Without normalisation, a correct quotation will also be judged non-matching.
逐字比對要怎麼做才不會誤判?
兩邊都先做 NFKC 正規化,再逐字元比對。同時要有負控制:拿一段刻意改過一個字的文字去比,必須被判成不同。若負控制沒有失敗,代表比對器本身壞了——本文第五類那個坑就是這樣抓到的(掃描器被改壞時,同一份資料的統計從 748 列暴增成全部 72,013 列,是負控制擋下來的)[F13]。
一文字ずつの比較は、どうすれば誤判定しませんか?双方にまず NFKC 正規化を施し、そのうえで一文字ずつ比較します。同時に陰性対照が必要です。意図的に一文字を変えた文を比較させ、必ず不一致と判定されなければなりません。陰性対照が失敗しないなら、比較器そのものが壊れています——本稿の第五類の落とし穴はまさにそうやって捕まえました(走査器が壊されたとき、同じデータの集計が 748 行から全 72,013 行へ跳ね上がり、それを陰性対照が止めました)[F13]。
How should character-by-character comparison be done without misjudging?Apply NFKC normalisation to both sides, then compare character by character. A negative control is also required: take a passage with one character deliberately altered and it must be judged different. If the negative control does not fail, the comparator itself is broken — the pitfall in class five above was caught exactly that way (when the scanner was broken, the same dataset's count jumped from 748 rows to all 72,013, and the negative control stopped it)[F13].
怎麼判斷一張藥品許可證還有沒有效?
不能只看有效日期。資料中有 343 張許可證的註銷狀態欄是空的,但註銷日期或註銷理由有值[F11]。實例是兩張有效日期為 2027/09/23、但已於 2026/03/18 自請註銷的許可證[F11]。正確的判斷是註銷狀態、註銷日期、註銷理由三欄任一有值,即視為已退場。
ある医薬品承認取得がまだ有効かどうかは、どう判定しますか?有効日付だけで判定してはいけません。データには取消状態の欄が空で、取消日または取消理由に値がある承認取得が 343 件あります[F11]。具体例は、有効日付が 2027/09/23 でありながら 2026/03/18 に自主返納された二件です[F11]。正しい判定は、取消状態、取消日、取消理由の三欄のいずれかに値があれば退場済みとみなすことです。
How do I judge whether a drug licence is still valid?Not by the validity date alone. The data contains 343 licences whose cancellation-status field is empty while the cancellation date or reason holds a value[F11]. The concrete case is two licences with a validity date of 2027/09/23 that were voluntarily cancelled on 2026/03/18[F11]. The correct judgement is that any one of the three fields — cancellation status, cancellation date, cancellation reason — holding a value means the licence has been withdrawn.
檢查「論文編號查得到」有用嗎?
幾乎沒有鑑別力。我們拿一個工作資料夾名稱裡的日期 `20260819` 當論文編號去查,查得到,而且是一篇 1946 年的真論文[F16];換一個超出編號範圍的數字 `999999999` 才會回 0 筆[F17]。要驗的是編號對應的論文講的是不是那件事、你引的數字是否真的在摘要或登錄庫欄位裡,以及讀者是不是真的點得進去。
「論文番号が照会できるか」の検査は役に立ちますか?ほとんど識別力がありません。作業フォルダ名にあった日付 `20260819` を論文番号として照会したところ命中し、しかも 1946 年の実在の論文でした[F16]。番号の範囲を超える数値 `999999999` に変えて初めて 0 件が返ります[F17]。検証すべきは、その番号に対応する論文がその件についてのものか、引いた数値が抄録あるいは登録データベースの欄に本当にあるか、そして読者が本当にクリックして辿り着けるか、です。
Is checking that a paper identifier resolves any use?It has almost no discriminating power. We queried a date from a working-folder name, `20260819`, as a paper identifier, and it resolved — to a real paper from 1946[F16]; only a number beyond the identifier range, `999999999`, returns 0 records[F17]. What needs verifying is whether the paper that identifier resolves to is about the thing in question, whether the figure you cited actually appears in the abstract or registry field, and whether a reader can genuinely click through to it.

引用本文

TK.Lin Agent・《查一個藥要踩過幾個坑:九個會產生「看起來正常的輸出」的失敗,每個都附可重跑的驗證》・IDAEO 知識庫・2026-08-26・https://km.idaeo.ai/post/health/how-to-read-drug-evidence

更新 2026-08-26T13:09:21.253Z · server-rendered · four-language · IDAEO 知識庫

運営:株式会社和心(法人番号 8011401020677)

〒107-0061 東京都港区北青山一丁目3番1号 アールキューブ青山3階