版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013421629/article/details/82501028
算法融合:
- 1、基于word2vec的词语相似度计算模型
- 2、标签别名语义相似度匹配算法
本算法是两种算法融合产生的效果,效果还不错:
# -*- encoding=utf-8 -*-
# 载包
from gensim.models import Word2Vec
import warnings
warnings.filterwarnings("ignore")
warnings.filterwarnings(action='ignore',category=UserWarning,module='gensim')
from itertools import combinations
import pandas as pd
import time
time1=time.time()
# 加载word2vec训练好的模型
model = Word2Vec.load("F:/下载/content/word_embedding_20180907")
# 加载别名数据集
data0 = pd.read_excel('C:/Users/xiaohu/Desktop/文本挖掘/标签语义相近发现合并算法/data/kktribe_tag_1.xlsx')
# 自定义获取近义词函数
def get_most_similar_list(string1):
# 使用模型
try:
items = model.most_similar(string1)
key=[]
value=[]
for i, j in items:
# print(i, j)
key.append(i)
value.append(j)
result=pd.DataFrame({"key":key,"value":value})
print(result)
except:
print('找不到该单词的近义词!')
pass
return result
#定义一个标签有别名的合并函数
def combine_tag_name_alis(data1,data2):
"""
:param data1: 别名集
:param data2:标签集
:return: 合并后的结果集
"""
# 筛选数据,找到有别名的标签
data3 = data1[data1['alias'].isin(data2['key'])]
data4=data2[~data2['key'].isin(data3['alias'])]
#语义相似标签去重
name1= list(set(data3['name']))
name2=list(set(data4['key']))
name3=name1+name2
name4=list(set(name3))
return name4
# 自定义标签去重函数
def get_similarity(data2):
data3 = set(data2['key'])
tag_drop_list = []
# 计算两个词语相似度
for i, j in combinations(data3, 2):
try:
similary = model.similarity(i, j)
# print(i, j, similary)
# 如果两个词语相似度>0.6,则合并为一个词语
if similary >0.75:
print(i,j,similary)
if len(i) < len(j):
tag_drop_list.append(i)
if len(i) > len(j):
tag_drop_list.append(j)
if len(i) == len(j):
tag_drop_list.append(i)
else:
m1 = set([i, j])
new_data = pd.DataFrame({'key': [i, j]})
# 合并之后的标签集
name = combine_tag_name_alis(data0, new_data)
# print(name)
if len(name) == 1:
m2 = name
m2 = set(m2)
m3 = (m1 - m2)
m3_1 = m3.pop()
tag_drop_list.append(m3_1)
except:
m1=set([i,j])
new_data = pd.DataFrame({'key': [i,j]})
# 合并之后的标签集
name = combine_tag_name_alis(data0, new_data)
# print(name)
if len(name)==1:
m2=name
m2=set(m2)
m3=(m1-m2)
m3_1=m3.pop()
tag_drop_list.append(m3_1)
# print(tag_drop_list)
# 集合删除找出的相似词
data4 =set(tag_drop_list)
data5 = data3 - data4
print("最终结果集:")
# print(data5)
return data5
if __name__ == '__main__':
# 读取标签数据集
data2 = pd.DataFrame({'key': ['詹皇', '小皇帝','辣鸡','垃圾','高倍','高赔','詹姆斯','竞彩足球','C罗','总裁']})
result=get_similarity(data2)
print(result)
詹皇 詹姆斯 0.8157515026814683
垃圾 辣鸡 0.9018741525236081
高赔 高倍 0.7765882760905136
最终结果集:
{'辣鸡', '詹姆斯', 'C罗', '高倍', '竞彩足球'}
Process finished with exit code 0