我有已知职位的主列表,并寻找从搜索的术语中提取相同内容的方法。例如:
搜索职位:高级数字营销专家
摘录为:高级数字营销
搜索职位:零售店内销售助理;全职
提取至:零售销售助理
所以我尝试提取有助于清理搜索查询的参数。
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
2)在整个数据库中出现令牌1。 示例:
t0-> Senior----->55042636
t1-> java----->1655805
t2-> software----->26136204
t3-> engineer----->81574912
3)我拿出相关代币的总和,并将最小阈值设为5%,并给出以下输出,即(txy * 100)/ total> 5
我的输出:高级软件工程师
任何人都有类似项目或想法的经验,以进一步改进?
答案 0 :(得分:1)
确定查询与列表条目之间相似性的一种标准方法是vector space model。粗略地说,您可以通过以下步骤来构建这样的模型:
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
是矢量空间的大小。
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)
query
转换为矢量(在线) 这与2下的代码完全相同,只是你只有一个for循环(内部代码),你在其中迭代查询中的单词而不是主列表作业标题的单词。此外,由于显而易见的原因,您不需要vector-list
。
结果是标准化的query-vector
。
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
中。
这是一个非常通用的模型,其吸引力在于其简洁性。然而,考虑到你的职称通常只包含少数几个可能只在每个职位中出现一次的单词,这对于手头的工作来说是否是一个非常好的模型是值得商榷的。但你可以尝试一下。