机器学习算法Python实现:tfidf 特征词提取及文本相似度分类

2023-11-19

# coding: utf-8
#本代码主要实现了对于商品名称根据tfidf提取特征词,然后基于已经训练好的word2vec模型,对每行商品的tfidf值大于某一阈值的特征词相似度匹配已经给定的商品类别。

import jieba
import jieba.posseg as pseg
import jieba.analyse
import pymssql
import xlwt
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, TfidfTransformer
import pandas as pd 
jieba.load_userdict('C:\\Users\\Desktop\\s_proj\\dict.txt') #导入自定义的分词词典

#连接数据库 
conn = pymssql.connect(host='1.1.1.1',user='username',password='password',database='database',charset='utf8')
cur = conn.cursor() 
sql='select distinct(column) from table' 
cur.execute(sql) 
listl=cur.fetchall()

#分词
words=[]
for word in listl:
    for i in word:
        seg_list = jieba.cut(i, cut_all=False)
        words.append(" ".join(seg_list))

#计算tfidf
tfidf_vectorizer = CountVectorizer(min_df=2,max_df = 0.8,token_pattern=u'(?u)\\b[^\\d\\W]\\w+\\b')
transformer=TfidfTransformer()
word_tfidf = tfidf_vectorizer.fit_transform(words)
tfidf=transformer.fit_transform(word_tfidf)
print(tfidf.shape)

#获取特征词
features=tfidf_vectorizer.get_feature_names()

#加载已训练好的word2vec模型
from gensim.models import word2vec
import logging
logging.basicConfig(format='%(asctime)s:%(levelname)s: %(message)s', level=logging.INFO)
model=gensim.models.KeyedVectors.load_word2vec_format('model_word.bin',binary=True)  

#打开要匹配相似度的商品类文本
f4=open('C:\\Users\\Desktop\\s_proj\\c.txt','r',encoding='utf-8',errors='ignore') 

#对商品类文本做文本处理
ff=[]
for j in f4.readlines():
    j=j.replace('\n','')
    ff.append(j)
print(len(ff))

#tfidf 稀疏矩阵
tfidf_tuple = tfidf.nonzero()
tfidf_rows = tfidf_tuple[0]
tfidf_columns = tfidf_tuple[1]
size = len(tfidf_columns)
print('nonzero.size=%s' % size)

# 将TF-IDF>=某一阈值d的数据存入字典,Key为电商索引。
product_dict = {}
for i in range(size):
    row = tfidf_rows[i]
    column = tfidf_columns[i]
    tfidf_value = tfidf[row,column]
    if tfidf_value <=0.4:
        continue
    key_words = product_dict.setdefault(row, []) 
    key_word = {}
    key_word["key_word"]=features[column]
    key_word["tfidf_value"]=tfidf_value
    key_words.append(key_word)
print('product_dict.len=%s' % len(product_dict))

#tfidf提取的所有features计算word2vec相似度
f=open('gabbage.txt','w',encoding='utf-8',errors='ignore') 
word2vec={}
for i in range(size):
    column = tfidf_columns[i]
    cate=word2vec.setdefault(features[column],[])
    for jj in ff:
        try:
            y1 = model.wv.similarity(features[column],jj) 
            insert={"category_name":jj,"similarity":y1}
            cate.append(insert)
        except:
            f.write('')
print('word2vec.len=%s' % len(word2vec))
f.close()

#相似度值排序
import operator
for k,v in word2vec.items():
    new_dict_list=[]
    s=sorted(v,key=operator.itemgetter("similarity"),reverse=True)
    word2vec[k]=s
    for w in word2vec[k]:
        if w not in new_dict_list:
            new_dict_list.append(w)
    word2vec[k]=new_dict_list

#创建满足某一阈值的tfidf的特征词的相似度的词典
l=[ll for l in product_dict.keys()for ll in product_dict[l]]
for k in word2vec.keys():
    for m in l:
        if m["key_word"]==k:
            m["category_names"]=word2vec[k]
print(len(product_dict))

# 将字典转为数组,索引转为商品名称。
result=[r for r in listl]
product_list = []
for i in product_dict:
    product = {}
    product['product'] = result[i][0]
    product['key_words'] = product_dict[i]
    product_list.append(product)
print('product_list.len=%s' % len(product_list))
print(len(product_list))


#匹配填充tfidf值满足某一阈值的相似度词典
f=open('gabbage.txt','w',encoding='utf-8',errors='ignore') 
# 将TF-IDF>=0。4的数据存入字典,Key为电商索引。
product_dict = {}
for i in range(size):
    row = tfidf_rows[i]
    column = tfidf_columns[i]
    tfidf_value = tfidf[row,column]
    if tfidf_value <=0.4:
        continue
    key_words = product_dict.setdefault(row, [])
    for jj in ff:
        try:
            y1 = model.wv.similarity(features[column],jj)  
            insert={'key_word':features[column],'tfidf_value':tfidf_value,'category_names':{'goods_name':jj,'word2vec':y1}}
            key_words.append(insert)
        except:
            f.write('')
f.close()

#将结果写入json
import json
t=open('word2vec_result1.txt','w',encoding='utf-8',errors='ignore')
json_string = json.dumps(product_list[0:11]).encode('utf-8').decode('unicode_escape')
print(json_string)
t.write(json_string)
t.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习算法Python实现:tfidf 特征词提取及文本相似度分类 的相关文章

随机推荐

  • javah用法

    正确做法 进入到包com所在的目录 是java文件所在的包 不是class javah classpath jni com jnitest MainActivity 如果执行这个 javah jni com example zndktest
  • Git中添加文件.gitignore作用

    添加文件 gitignore作用 作用 我们使用Git时 经常看到 gitignore文件 具体有什么作用呢 作用 该文件用来描述Git仓库中不需要管理的文件和目录 一般可以在初始化时自动生成 gitignore文件 如果初始化是忘记加入此
  • 虚拟化、虚拟机等概念理解

    虚拟化 定义 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 在一台计算机上同时运行多个逻辑计算机 每个逻辑计算机可运行不同的操作系统 并且应用程序都可以在相互独立的空间内运行而不受影响 从而显著提高计算机的工作效率 软件 完全虚拟 V
  • Qt表格分页,跳转,首尾页

    简介 1 使用QTableWidget实现了首页 上下页切换 尾页 以及跳转 上代码 widget h ifndef WIDGET H define WIDGET H include
  • unity 使用vrtk4的插件 打包htv vive VR客户端包,手柄不生效

    背景 目的 u3d使用vrtk开发pico应用 vrtk是为了到时候无缝衔接后续要买的htc vive pro 2 先导入了tilia importer 也就是vrtk4 0 根据教程模块化使用功能 和pico官网下的 PICO Unity
  • Dom事件

    1 onclick 点击事件 2 ondbclick 双击事件 3 onmousedown 鼠标按下事件 4 onmouseup 鼠标松开事件 5 onmouseenter 鼠标移入事件 不支持冒泡 只触发一次 6 onmouseover
  • Linux 磁盘与文件系统管理(鸟哥私房菜)

    本文来自 http vbird dic ksu edu tw linux basic 0230filesystem php 第八章 Linux 磁盘与文件系统管理 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统 每个分割槽不可太大也
  • JAVA用到的环境变量,JAVA_HOME、CLASSPATH、PATH

    Windows下JAVA用到的环境变量主要有3个 JAVA HOME CLASSPATH PATH JAVA HOME指向的是JDK的安装路径 如C JDK 1 4 2 在这路径下你应该能够找到bin lib等目录 值得一提的是 JDK的安
  • vue3学习笔记(1)script引入vue3实现简单应用

    Vue3专栏入口 目录 一 脚本引入简单使用 二 双向绑定的基本表现 一 脚本引入简单使用 script引入 简单使用实现数据渲染 div h1 counter num h1 div
  • 人工智能学习(一)newff函数介绍

    以下是matlab中的newff函数说明 不是neurolab中的newff 两者的参数不同 newff函数 指的是训练前馈网络的第一步是建立网络对象 实质是newff函数的参数 newff函数的格式为 net newff PR S1 S2
  • Linux服务器装mysql数据库并且连接数据库(详细教程)(阿里云)

    废话不多说 直接上教程 1 首先执行如下命令 更新YUM源 rpm Uvh http dev mysql com get mysql57 community release el7 9 noarch rpm 执行完上面命令后如果出现Peer
  • Verilog学习记录4——Verilog +: / -:语法

    Verilog 语法 看到这个语法的时候是在分析 IP AXI4 STREAM DATA FIFO的example时碰见的 然后查阅了资料 做出如下理解 变量的定义可以分为大端和小端 由于实际使用中变量常定义成大端 所以这里对小端不进行分析
  • 【华为OD机试】分糖果【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 小明从糖果盒中随意抓一把糖果 每次小明会取出一半的糖果分给同学们 当糖果不能平均分配时 小明可以选择从糖果盒中 假设盒中糖果足够 取出一个糖果或放回一个糖果 小明最少
  • VS-code出现注释乱码以及VS调试过程中出现汉字乱码问题

    文章目录 VS VS code 1 前言 2 方法 VS Notepad 方法 VS VS code 1 前言 Visual Studio Code 简称VS code 是如今我们常用的一款编辑器 但是可能一些用户会需要其他软件进行调试等
  • 一次线上生产系统内存泄漏排查与优化实践

    今天给大家分享一个我们之前基于dubbo开发一个线上系统时候遇到的内存泄漏生产问题的排查与优化实践经验 相信对于大家多看一些类似的案例 以后对于大家自己在线上系统遇到各种生产问题的时候 进行排查和优化的思路会有很大的启发 内存泄漏问题发生背
  • begin to drop messages due to rate-limiting

    对于syslog保存的日志会有很多重要信息 但是一旦打印的日志数量超过设置的阈值 就会丢掉 imuxsock pid 48 begin to drop messages due to rate limiting 这是在调试时不愿看到的 可以
  • 【论文笔记系列】AutoML:A Survey of State-of-the-art (上)

    之前已经发过一篇文章来介绍我写的AutoML综述 最近把文章内容做了更新 所以这篇稍微细致地介绍一下 由于篇幅有限 下面介绍的方法中涉及到的细节感兴趣的可以移步到论文中查看 论文地址 https arxiv org abs 1908 007
  • yolo 车辆测距+车辆识别+单目测距(双目测距)

    基于yolo目标检测算法实现的车前道路中的车辆和行人检测 并且可以估测出目标与本车之间的距离 一 视频展示 yolo车距1 订阅专栏获得源码 提供完整代码 无需看下文 二 单目测距原理 图中有一个车辆 且车辆在地面上 其接地点Q必定在地面上
  • 用KNN(K近邻算法)和ANN(人工神经网络)建立预测模型

    数据 输入 32 维的向量 输出一个值 有151组这样的数据 目的 用这样一组数据建立一个预测模型 输入32维的向量就能预测一个值 代码部分 1 导入工具包 在import pandas as pd import seaborn as sn
  • 机器学习算法Python实现:tfidf 特征词提取及文本相似度分类

    coding utf 8 本代码主要实现了对于商品名称根据tfidf提取特征词 然后基于已经训练好的word2vec模型 对每行商品的tfidf值大于某一阈值的特征词相似度匹配已经给定的商品类别 import jieba import ji