【问题标题】:How to find the same job titles that are written differently?如何找到写法不同的相同职位?
【发布时间】:2020-11-05 13:36:43
【问题描述】:

我想查找在简历上具有职位(例如)Market Research Coordinator 的人,但他们的写法可能不同,例如:

Marketing Research Coordinator
Market Researching Coordinator
Markets Research Coordinator
Market Researches Coordinator
Marketing Research Coordinator
Markets Researchers Coordinator
Market Researcher Coordinators
Marketing Researcher Coordinators
...

如果我想匹配==,我不会得到好的结果,词干和词形还原也很难识别这种差异。
另一种选择是在两个字符串(which is discussed in this question)之间使用相似度度量,但这会非常耗时并且可能不是一个好方法,同样在这种方法中,确定阈值是另一个问题。
聪明人有想法吗?

【问题讨论】:

    标签: python machine-learning string-matching


    【解决方案1】:

    您可以使用Python包textdistance计算字符串之间的归一化相似度,只有当相似度高于某个阈值时才保留它们。

    import textdistance
    
    main_job = 'Marketing Research Coordinator'
    
    other_jobs = ['Market Researching Coordinator', 'Markets Research Coordinator', 
                  'Market Researches Coordinator', 'Marketing Research Coordinator', 
                  'Markets Researchers Coordinator', 'Market Researcher Coordinators',
                  'Marketing Researcher Coordinators', 'Marketing Researcher Executive',
                  'Senior Advertising Analyst']
    
    for job in other_jobs:
        distance = textdistance.jaccard.normalized_similarity(main_job, job)
        print(f'Similarity "{main_job}" & "{job}": {distance:.3f}')
    
    Similarity "Marketing Research Coordinator" & "Market Researching Coordinator": 1.000
    Similarity "Marketing Research Coordinator" & "Markets Research Coordinator": 0.871
    Similarity "Marketing Research Coordinator" & "Market Researches Coordinator": 0.844
    Similarity "Marketing Research Coordinator" & "Marketing Research Coordinator": 1.000
    Similarity "Marketing Research Coordinator" & "Markets Researchers Coordinator": 0.794
    Similarity "Marketing Research Coordinator" & "Market Researcher Coordinators": 0.818
    Similarity "Marketing Research Coordinator" & "Marketing Researcher Coordinators": 0.909
    Similarity "Marketing Research Coordinator" & "Marketing Researcher Executive": 0.579
    Similarity "Marketing Research Coordinator" & "Senior Advertising Analyst": 0.436
    

    看看最后两个例子。

    【讨论】:

      【解决方案2】:

      我不接受词干提取和词形还原不起作用!您可以标记您的输入。然后获取词干,并确保在营销的情况下,如果正确选择了语言(检查在你的词干包中正确选择了语言),你将获得市场。您还应该确保在 if 语句的两个元素上应用词干!

      如果有听写问题或小的差异,您可以使用Levenstein 包并接受比 T 相似的输入。

      示例:

      import nltk.stem.porter
      
      p_stemmer = PorterStemmer()
      print("the stem of marketing:",p_stemmer.stem('Marketing'))        
      print("the stem of marketing research:",p_stemmer.stem('Marketing Research'))
      

      结果如下:

      the stem of marketing: 'market' (correct)

      the stem of marketing research: 'marketing research' (not want we want)

      如您所见,如果未应用标记化,则词干分析器无法按预期工作。

      我建议将所有这些(标记化、词干提取和列文斯坦)结合起来。

      【讨论】:

      • 我不使用词干分析器,因为它有错误,例如它将verify 更改为verifi。但正如你所说,如果我对这两个问题都使用词干处理可能会得到解决。谢谢!。同时,p_stemmer.stem('Marketing Research') 不起作用,因为词干分析器将整个句子视为一个单词,所以它按原样返回。我们必须对句子中的每个单词进行词干处理并返回一个组合句子。
      • 是的,我写了那个例子来表明写一个字符串作为一个整体是行不通的。 :) 所以你应该逐字应用。是的,在两边都应用可以验证,然后你可以比较它们。别客气。 :) 如果有帮助,请为答案投票。谢谢
      • 哎呀,我没有看到你的这部分文字:“如果未应用标记化”。
      【解决方案3】:

      使用下面的正则表达式模式并检查职位是否匹配

      import re
      pattern = r'Market(\w*?) Research(\w*?) Coordinator'
      print('Enter job title')
      job_title = input()
      if re.search(pattern, job_title):
          print('Job title matching with Market Research Coordinator')
      else:
          print('Job title not matching with Market Research Coordinator')
      

      【讨论】:

        猜你喜欢
        • 2019-12-25
        • 1970-01-01
        • 1970-01-01
        • 2018-05-04
        • 1970-01-01
        • 2020-06-07
        • 2022-07-06
        • 1970-01-01
        • 2018-09-04
        相关资源
        最近更新 更多