我是靠谱客的博主 迷路冰棍,这篇文章主要介绍NLP—小任务一:文本相似度计算任务描述:,现在分享给大家,希望可以做个参考。

任务描述:

文本相似度计算

任务

  • 找出其中可能存在的重复项
  • 编号仅仅后4位不同
  • 文本描述相同或者相似

例如:
300030280004 油漆笔-[规格:红色,斑马]
300030280010 油漆笔-[规格:红色,斑马]

分词

  • 结巴分词
  • 其他分词方式

实现方式

  • 数据存到excel文档中
    例如在这里插入图片描述

  • python实现

实现思路:

  1. 先读取excel文件数据
  2. 先挑出一个需要对比的数据,用这个数据与所有的数据进行相似度比较
  3. 每次比较前先判断一下编号是否仅后四位不同
  4. 然后对比较的两组词进行结巴分词。
  5. 分词后使用杰卡德和最小编辑举例计算相似度
  6. 将相似度超过0.4的数据输出到csv表格中

贴出部分算法代码

# 杰卡德相似度计算

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

#最小编辑距离

复制代码
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
36
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—小任务一内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部