NLP—小任务一:文本相似度计算

任务描述:

文本相似度计算

任务

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

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

分词

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

实现方式

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

  • python实现

实现思路:

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

猜你喜欢

转载自blog.csdn.net/qq_39740279/article/details/120869648