Java 职位最接近匹配

Java 职位最接近匹配,java,nlp,extraction,data-analysis,summarization,Java,Nlp,Extraction,Data Analysis,Summarization,我有一个已知职位的主列表,并在寻找从搜索词中提取相同职位的方法。例如: 搜索职位:高级数字营销专家 摘录至:高级数字营销 搜索职位:零售店内销售助理;全职 摘录至:零售销售助理 因此,我尝试提取有助于清理搜索的查询的参数 1) 数据库中2个令牌的出现。(对术语之间的关联程度进行数学评估) 例如: t01->t0 or t1 Senior || java--->226374 t02->t0 or t2 Senior || software---&

我有一个已知职位的主列表,并在寻找从搜索词中提取相同职位的方法。例如:

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

搜索职位:零售店内销售助理;全职
摘录至:零售销售助理

因此,我尝试提取有助于清理搜索的查询的参数

1) 数据库中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
t0->    Senior----->55042636  
t1->    java----->1655805
t2->    software----->26136204
t3->    engineer----->81574912

2) 在整个数据库中每次取1的令牌的出现。 例如:

 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
t0->    Senior----->55042636  
t1->    java----->1655805
t2->    software----->26136204
t3->    engineer----->81574912
3) 我计算了相关令牌的总和,并设置了5%的最小阈值,这给了我以下输出,即(txy*100)/total>5

我的输出:高级软件工程师

任何人都有过类似的项目或进一步改进的想法吗?

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

  • 定义向量空间的维度(脱机)
  • 术语列表的长度
    n
    是向量空间的大小

  • 将主列表中的每个职务与向量相关联(脱机)
  • 向量列表=[]
    向量=[]
    填充(向量,0,n-1,0)//初始化为n个零
    对于主列表中的所有职务:
    对于当前职务中的所有单词:
    规范化(当前单词)//例如小写等。
    术语索引=索引(当前单词、术语列表)
    向量[术语索引]++
    规格化(向量)//将向量缩放为长度=1
    添加(向量,向量列表)
    
  • 将每个搜索
    查询
    转换为向量
    (在线)
  • 这与2下的代码完全相同,只是您只有一个for循环(内部循环),在该循环中,您迭代查询中的单词,而不是主列表职务的单词。此外,出于明显的原因,您不需要
    向量列表

    结果是一个规范化的
    查询向量

  • 使用余弦相似性测量给定的
    查询向量的职位相关性
    (在线)
  • 相似性向量=[] 对于矢量列表中的所有职务矢量: 相似性=点积(查询向量、职务向量) 添加(相似性、相似性向量)
    结果是查询和主列表的每个条目之间的相似性值,存储在
    相似性向量中


    这是一个非常通用的模型,其吸引力在于它的简单性。然而,考虑到你的职称通常只包含少量的单词,可能在每个职称中只出现一次,因此它是否是手头工作的一个非常好的模式还存在争议。但是你可以试一试。

    我不太清楚我是否理解。您是否假设查询始终是主列表中某个条目的超集?@Thomas否它可能根本不是超集。示例:搜索到的职位名称:纽约全职Java开发人员摘录到:数据库中的Java开发人员我没有任何职位名称包含“纽约”一词,因此很容易删除。您是否考虑过使用lucene或elasticsearch之类的全文搜索引擎?这可能会比database@bedrin谢谢你的建议。我们将尝试一下。你最终是如何解决的?经过几次试验后,我发现Lucene适合我想要的结果。它在内部使用向量空间模型,所以我发现使用它比自己编写代码更容易。希望对此有更多建议。关于解决这个问题的方法,可能还有另一个建议:)