概述
任务描述:
文本相似度计算
任务
- 找出其中可能存在的重复项
- 编号仅仅后4位不同
- 文本描述相同或者相似
例如:
300030280004 油漆笔-[规格:红色,斑马]
300030280010 油漆笔-[规格:红色,斑马]
分词
- 结巴分词
- 其他分词方式
实现方式
-
数据存到excel文档中
例如 -
python实现
实现思路:
- 先读取excel文件数据
- 先挑出一个需要对比的数据,用这个数据与所有的数据进行相似度比较
- 每次比较前先判断一下编号是否仅后四位不同
- 然后对比较的两组词进行结巴分词。
- 分词后使用杰卡德和最小编辑举例计算相似度
- 将相似度超过0.4的数据输出到csv表格中
贴出部分算法代码
# 杰卡德相似度计算
def similarity_jacard(set1, set2):
"""
杰卡德相似度,相同则为1
similarity=len(A and B)/len(A or B)
0<=similarity<=1
:param set1: set
:param set2: set
:return: float
"""
similarity=0
try:
if len(set1 | set2)==0:
return similarity
similarity=float(len(set1 & set2) / len(set1 | set2))
except:
print("division by error")
return similarity
#最小编辑距离
def minDistance(word1, word2):
"""
最小编辑距离(Levenshtein)实现
:param word1: str
:param word2: str
:return: int 返回两个字符串的距离
"""
if not word1:
return len(word2 or '') or 0
if not word2:
return len(word1 or '') or 0
size1 = len(word1)
size2 = len(word2)
last = 0
tmp = [i for i in range(size2 + 1)]
# print(tmp)
value = None
for i in range(size1):
tmp[0] = i + 1
last = i
# print word1[i], last, tmp
for j in range(size2):
if word1[i] == word2[j]:
value = last
else:
value = 1 + min(last, tmp[j], tmp[j + 1])
# print(last, tmp[j], tmp[j + 1], value)
last = tmp[j+1]
tmp[j+1] = value
# print(tmp)
return value
最后
以上就是迷路冰棍为你收集整理的NLP—小任务一:文本相似度计算任务描述:的全部内容,希望文章能够帮你解决NLP—小任务一:文本相似度计算任务描述:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复