
相關語境指用語周圍的詞顯示,這段文字是關於該技能。一個散落的字母不是相關語境。Actor 是託管的數據收集程式。Task 是已儲存的輸入預設。Actor 收集來源列。你標註技能用語。
1. 先界定樣本組
在標註任何技能之前,先寫下樣本組規則。樣本組是同一職位、同一市場、同一日期規則下的職缺組。把日期規則寫在樣本組筆記中。日期規則是你接受的時間範圍。
在標註之前,先為你要報告的數字命名。你可以報告有多少職缺有該項技能使用。你可以報告有多少僱主有該項使用。你可以報告這些詞出現多少次。這是三個不同的數字。不要把它們混合。
占比是一個計數除以分母。分母就是這個除數。你要在知道哪些職缺有完整文字之後,才設定分母。在你為占比命名之前,不要標註用語。
對於較早的月份,使用你已經儲存的描述快照。Actor 不能收集 2020 或 2021 年的描述。新的一次執行只能開始新的樣本組。它不能重建舊的樣本組。
2. 收集並儲存來源列
使用 Indeed Jobs Scraper Actor。公開組建 1.2.14 接受這些欄位:searchTerm、country、location、maxItems、maxPagesPerSearch、postedWithinDays、sortBy,以及 saveOnlyUniqueItems。已儲存的 Task 於 2026 年 10 月 13 日做過檢查。Task 只是起始輸入。它不會替你完成這次點算。
已儲存的 Task 輸入是:
{
"country": "us",
"searchTerm": "software engineer",
"maxItems": 100,
"postedWithinDays": "7",
"sortBy": "date",
"maxPagesPerSearch": 2,
"saveOnlyUniqueItems": true
}這個 Task 把 country 設為 us,把 search term 設為 software engineer。它沒有設定城市。只有當你的市場小於該國家時,才加入 location。當你研究其他對象時,更換職位與市場。同一次執行只保留一個職位與一個市場。
上限就是 maxItems 限制。這個 Task 把上限設為 100 列,並最多讀取 2 個搜尋頁。這個寬上限不是第一次文字檢查。第一次檢查只保留一個職位與一個市場。把 maxItems 設為 2。把 maxPagesPerSearch 設為 1。第一次檢查的輸入是:
{
"country": "us",
"searchTerm": "software engineer",
"maxItems": 2,
"postedWithinDays": "7",
"sortBy": "date",
"maxPagesPerSearch": 1,
"saveOnlyUniqueItems": true
}在這個組建上,一次設有上限的執行傳回兩列。每一列都有來源職位 ID 與來源 URL。每一列都有完整描述文字。該次執行達到 maxItems。從你自己的輸出複製 ID 與 URL。不要自行輸入新的 ID。這次執行顯示文字收集可行。它不是技能結果。它也不是下文的虛構樣本組。
已儲存的 Task 把 saveOnlyUniqueItems 設為 true。當 Actor 收集列時,該設定可以減少重複。它不會完成重複審查。再刊登是同一個空缺再次刊登。在標註之前,移除已審查的重複列,以及已審查的再刊登列。該審查使用重複與再刊登指南。把移除數量記在筆記中。
每一來源列是一筆已收集紀錄。職缺是你為點算而保留的一列。把 jobId 存成文字。不要讓試算表把 jobId 轉成數字。
使用這些輸出欄位。執行計數是整次執行的一個數字。它不是職缺列。
| 輸出名稱 | 種類 | 用法 |
|---|---|---|
| jobId | 列欄位 | 以文字儲存。 |
| title | 列欄位 | 保留它。不要把職銜當作完整要求。 |
| companyName | 列欄位 | 保留它,供僱主點算使用。 |
| locationRaw | 列欄位 | 保留來源地點文字。 |
| descriptionText | 列欄位 | 從這段文字標註技能。 |
| descriptionStatus | 列欄位 | 只使用 full 或 missing。 |
| jobUrl | 列欄位 | 保留來源 URL。 |
| query | 列欄位 | 保留該列的搜尋文字。 |
| searchLocation | 列欄位 | 保留該列的搜尋地點。 |
| scrapedAt | 列欄位 | 這是收集時間。 |
| seniority | 可選列欄位 | 它可以缺漏。它不是完整要求。 |
| employmentType | 可選列欄位 | 它可以缺漏。 |
| salaryRaw | 可選列欄位 | 它可以缺漏。缺漏不是薪金為零。 |
| postedAt | 可選列欄位 | 它可以缺漏。不要編造刊登月份。 |
| postedAtRaw | 可選列欄位 | 它可以缺漏。 |
| rowsExcludedByCompany | 執行計數 | 單獨保留這個計數。 |
| rowsExcludedByDate | 執行計數 | 單獨保留這個計數。 |
| rowsExcludedBySalary | 執行計數 | 單獨保留這個計數。 |
當 descriptionText 存在時,descriptionStatus 為 full。當文字不存在時,它為 missing。不要另加 snippet 狀態。這裡的完整文字是來源給出的文字。它不是僱主整份文件的保證。
scrapedAt 是 Actor 收集該列的時間。它不是僱主刊登職位的月份。如果 postedAt 缺漏,刊登月份保持未知。
rowsExcludedByCompany 是因公司原因而排除的列的執行計數。rowsExcludedByDate 是因日期原因而排除的列的執行計數。rowsExcludedBySalary 是因薪金原因而排除的列的執行計數。不要把這三個計數加成一個總數。不要把計數器變成職缺列。這次對照給出每個計數。三者都沒有省略。rowsExcludedByCompany 是 0。rowsExcludedByDate 是 0。rowsExcludedBySalary 是 0。不要為被省略的計數器寫零。這三個計數器都存在,所以每個零都是該計數。執行對照表列出每個欄位及其值。這次對照沒有給出的欄位是未知。日後缺席的欄位是未知。目前這個兩列、設有上限的 Indeed 對照有這些輸出值:requestedMaxItems: 2, candidateItemsSeen: 100, jobsSaved: 2, pagesParsed: 1, blockedPages: 0, failedRequests: 0, stopReason: "max_items_reached", rowsExcludedByCompany: 0, rowsExcludedByDate: 0, rowsExcludedBySalary: 0。這次執行不是未知。日後缺席的欄位仍然未知。
儲存實際執行的輸入、原始列與輸出。寫下你設定的 maxItems,以及傳回的列數。如果兩個數字相等,該次執行已達到上限。達到上限並不表示傳回的列涵蓋所有相符職位。如果執行沒有傳回任何列,寫明該次執行是空的。空的執行不能證明沒有職位存在。如果執行失敗,儲存失敗紀錄。不要用技能零去填補失敗的執行。
把 descriptionText 缺漏的列留在已標註集合之外。每一這樣的列,把缺文計數加 1。缺文不是技能不存在的職缺。
Actor 給出目前的公開列。它不給出舊的描述文字。它不給出僱主編輯時間。它不給出申請人狀態。它不給出學習計劃。它不為技能用語加標籤。你用以下規則為它們加標籤。
3. 配對之前先寫技能清單
在搜尋文字之前,先寫技能清單。技能鍵是你為一項技能儲存的那一個名稱。別名是同一技能的另一種寫法。語元是整個詞,或一個獨立符號。它不是較長詞語的一部分。排除項是文字中找到、但標註規則拒絕的配對結果。
配對 SQL、Structured Query Language 及以下其他鍵時,忽略字母大小寫。當這些詞指該語言時,讓 SQL 與 Structured Query Language 共用一個鍵。Java 與 JavaScript 保持分開。只在相關文字中,把 R 配對為完整的技能語元。不要配對另一個詞裡面的字母 R。
版本標籤,例如語言版本,需要一條寫明的規則。產品名稱需要一條寫明的規則。在標註之前決定規則。閱讀時不要猜測。
這份技能清單用於本文的虛構樣本組。它不是 Actor 提供的清單。你自己的樣本組需要你自己的鍵。
| 技能鍵 | 允許的別名 | 語元規則 | 排除項 |
|---|---|---|---|
| SQL | SQL; Structured Query Language | 當文字指該語言時,兩個別名共用此鍵。 | 不要把此鍵用於不同片語。 |
| Python | Python | 配對整個詞。 | 不要把非必需片語標註為必需。 |
| R | R | 在相關技能文字中配對完整語元。 | 不要配對詞語裡面的字母。 |
| Java | Java | 配對整個詞。 | 不要配對 JavaScript。 |
| JavaScript | JavaScript | 配對整個詞。 | 不要把 Java 計成 JavaScript。 |
這份清單沒有版本規則,也沒有產品名稱規則。虛構文字沒有版本,也沒有產品名稱。如果你的文字有其中一項,先把規則加進清單。
4. 標註每一段
找出包含技能名稱的段落。然後閱讀它周圍的詞。類別是提及的種類。使用這些類別:
- 必需指文字說明申請人必須具備該技能。
- 優先指文字要求該技能,但沒有說明申請人必須具備它。
- 情境指文字說明工作使用該技能,但並不要求申請人具備它。
- 明文非必需指文字說明申請人不需要該技能。
- 未能判定指你無法從詞語判斷類別。
字面提及指技能名稱出現在文字中。即使類別不是必需,仍保留字面提及。不要捨棄該句。
下文的虛構樣本組包含「no Python experience required.」這些詞。這些詞是 Python 的字面提及。類別是明文非必需。類別不是必需。
同一樣本組包含「we use R for reports.」這些詞。這些詞是 R 的字面提及。類別是情境。除非文字同時說明申請人必須具備 R,否則不要把 R 標為必需。
「reports」裡面的字母 r 不是技能 R。「required」裡面的字母 r 不是技能 R。
如果一份職缺對同一技能有兩個類別,每個類別都要標。如果同一類別在一份職缺中重複,該類別只標一次。
5. 建立職缺矩陣
用語對職缺矩陣是一張表,每個已標註職缺佔一列。每個技能類別有自己的欄。完整文字有該類別時填 1。你讀過完整文字而該類別不存在時填 0。0 表示你讀過該文字。它不表示文字缺漏。
同一鍵在一份職缺中重複提及,在該類別仍然只做成一個職缺標記。該類別在職缺中的出現標記就是那個 1。需要時,把原始出現次數放在另一張表。一次原始出現是該鍵出現一次。不要把原始出現次數加進職缺欄。
一份職缺可以在優先為 1、在必需為 0。一份職缺可以在明文非必需為 1、在必需為 0。一份職缺可以在情境為 1、在必需為 0。不要合併這些欄。
不要把缺漏的描述放進矩陣,成為一列零。把它留在缺文計數。
6. 設定分母
分母是同一樣本組中,不同的完整文字職缺的數目。不同指同一職缺只計一次。只計算重複審查之後仍然留下的職缺。只計算 descriptionStatus 為 full 的職缺。
職缺占比等於類別計數除以分母。把占比寫成「分母中的若干計數」。在旁邊報告缺文計數。在旁邊報告不確定 ID 計數。不確定 ID 是空白、已更改,或與另一列衝突。把不確定 ID 留在分母之外。
也要報告標註不確定。標註不確定指審查者對類別不一致。在紀錄寫明議定類別之前,把有爭議的職缺留在必需計數之外。不要把爭議悄悄變成零。
僱主覆蓋是具有該類別的不同僱主數目。把該僱主計數除以分母中的不同僱主數目。一名僱主可以撰寫多份職缺。職缺占比可以很高,但這些職缺仍可能只來自少數不同僱主,僱主占比因而偏低。兩個占比都要報告。
這些占比只描述你的樣本組。它們不是全國技能需求。它們不是申請人能力的量度。
7. 用相同規則比較樣本組
只在樣本組規則相符時,才比較兩個月。保持相同的職位、市場、查詢、日期範圍、上限與技能清單版本。技能清單版本是你給予一份已儲存技能清單的名稱。
如果你更改別名或類別規則,職位文字不變,占比仍可以改變。該改變是標註改變。在解讀新占比之前,先報告這項標註改變。
如果上限、查詢、市場或日期範圍改變,樣本已改變。來源文字缺漏也是覆蓋改變。在解讀占比改變之前,先報告樣本改變。不要把標註改變當作樣本改變。
搜尋樣本不顯示改變的原因。它不顯示整個市場有增長。技能占比的改變不是職缺數目的改變。職缺數目隨時間的變化,使用招聘趨勢指南。
8. 儲存紀錄
儲存技能清單及其版本名稱。儲存你標註的每一段,連同職缺 ID、技能鍵與類別。儲存矩陣。儲存分母紀錄。
分母紀錄應包括:
- 職位、市場、查詢、日期範圍與上限。
- 實際執行的輸入與 Actor 組建。
- 傳回的列數,以及該次執行是否達到 maxItems。
- 任何失敗紀錄。
- rowsExcludedByCompany、rowsExcludedByDate 與 rowsExcludedBySalary;每個被省略的計數器則記為未知。
- 你移除的重複列。
- 缺文計數。
- 不確定 ID 計數。
- 標註不確定計數。
- 分母。
- 該分母中的僱主計數。
第二個人應能從已儲存的段落出發,到達同一個矩陣格。如果不能,紀錄並不完整。
停在用語點算。重複的職責可以引導後來的學習選擇。該選擇不是這次點算。這次點算也不是個人準備程度分數。
點算一個虛構樣本組
本節五段描述都是虛構。它們不是 Actor 結果。它們不是真實的技能發現。J1 至 J5 是標籤。它們不是真實來源 ID。上面的技能清單是這個樣本組的規則。
| 標籤 | 僱主 | descriptionText | descriptionStatus |
|---|---|---|---|
| J1 | A | SQL required. SQL reports run daily. Python preferred. | full |
| J2 | A | Structured Query Language required; no Python experience required. | full |
| J3 | B | JavaScript required; we use R for reports. | full |
| J4 | C | Java required; R preferred. | full |
| J5 | D | `""` | missing |
這些標籤沒有 scrapedAt 值,也沒有 postedAt 值。不要為它們指定刊登月份。
J1 與 J2 使用僱主 A。它們的文字不同。這段虛構保留兩份職缺。它不把 J2 稱為 J1 的再刊登。如果真實審查把 J2 作為再刊登而移除,分母會改變。這段虛構不作該判定。
J5 有已知標籤,沒有完整文字。J5 留在矩陣之外。缺文計數是 1。不確定 ID 計數是 0,因為標籤已知,而文字才是缺文。不要為 J5 編造文字。
段落紀錄是:
| 職缺 | 段落 | 技能鍵 | 類別 |
|---|---|---|---|
| J1 | SQL required. | SQL | 必需 |
| J1 | SQL reports run daily. | SQL | 情境 |
| J1 | Python preferred. | Python | 優先 |
| J2 | Structured Query Language required | SQL | 必需 |
| J2 | no Python experience required | Python | 明文非必需 |
| J3 | JavaScript required | JavaScript | 必需 |
| J3 | we use R for reports | R | 情境 |
| J4 | Java required | Java | 必需 |
| J4 | R preferred | R | 優先 |
| J5 | 沒有完整文字 | 無 | 未標註 |
一次出現是技能文字出現一次。出現標記是一個類別在一份職缺上的一個標記。每份職缺的每個類別只標一次。第二句有相同的鍵與相同的類別,會增加一次原始出現。它不會增加第二個出現標記。第二句有相同的鍵但不同的類別,會得到自己的出現標記。不要因為該鍵也有必需文字,就捨棄該類別。
J1 的第一句 SQL 是必需。它是一次必需出現。J1 的必需出現標記是 1。句子「SQL reports run daily.」是情境。它是一次情境出現。J1 的情境出現標記是 1。J2 計入 SQL,因為 Structured Query Language 是允許的別名。這些詞指該語言,而且該句說明它是必需。該別名是一次必需出現。J2 的必需出現標記是 1。
矩陣只對四段完整文字使用 1 與 0。J5 在這裡不是一列。
| 職缺 | 僱主 | SQL 必需 | SQL 情境 | Python 必需 | Python 優先 | Python 明文非必需 | R 必需 | R 情境 | R 優先 | Java 必需 | JavaScript 必需 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| J1 | A | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| J2 | A | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| J3 | B | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| J4 | C | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
| 職缺計數 | `""` | 2 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
J1 至 J4 中的每個 0,表示已讀完整文字,而該類別不存在。沒有已標註段落是未能判定,所以未能判定是 4 份中的 0。該零來自一次閱讀。它不是 J5 的缺文。沒有類別在爭議中,所以標註不確定計數是 0。
原始計數留在另一張表。
| 職缺 | 技能鍵 | 類別 | 原始出現次數 |
|---|---|---|---|
| J1 | SQL | 必需 | 1 |
| J1 | SQL | 情境 | 1 |
| J2 | SQL | 必需 | 1 |
| J2 | SQL | 情境 | 0 |
| J1 | Python | 優先 | 1 |
| J2 | Python | 明文非必需 | 1 |
| J2 | Python | 必需 | 0 |
| J3 | R | 情境 | 1 |
| J4 | R | 優先 | 1 |
| J3 | R | 必需 | 0 |
| J4 | R | 必需 | 0 |
| J3 | Java | 必需 | 0 |
| J4 | Java | 必需 | 1 |
| J3 | JavaScript | 必需 | 1 |
| J4 | JavaScript | 必需 | 0 |
四份有效的完整文字職缺構成分母。職缺是 J1、J2、J3 與 J4。分母中的僱主是 A、B 與 C。該僱主總數是 3。僱主 D 在其外,因為 J5 沒有完整文字。
J1 有 2 次原始 SQL 出現。必需類別有 1。情境類別有 1。J2 有 1 次原始 SQL 出現,該類別是必需。SQL 必需的原始計數是 1 加 1,等於 2。SQL 情境的原始計數是 1。2 加 1 等於 3 次原始 SQL 出現。字面 SQL 總計數保持 3。必需的原始總數是 2。必需的職缺計數也是 2。相同的數字不會使兩個量度變成一個量度。情境出現在必需原始總數之外。SQL 必需的職缺計數是 2。SQL 必需占比等於 2 除以 4。它不等於 3 除以 4。它不等於 2 除以 5。多出的原始提及是情境。它不是多出的職缺。J5 不進入分母。
SQL 情境的職缺計數是 1。SQL 情境占比等於 1 除以 4。不要把 1 份情境職缺加到 2 份必需職缺。J1 會被計兩次。類別保持分開。
兩份 SQL 必需職缺都屬於僱主 A。SQL 必需的僱主占比等於 1 除以 3。那一份 SQL 情境職缺屬於僱主 A。SQL 情境的僱主占比等於 1 除以 3。僱主 A 也撰寫了 4 份職缺中的 2 份。在職缺占比旁邊報告該覆蓋。在這段虛構中,一名僱主就可以改變 SQL 占比。
Python 文字出現在 J1 與 J2。那是兩次字面提及,兩者都留在紀錄上。Python 優先等於 1 除以 4。Python 明文非必需等於 1 除以 4。Python 必需等於 0 除以 4。不要把優先提及加到非必需提及,然後把總和稱為必需。非必需片語仍然是字面提及。
R 文字出現在 J3 與 J4。R 情境等於 1 除以 4。R 優先等於 1 除以 4。R 必需等於 0 除以 4。字面 R 的職缺出現占比等於 2 除以 4。不要把這兩份職缺報告為必需。
Java 必需只有 J4。該占比等於 1 除以 4。JavaScript 必需只有 J3。該占比等於 1 除以 4。J3 的 Java 計數是 0,因為 JavaScript 是不同的鍵。
報告的占比是:
| 類別 | 職缺 | 職缺占比 | 僱主 | 僱主占比 |
|---|---|---|---|---|
| SQL 必需 | J1, J2 | 4 份中的 2 | A | 3 間中的 1 |
| SQL 情境 | J1 | 4 份中的 1 | A | 3 間中的 1 |
| Python 必需 | 無 | 4 份中的 0 | 無 | 3 間中的 0 |
| Python 優先 | J1 | 4 份中的 1 | A | 3 間中的 1 |
| Python 明文非必需 | J2 | 4 份中的 1 | A | 3 間中的 1 |
| R 必需 | 無 | 4 份中的 0 | 無 | 3 間中的 0 |
| R 情境 | J3 | 4 份中的 1 | B | 3 間中的 1 |
| R 優先 | J4 | 4 份中的 1 | C | 3 間中的 1 |
| Java 必需 | J4 | 4 份中的 1 | C | 3 間中的 1 |
| JavaScript 必需 | J3 | 4 份中的 1 | B | 3 間中的 1 |
詞語計數器是一種工具,它找到一個字母序列就加一。兩個詞語計數器結果不符合這條虛構規則。把它們用作規則測試。它們不是軟件產品的分數。
詞語計數器見到 JavaScript 時會標上 Java。它會把 J3 標為 Java。該標記不符合語元規則。Java 保持 4 份中的 1,只來自 J4。
詞語計數器把「no Python experience required」當作 Python 需求,或當作 Python 必需。該標記不符合類別規則。Python 必需保持 4 份中的 0。J2 該句保持明文非必需。
搜尋字母 SQL 也會漏掉 J2。別名規則仍然標上 J2。SQL 必需計數保持 4 份中的 2。
來源與延伸閱讀
作者 Chronometrica · 更新日期
返回頂端 ↑

