基于招聘信息与求职者信息的匹配度和满意度模型构建
这份代码似乎与题意有些偏离,需要进行一些修改:/n/n1. 首先,需要根据招聘信息和求职者信息构建岗位匹配度和求职者满意度的模型。具体而言,岗位匹配度可以根据招聘信息和求职者的技能要求、经验要求、学历要求等进行匹配度计算,求职者满意度可以根据招聘信息的薪资待遇、工作地点、职位描述等进行满意度计算。在计算岗位匹配度和求职者满意度时,可以使用相似度计算方法,如余弦相似度、欧几里得距离等。/n/n2. 其次,需要根据计算出来的岗位匹配度和求职者满意度,为每条招聘信息提供岗位匹配度非0的求职者,将结果进行降序排序存放在'result3-1.csv'文件中,以及为每位求职者提供求职者满意度非0的招聘信息,将结果进行降序排序存放在'result3-2.csv'文件中。/n/n3. 最后,需要注意代码中的一些细节问题,如变量命名、代码注释、异常处理等。/n/n下面是修改后的代码:/n/npython/nimport pandas as pd/nimport re/nfrom collections import Counter/nimport math/n/n# 计算文本相似度/ndef text_similarity(text1: str, text2: str, n: int) -> float:/n    '''/n    计算文本相似度/n    :param text1: 文本1/n    :param text2: 文本2/n    :param n: 子串长度/n    :return: 相似度/n    '''/n    def n_gram(text: str, n: int) -> list:/n        '''/n        将文本切分成长度为n的子串/n        '''/n        text = re.sub(r'[^/w/s]', '', text)/n        text = text.lower()/n        words = text.split()/n        ngrams = []/n        for word in words:/n            for i in range(len(word)-n+1):/n                ngrams.append(word[i:i+n])/n        return ngrams/n/n    def cosine_similarity(vec1: dict, vec2: dict) -> float:/n        '''/n        计算余弦相似度/n        '''/n        intersection = set(vec1.keys()) & set(vec2.keys())/n        numerator = sum([vec1[x] * vec2[x] for x in intersection])/n/n        sum1 = sum([vec1[x]**2 for x in vec1.keys()])/n        sum2 = sum([vec2[x]**2 for x in vec2.keys()])/n        denominator = math.sqrt(sum1) * math.sqrt(sum2)/n/n        if not denominator:/n            return 0.0/n        else:/n            return float(numerator) / denominator/n/n    ngrams1 = n_gram(text1, n)/n    ngrams2 = n_gram(text2, n)/n    vec1 = Counter(ngrams1)/n    vec2 = Counter(ngrams2)/n    similarity = cosine_similarity(vec1, vec2)/n    return similarity/n/n# 构建岗位匹配度和求职者满意度的模型/ndef calculate_similarity(df1, df2):/n    similarity_df = pd.DataFrame(columns=['求职者姓名', '岗位名称', '岗位匹配度', '招聘信息ID', '求职者满意度'])/n    for i in range(len(df1)):/n        job_name = df1.loc[i, '岗位名称']/n        for j in range(len(df2)):/n            salary = df2.loc[j, '薪资待遇']/n            location = df2.loc[j, '工作地点']/n            job_desc = df2.loc[j, '职位描述']/n            skill_req = df2.loc[j, '技能要求']/n            exp_req = df2.loc[j, '经验要求']/n            edu_req = df2.loc[j, '学历要求']/n            similarity = 0/n            # 计算岗位匹配度/n            if (re.search(skill_req, job_name) is not None) and (re.search(exp_req, job_name) is not None) and (re.search(edu_req, job_name) is not None):/n                similarity += 0.4/n            if (re.search(skill_req, job_desc) is not None) and (re.search(exp_req, job_desc) is not None) and (re.search(edu_req, job_desc) is not None):/n                similarity += 0.3/n            if (re.search(skill_req, location) is not None) and (re.search(exp_req, location) is not None) and (re.search(edu_req, location) is not None):/n                similarity += 0.2/n            # 计算求职者满意度/n            if salary > df1.loc[i, '期望薪资']:/n                similarity += 0.1/n            if similarity > 0:/n                similarity_df.loc[len(similarity_df)] = [df1.loc[i, '求职者姓名'], job_name, similarity, df2.loc[j, '招聘信息ID'], salary]/n    return similarity_df/n/n# 为每条招聘信息提供岗位匹配度非0的求职者/ndef job_matching(similarity_df):/n    job_matching_df = pd.DataFrame(columns=['求职者姓名', '岗位名称', '岗位匹配度'])/n    for job_id in similarity_df['招聘信息ID'].unique():/n        temp_df = similarity_df[similarity_df['招聘信息ID'] == job_id]/n        temp_df = temp_df[temp_df['岗位匹配度'] > 0]/n        if not temp_df.empty:/n            temp_df = temp_df.sort_values(by=['岗位匹配度'], ascending=False)/n            job_matching_df = pd.concat([job_matching_df, temp_df.iloc[:1]])/n    job_matching_df = job_matching_df.sort_values(by=['岗位匹配度'], ascending=False)/n    job_matching_df.to_csv('result3-1.csv', index=False)/n/n# 为每位求职者提供求职者满意度非0的招聘信息/ndef candidate_matching(similarity_df):/n    candidate_matching_df = pd.DataFrame(columns=['求职者姓名', '岗位名称', '求职者满意度'])/n    for candidate_name in similarity_df['求职者姓名'].unique():/n        temp_df = similarity_df[similarity_df['求职者姓名'] == candidate_name]/n        temp_df = temp_df[temp_df['求职者满意度'] > 0]/n        if not temp_df.empty:/n            temp_df = temp_df.sort_values(by=['求职者满意度'], ascending=False)/n            candidate_matching_df = pd.concat([candidate_matching_df, temp_df.iloc[:1]])/n    candidate_matching_df = candidate_matching_df.sort_values(by=['求职者满意度'], ascending=False)/n    candidate_matching_df.to_csv('result3-2.csv', index=False)/n/n# 测试代码/nif __name__ == '__main__':/n    # 读取数据/n    df1 = pd.read_excel('result2-1.xlsx')/n    df2 = pd.read_excel('result2-2.xlsx')/n    # 计算相似度/n    similarity_df = calculate_similarity(df1, df2)/n    # 为每条招聘信息提供岗位匹配度非0的求职者/n    job_matching(similarity_df)/n    # 为每位求职者提供求职者满意度非0的招聘信息/n    candidate_matching(similarity_df)/n/n
原文地址: https://www.cveoy.top/t/topic/nIw4 著作权归作者所有。请勿转载和采集!