任务描述:
文本相似度计算
任务
- 找出其中可能存在的重复项
- 编号仅仅后4位不同
- 文本描述相同或者相似
例如:
300030280004 油漆笔-[规格:红色,斑马]
300030280010 油漆笔-[规格:红色,斑马]
分词
- 结巴分词
- 其他分词方式
实现方式
-
数据存到excel文档中
例如 -
python实现
实现思路:
- 先读取excel文件数据
- 先挑出一个需要对比的数据,用这个数据与所有的数据进行相似度比较
- 每次比较前先判断一下编号是否仅后四位不同
- 然后对比较的两组词进行结巴分词。
- 分词后使用杰卡德和最小编辑举例计算相似度
- 将相似度超过0.4的数据输出到csv表格中
贴出部分算法代码
# 杰卡德相似度计算
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18def 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
#最小编辑距离
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36def 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—小任务一内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复