栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/339228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号