一款瀏覽器式的數字萃取工具,能在一次掃描中從貼上的文字區塊中抽取出每一個數字詞元,並回傳乾淨的清單或摘要——包含計數、總和、最小值、最大值與平均值——而定義「什麼算是一個數字」的每一條規則都可以切換,讓輸出符合你的資料,而不是工具自行猜測的結果。用來判定數字範圍的語法規則是明確的,在實作之前便已由超過二十個測試案例加以固定。
大多數需要數字萃取工具的貼上內容長得都一樣:在連續敘述中夾雜總計與小計的發票、夾雜時間戳記與代碼的真實數值伺服器記錄、受訪者以數字作答而非選擇量表而產生的問卷自由填答文字,以及數字與斷字混雜的 OCR 輸出。用手動方式從中拉出數字既緩慢,而使用尋找與取代的快速掃描僅在周圍文字一致時才有效。一個專門打造的萃取工具會掃描整段貼文,套用其數字語法,只回傳數字,讓「這裡真正的數字是什麼」這個問題能用一次貼上與一次點擊得到答案。
Extract Numbers from Text 完全在瀏覽器中執行,這正是「線上」對萃取工具應有的意義:輸入內容在本機處理,不會上傳到任何伺服器,也不會綁定帳號儲存,而一百萬字元的貼上內容能立即得到結果,因為掃描只是一次線性掃描。輸出可採每行一個數字、適用於試算表的逗號分隔清單,或是當問題在於總和而非內容時的統計區塊。

此處「一個數字」的意義,以及刻意排除的範圍
範圍界線的重要性遠超過功能清單。依據所採用的語法,一個數字是一段 ASCII 數字序列,可選擇性地包含正負號、小數點、格式正確的千分位群組,以及可由獨立開關切換的科學記號後綴。全形數字與其他文字系統的數字符號會原樣通過而不被萃取,頁面明白標示此點而非半套支援——這就是所聲明的範圍。貨幣符號、百分號、方括號與周圍文字並不會妨礙比對,因為任務在於找出每一個數字,而不是判斷其上下文。
正負號規則是最容易出錯的一條。前置減號僅在其確實依附於數字時才會保留——位於行首、空白之後,或是開括號、比較運算子之後。這表示 5-3 這個算式會得到 5 與 3,而不是 5 與 -3。當語法其餘條件符合時,前置加號也會被辨識。未加前置零的裸小數(如「.5」)會被讀為 0.5。嵌在其他文字中的數字,無論出現在何處仍會被萃取:item123 會萃取出 123,$19.99 會萃取出 19.99,而 50% 會萃取出 50。
| 規則 | 預設 | 控制項目 |
|---|---|---|
| 正負號(減、加) | 開啟 | 僅在位於行首、空白之後,或是開括號、比較運算子之後時才保留正負號。 |
| 小數 | 開啟 | 辨識小數點,並將如 .5 的裸小數視為 0.5。 |
| 千分位分隔符號 | 開啟 | 將格式正確的群組(如 1,000,000)視為單一數字;格式錯誤的群組會在錯誤處切開。 |
| 科學記號 | 關閉 | 僅在開啟時才辨識 1e5 與 1.5E-3;預設為關閉,因為散文中幾乎不會使用此格式。 |
| 去除重複 | 關閉 | 在保留首次出現順序的前提下,合併重複的值。 |
若想更仔細了解每個切換開關如何影響輸出,可參考 switchable rules for number extraction 指南,它以貼上範例逐一示範相同的控制項,讓你能在不憑猜測的情況下看出開與關之間的差異。
如何線上從文字中萃取數字
從貼上區塊到一份乾淨數字清單的路徑很短。下方五個步驟會帶你從輸入走到一個可以複製、可與預期核對,並能貼入試算表或報告中的結果。
- 貼上含有你想萃取之數字的文字。將整段內容放入輸入欄位。多達一百萬字元的內容會以一次線性掃描處理,因此即使是冗長的發票或一整天的記錄行數,也能立即得到結果。
- 調整規則以符合你資料中「什麼算是一個數字」的定義。視資料來源而定,切換正負號、小數、千分位分隔符號與科學記號的開關。若同一數字反覆出現而你只想要唯一值,請開啟去除重複。
- 選擇清單或統計輸出。若要清單,請選每行一個數字或逗號分隔清單。當問題在於總和、範圍或平均值時,請選擇統計。
- 檢查找到的數量。每次萃取都會回報找到了多少個數字,因此在將輸出複製到他處之前,可與你的預期進行核對。完全沒有可辨識數字的輸入會被如實回報,而不是被轉為嚴重錯誤。
- 複製結果。使用複製動作取得清單或統計區塊,並貼入試算表、總計列,或是工作流程的下一步。
誠實地解讀統計區塊
統計——計數、總和、最小值、最大值與平均值——以一般的 JavaScript 倍精度浮點數運算計算。計數永遠是精確的。其餘四項遵循雙精度浮點數的精度,對於實際資料中大多數的十進位數值而言是精確的,只在精度範圍的極端處才開始顯露真實世界的殘差。乾淨十進位數的總和可能帶有在反覆運算時出現的熟悉浮點殘差,而頁面誠實地標示此限制,而非加以隱瞞。
完整展開的演算範例。貼上內容包含 10、20、30、40。萃取工具回傳 count = 4、min = 10、max = 40、sum = 10 + 20 + 30 + 40 = 100、average = 100 / 4 = 25。這些結果都能由人手依相同輸入重現,這正是計數欄位欲提供的稽核軌跡。當一長串十進位運算結尾處的總和看起來可疑時,計數會告訴你有多少個數字參與運算;與預期的偏差則會告訴你殘差究竟來自資料還是來自精度。
在你貼上之前,真正重要的兩個限制是字元上限與數字範圍。上限為一百萬字元,以一次線性掃描處理。數字範圍僅限 ASCII:全形數字與其他文字系統的數字符號會原樣通過而不被萃取。若輸入使用了非 ASCII 數字,而你需要它們被讀取,這屬於明確聲明的範圍界線,而不是需要反覆嘗試修正的錯誤。
此工具最能發揮價值之處
模式每次都一樣:一段以非數字為主、數字散落其中的文字區塊。以下列舉幾種常見的形態:
- 發票與收據。抽出的總計、小計、稅項與各品項金額需要匯入試算表欄位;萃取工具會依來源順序回傳,讓你直接貼入總計列。
- 伺服器記錄與請求行。延遲、位元組數、狀態碼與回應大小與時間戳記、IP 形式字串並存;萃取工具會回傳每一個數字詞元,讓你能於下游進行排序與加總。
- 問卷自由填答與表單匯出。當受訪者寫下數字而非使用量表時,自由填答欄位就像一鍋數字湯,而萃取工具會將其整平為一個乾淨的欄位。
- 在連續敘述中夾雜數字的報告。季度或年度報告將百分比、金額與計數混入段落之中;統計區塊能直接給出總和、範圍與平均值,無需重讀敘述。
| 來源 | 數字周圍常見的雜訊 | 需要留意的重點 |
|---|---|---|
| 發票與收據 | 貨幣符號、品項標籤、日期 | 貨幣符號不會妨礙比對;請確保正負號規則符合負值的書寫方式。 |
| 伺服器記錄 | 時間戳記、IP、狀態碼、十六進位 ID | IP 形式字串在其組成部分皆為純數字時會被當作數字萃取;若每個值皆為整數計數,請關閉小數功能。 |
| 問卷自由填答 | 文字、縮寫、單位 | 嵌於詞中的數字仍會被萃取;若「1st」應讀為 1,語法已能正確處理。 |
| 報告敘述 | 百分號、貨幣符號、比較運算子 | 比較運算子屬於依附規則的一部分,因此「≥」之後的值仍會被萃取,而比較運算子則保留於原處。 |
若想進一步了解同一工具在貼上內容為單一欄位而非段落時的表現,可參考 extracting numbers from pasted text as list or statistics 指南,它以貼上範例逐一示範相同的輸出選項。
此工具刻意不做的事
一個值得信賴的萃取工具,應是其規則能被讀懂。它不會進行詮釋:不做貨幣換算、不辨識單位、不解析日期、不猜測數字的意義。它不會為了討好使用者而將統計結果四捨五入至更友好的精度,因為那會掩蓋頁面坦誠揭示的浮點殘差。當語法判定兩段數字相鄰卻分離時,它不會將其合併為一個數字。每一次輸出皆附帶計數,而完全沒有可辨識數字的輸入會被如實回報,而非視為錯誤——沒有數字也是一項資訊。