我有一個包含職位描述的大型面板資料集。我想從職位描述中提取工資/薪水。但是,職位描述中薪水的表述方式存在很多差異。這里有一些例子:
“科羅拉多州此職位的薪資范圍為 123,500 美元 - 185,500 美元”
“這個角色的薪水是 180,000 美元到 216,000 美元”
“在科羅拉多州,這個職位的薪水在 150,800 美元到 226,000 美元之間。”
“薪酬范圍:12.00 美元 - 16.00 美元”
“薪資范圍:180,000 美元 - 147,000 美元”
“該職位的預期起薪為:每年 100,000 至 142,000 美元”
“時薪估算:$21.49 - $32.24 / 小時”
此外,有時職位描述會包含一個“$”符號,指的是公司的預算或市場價值,因此這不僅僅是在美元符號后面獲取資訊那么簡單。
我認為解決這個問題的最好方法是使用正則運算式。我想如果我創建一套全面的關鍵短語(例如,“這個角色的薪水范圍是”,“薪水范圍:”,“薪資范圍:”,“這個職位的預期基本工資是:”等。 ) 在工資資訊之前,我就可以獲取后面的工資資訊。
這是我想出的代碼:
pattern = r'\Starting\s Pay\s Range\: | \Salary\s Range\: | \s Pay\Range\:'
pd_00['salary_info'] = pd_00['job_description'].str.extract(pattern, re.IGNORECASE, expand=False)
我的問題是,我不知道在一組關鍵短語之后提取薪水資訊的最佳方法。如果你看上面的例子,有時資訊的范圍之間有一個“-”,有時它有一個“to”。此外,有時美元價值中有小數,有時沒有小數。任何幫助將不勝感激!
uj5u.com熱心網友回復:
鑒于在您的回答中您宣告并非所有可能的文本都包含在您的示例中(例如使用諸如“今年的預算將從 150,000 美元到 200,000 美元”之類的文本),我認為正則運算式不是這個問題的最佳方法。在 NLP 方法下,您可以使用轉換器問答管道:
問答模型可以從給定的文本中檢索問題的答案,這對于在檔案中搜索答案很有用。一些問答模型可以在沒有背景關系的情況下生成答案!
from transformers import pipeline
qa_model = pipeline("question-answering")
并通過使用問題:
question = "What is the pay or salary range for the role?"
然后,您可以使用以下文本:
texts = ["The salary range in Colorado for this role is from USD $123,500 - $185,500",
"The salary for this role is $180,000 to $216,000",
"The salary for this role in the state of Colorado is between $150,800 to $226,000.",
"Pay Range: $12.00 - $16.00",
"Salary Range: $180,000 - $147,000",
"The anticipated starting base pay for this position is: $100,000 to $142,000 per year",
"Hourly wage estimate: $21.49 - $32.24 / hour",
"The budget this year will be from $150,000 to $200,000"]
作為 qa_model 的輸入:
ranges = [qa_model(question = question, context = x)['answer'] for x in texts if qa_model(question = question, context = x)['score'] > 0.45]
回傳:
['USD $123,500 - $185,500',
'$180,000 to $216,000',
'between $150,800 to $226,000',
'$12.00 - $16.00',
'$180,000 - $147,000',
'$100,000 to $142,000 per year',
'$21.49 - $32.24 / hour']
請注意,我使用 0.45 的任意閾值來過濾其他可能具有范圍但與工資或薪水無關的句子,例如texts變數中的最后一個元素。請相應調整。
如果您需要將此應用于df“職位描述”列包含文本的資料框(例如命名),您可以嘗試:
pd_00['salary_range'] = pd_00['job_descriptiom'].map(lambda x: "No pay range detected" if (qa_model(question = question, context = x)['score'] < 0.45) else qa_model(question = question, context = x)['answer'])
uj5u.com熱心網友回復:
嘗試這個:
您可以通過訪問第一個捕獲組中的值來訪問薪水\1
.*?(?:\b(?:[sS]alary|[wW]age|[pP]ay)\b).*?([$][\d,.] \s*[ot-] \s*[\d$,.] \d )
請參閱正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533763.html
上一篇:如何在R中查找包含子字串的字串
