吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1262|回复: 17
收起左侧

[求助] Python计算项目名称相似度 (已解决 附解决方案)

[复制链接]
Sen 发表于 2022-10-26 09:49
本帖最后由 Sen 于 2022-10-26 10:41 编辑

工作中需要统计很多项目之间的关联关系

目前想先通过项目名称匹配一下名字相似的项目


[Python] 纯文本查看 复制代码
import jieba
from gensim import corpora,models,similarities

doc0 = "2022年跨区购售合同与输电合同"
doc1 = "科研成果年报汇编相关工作"
doc2 = "北京是一个好地方"
doc3 = "上海好吃的在哪里"
doc4 = "第三季度经济运行分析工作"
doc5 = "上海是好地方"
doc6 = "上海路和上海人"
doc7 = "喜欢小吃"
doc8 = "2021年跨区购售合同与输电合同"

all_doc = []
all_doc.append(doc0)
all_doc.append(doc1)
all_doc.append(doc2)
all_doc.append(doc3)
all_doc.append(doc4)
all_doc.append(doc5)
all_doc.append(doc6)
all_doc.append(doc7)
all_doc.append(doc8)

result = []

for doc in all_doc:
    
    count_dist = {}
    for word in jieba.cut(doc):
        # 循环所有项目
        for tmp_doc in all_doc:
            count_dist[tmp_doc] = 0;
            for tmp_word in jieba.cut(tmp_doc):
                # 如果这个词存在当前项目, 标记+1
                if word == tmp_word:
                    print(doc, tmp_doc, word, tmp_word)
                    count_dist[tmp_doc] = count_dist[tmp_doc] + 1;
            if count_dist[tmp_doc] < 2 :
                del count_dist[tmp_doc]
        #print(tmp_data)
    print(count_dist)
print(count_dist)


接下来看网上的案例是要计算模型库, 我想跳过这一步

直接去匹配每个项目之间的词语重复次数, 然后输出出来

大佬们有没有简单点的方法


方案:
[Python] 纯文本查看 复制代码
from fuzzywuzzy import process
 
 
def pipeiMH(datas, testTxt):
    dataList = datas.splitlines()
    
    print(testTxt, process.extract(testTxt, dataList))
    #return process.extractOne(testTxt, dataList)
 
 
datas = '''
2022年跨区购售合同与输电合同
2024年不跨区购买合同与输电合同
科研成果年报汇编相关工作
北京是一个好地方
上海好吃的在哪里
第三季度经济运行分析工作
上海是好地方
上海路和上海人
喜欢小吃'''
 
testList = ['我喜欢上海的小吃', '购售合同', '科研年报', '第三经济分析', '2021年跨区购售合同与输电合同']
 
for testTxt in testList:
    pipeiMH(datas, testTxt)
    # res, n = pipeiMH(datas, testTxt)
    #print(f'{testTxt}\t匹配结果:{res}\t相似度:{n}')

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fxwl 发表于 2022-10-26 10:02
用jieba分词分词计算词语的出现频次?
 楼主| Sen 发表于 2022-10-26 10:03
fxwl 发表于 2022-10-26 10:02
用jieba分词分词计算词语的出现频次?

算每个项目名称里面的词, 在其他项目名称中词语出现的频率
wkdxz 发表于 2022-10-26 10:15
本帖最后由 wkdxz 于 2022-10-26 10:16 编辑

最近在研究模糊匹配,楼主看看这个代码改改能用吗?

[Python] 纯文本查看 复制代码
from fuzzywuzzy import process


def pipeiMH(datas, testTxt):
    dataList = datas.splitlines()
    return process.extractOne(testTxt, dataList)


datas = '''
2022年跨区购售合同与输电合同
科研成果年报汇编相关工作
北京是一个好地方
上海好吃的在哪里
第三季度经济运行分析工作
上海是好地方
上海路和上海人
喜欢小吃'''

testList = ['我喜欢上海的小吃', '购售合同', '科研年报', '第三经济分析']

for testTxt in testList:
    res, n = pipeiMH(datas, testTxt)
    print(f'{testTxt}\t匹配结果:{res}\t相似度:{n}')

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
Sen + 2 + 1 用心讨论,共获提升!

查看全部评分

chinaqin 发表于 2022-10-26 10:22
这几天我刚好也在研究python下的文本相识度比较,我看了网上有很多涉及到用余弦来搞的
 楼主| Sen 发表于 2022-10-26 10:30
wkdxz 发表于 2022-10-26 10:15
最近在研究模糊匹配,楼主看看这个代码改改能用吗?

[mw_shl_code=python,true]from fuzzywuzzy import  ...

强!学到了, 多谢
yep96 发表于 2022-10-26 10:30
想加速的话可以用矩阵,将每个词语映射成一个数字,就成了multi-hot的向量,算起来会快一些。其实也就是1-gram的bleu,用库(from nltk.translate.bleu_score import sentence_bleu)可能也会更快
不过我觉得lz可以换一种计算相似度的方法,可以参考深度学习的文本生成任务 https://blog.csdn.net/yangyanbao8389/article/details/121455709

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Sen + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| Sen 发表于 2022-10-26 10:32
本帖最后由 Sen 于 2022-10-26 10:34 编辑
wkdxz 发表于 2022-10-26 10:15
最近在研究模糊匹配,楼主看看这个代码改改能用吗?

[mw_shl_code=python,true]from fuzzywuzzy import  ...

堪称完美, 下午上会不用着急了  多谢啦
 楼主| Sen 发表于 2022-10-26 10:33
yep96 发表于 2022-10-26 10:30
想加速的话可以用矩阵,将每个词语映射成一个数字,就成了multi-hot的向量,算起来会快一些。其实也就是1-g ...

多谢, 我抽空研究下, 下午开会要用, 我先用笨办法试一试
wkdxz 发表于 2022-10-26 10:37
Sen 发表于 2022-10-26 10:32
堪称完美, 下午上会不用着急了  多谢啦

这个库还有其他方法,可以返回多个相似结果和相似度的,可以试一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表