中文斷詞技術與字數計算
「人工智慧」有四個漢字,但在一份斷詞標準中可能被視為一個詞。投稿規定的「字數」、程式的字串長度與自然語言處理的「詞數」,回答的是不同問題,不能用固定比例互換。先確認交稿平台採用哪個定義,再選計算方式。
三種長度,先分清楚
- UTF-16 編碼單元(code unit):JavaScript 的
text.length計算這個數字。常見漢字通常佔一個單元;部分罕用漢字和 emoji 需要兩個或更多單元。 - Unicode 碼點(code point):例如
[...text].length。它不會把代理對拆成兩個,但組合重音和 emoji 序列仍可含多個碼點。 - 字素叢集(grapheme cluster):可用
Intl.Segmenter的granularity: 'grapheme'計算,較接近使用者看見的一個字形;它也不是中文詞數。
下表是完整的構造例子,可逐一複製核對;é 是 e 加上 U+0301 組合重音,不是預組合的 é。
| 完整文字 | UTF-16 單元 | 碼點 | 字素叢集 |
|---|---|---|---|
| 中文 | 2 | 2 | 2 |
| 𠮷 | 2 | 1 | 1 |
| 😀 | 2 | 1 | 1 |
| é | 2 | 2 | 1 |
| 👨👩👧👦 | 11 | 7 | 1 |
重現方式:在支援 Intl.Segmenter 的瀏覽器主控台,分別執行 text.length、[...text].length、[...new Intl.Segmenter('zh-TW', {granularity: 'grapheme'}).segment(text)].length,並把 text 設為表中的完整文字。
字元計數不是中文斷詞
以「我們使用人工智慧」為例,逐字計數是 8 個常見漢字;若手動指定「我們/使用/人工智慧」為切分標準,則是 3 個詞。這是示範用的明確標註,並非所有斷詞器都必須輸出相同結果。
專名、新詞、領域用語,以及是否把複合詞分開,都會改變詞數。例如產品名稱應保留完整,還是拆成可搜尋的部分,取決於用途。比較斷詞工具時,應先固定語料、版本、詞典及標註標準;沒有這些條件,就不能把某個準確率或 F1 分數當成通用保證。
本站工具實際怎麼算?
本站的「字數/詞數」是混合計數,不是詞典式中文斷詞。字元數採 UTF-16 長度;詞數則將工具涵蓋的 BMP 漢字、假名與韓文字元逐字計數,其餘文字交給瀏覽器 Intl.Segmenter,保留 isWordLike 的片段後合計。
| 完整輸入 | 字元數(含空白) | 混合詞數 |
|---|---|---|
| 中文 ABC 123 | 10 | 4 |
此例含 2 個漢字、2 個空白、3 個英文字母與 3 個數字,UTF-16 長度為 10;混合詞數為「中」「文」「ABC」「123」共 4 個單位。標點與空白不會各算一個詞。罕用漢字、組合字元及其他語言的分詞結果,可能受字元範圍和瀏覽器資料影響。
閱讀時間採「工具辨識的 CJK 單位 ÷ 500 + 其他詞單位 ÷ 200」分鐘。這是固定速度假設,不是對個人閱讀速度或理解程度的測量。
需要語言學斷詞時,怎麼選?
- Jieba 官方專案提供詞典、詞頻路徑與 HMM 等機制,亦可加自訂詞典;選擇切分模式會影響結果。
- CKIP Transformers 官方專案提供繁體中文模型與斷詞等工具。是否適合特定領域,仍需用自己的標註例子評估。
本站計數器沒有呼叫上述模型。若要做搜尋索引、論文統計或術語分析,先整理包含專名與混合語言的完整測試句,逐項檢查切分結果,而不是以工具人氣決定。
交稿前的核對步驟
- 確認規定是否包含標點、空白、標題、註腳,以及限制的是字元、詞或位元組。
- 用一小段含中文、英文、數字和 emoji 的完整文字,比對實際提交平台與計數器。
- 如有差異,以接收方規則為準,並保留輸入文字、計算方式與版本,方便重現。