最接近的职位名称

时间:2015-01-20 08:49:32

标签: java nlp extraction data-analysis summarization

我有已知职位的主列表,并寻找从搜索的术语中提取相同内容的方法。例如:

搜索职位:高级数字营销专家
摘录为:高级数字营销

搜索职位:零售店内销售助理;全职
提取至:零售销售助理

所以我尝试提取有助于清理搜索查询的参数。

1)db中出现2个令牌。 (以获得相互关联的术语数量的数学评估) 示例:

 t01->t0 or t1        Senior || java--->226374 
 t02->t0 or t2        Senior || software--->2566450 
 t03->t0 or t3        Senior || engineer--->7220787 
 t12->t1 or t2        java || software--->315397
 t13->t1 or t3        java || engineer--->407682
 t23->t2 or t3        software || engineer--->11533495

 total =t01+t02+t03+t12+t13+t23

enter image description here

2)在整个数据库中出现令牌1。 示例:

t0->    Senior----->55042636  
t1->    java----->1655805
t2->    software----->26136204
t3->    engineer----->81574912
3)我拿出相关代币的总和,并将最小阈值设为5%,并给出以下输出,即(txy * 100)/ total> 5

我的输出:高级软件工程师
任何人都有类似项目或想法的经验,以进一步改进?

1 个答案:

答案 0 :(得分:1)

确定查询与列表条目之间相似性的一种标准方法是vector space model。粗略地说,您可以通过以下步骤来构建这样的模型:

  1. 定义向量空间的维度(离线)
  2. term-list = []
    for-all job titles in your master list:
        for-all words in the current job-title:
            canonicalize(current-word)  // e.g. to-lower-case, etc.
            if not contains(term-list, current-word):
                add(current-word, term-list)
    sort(term-list)
    n = size(term-list)
    

    n的长度term-list是矢量空间的大小。

    1. 将主列表中的每个职位名称与向量(离线)
    2. 相关联
      vector-list = []
      vector = []
      fill(vector, 0, n-1, 0) // initialize to n zeros
      for-all job titles in your master list:
          for-all words in the current job-title:
              canonicalize(current-word)  // e.g. to-lower-case, etc.
              term-index = index-of(current-word, term-list)
              vector[term-index]++
      normalize(vector) // scale vector to length = 1
      add(vector, vector-list)
      
      1. 将每个搜索query转换为矢量(在线)
      2. 这与2下的代码完全相同,只是你只有一个for循环(内部代码),你在其中迭代查询中的单词而不是主列表作业标题的单词。此外,由于显而易见的原因,您不需要vector-list

        结果是标准化的query-vector

        1. 使用余弦相似度(在线)
        2. 衡量query-vector作业的相关性
          similarities-vector = []
          for-all job-title vectors in vector-list:
              similarity = dotProduct(query-vector, job-title-vector)
              add(similarity, similarities-vector)
          

          结果是查询与主列表的每个条目之间的相似性值,存储在similarities-vector中。

          这是一个非常通用的模型,其吸引力在于其简洁性。然而,考虑到你的职称通常只包含少数几个可能只在每个职位中出现一次的单词,这对于手头的工作来说是否是一个非常好的模型是值得商榷的。但你可以尝试一下。