通過計算兩個句子的相似度進行檔案命批量修改

2021-10-25 07:26:50 字數 4043 閱讀 3019

通過利用索引資訊,匹配索引文件中與文件庫中題目最相似的字串,並利用最相似的字串對文件庫中的文件進行重新命名。

|----pycharm python3.8

|----系統:windows

為了快速計算兩句話的相似度,且不考慮訓練模型;通過資料查詢,確定採用余弦匹配演算法,**如下:

檔案命名為 cosin_computer.py

import math

import re

def compute_cosine(text_a, text_b):

# 找單詞及詞頻

words1 = text_a.split(' ')

words2 = text_b.split(' ')

# print(words1)

words1_dict = {}

words2_dict = {}

for word in words1:

# word = word.strip(",.?!;")

word = re.sub('[^a-za-z]', '', word)

word = word.lower()

# print(word)

if word != '' and word in words1_dict:

num = words1_dict[word]

words1_dict[word] = num + 1

elif word != '':

words1_dict[word] = 1

else:

continue

for word in words2:

# word = word.strip(",.?!;")

word = re.sub('[^a-za-z]', '', word)

word = word.lower()

if word != '' and word in words2_dict:

num = words2_dict[word]

words2_dict[word] = num + 1

elif word != '':

words2_dict[word] = 1

else:

continue

# print(words1_dict)

# print(words2_dict)

# return true

dic1 = sorted(words1_dict.items(), key=lambda asd: asd[1], reverse=true)

dic2 = sorted(words2_dict.items(), key=lambda asd: asd[1], reverse=true)

# print(dic1)

# print(dic2)

# 得到詞向量

words_key =

for i in range(len(dic1)):

for i in range(len(dic2)):

if dic2[i][0] in words_key:

# print 'has_key', dic2[i][0]

pass

else: # 合併

# print(words_key)

vect1 =

vect2 =

for word in words_key:

if word in words1_dict:

else:

if word in words2_dict:

else:

# print(vect1)

# print(vect2)

# 計算余弦相似度

sum = 0

sq1 = 0

sq2 = 0

for i in range(len(vect1)):

sum += vect1[i] * vect2[i]

sq1 += pow(vect1[i], 2)

sq2 += pow(vect2[i], 2)

try:

result = round(float(sum) / (math.sqrt(sq1) * math.sqrt(sq2)), 2)

except zerodivisionerror:

result = 0.0

# print(result)

return result

import os

from py20201027_textprocess.cosin_computer import compute_cosine #根據自己的情況做調整

# 載入檔案

file = open('e:/f01_researches/r01_productservicesystem/pss09-會議文獻/cirp conference on industrial product-service systems/11th_sciencedirect_citations.txt','r',encoding='utf-8')

# 獲取所有行

lines = file.readlines()

line_count = len(lines)

print(line_count)

'''# 列印前10行

for i in range(1,line_count,11):

print(i,'-->',lines[i])

if i > 100:

break

'''file_root = 'e:/f01_researches/r01_productservicesystem/pss09-會議文獻/cirp conference on industrial product-service systems'

# 載入檔案列表

files = os.listdir(os.path.join(file_root,'11th'))

# 標題預處理

new_files =

for i in range(len(files)):

temp = files[i].split('-')

temp = temp[0:-1]

x = ' '.join(temp)

# 行預處理

new_lines =

for i in range(len(lines)):

temp = lines[i].split('-')

x = ' '.join(temp)

#for i in range(10):

# print("before: ", files[i], '|-->after: ', new_files[i])

count = 1

# 相似度計算

for i in range(1,line_count,11): #遍歷text中的每個題目

print('第',count,'-->',lines[i]) #列印當前行

max_sim = 0.

max_str_index = 0

print('\t\tsim: ',end='\t')

for j in range(len(new_files)):

sim = compute_cosine(lines[i],new_files[j])

print(sim, end='\t')

if sim > max_sim:

max_sim = sim

max_str_index = j

#print('\t',new_files[j],'\t','相似度:',sim)

print('\n\t\t相似度最高的為:',files[max_str_index],'\t最大相似度為:',max_sim)

count += 1

pytorch計算兩個特徵的余弦相似度

首先,我們要記住一點,兩個特徵的余弦相似度計算出來的範圍是 1,1 其實,對於兩個特徵,它們的余弦相似度就是兩個特徵在經過l2歸一化之後的矩陣內積。如下 import torch import torch.nn.functional as f 假設feature1為n c w h,feature2也...

如何求兩個序列的相似度

衡量兩個序列的相似度,可以用馬氏距離,歐氏距離等距離公式來度量。但對兩個字串,比如kitten與sitting的相似度是多少?如果是兩個等長字串,也可以用one hot對每個字母編碼,然後用馬氏 歐式距離也可以計算。但對不等長的兩個字串,怎麼計算相似度呢?更一般的說法,如何計算兩個不等長陣列的相似度...

對比兩個檔案相似度 余弦演算法

檔案a1 包含字元bi 的個數bin1,檔案a2 包含的字元bi 的個數bin2 利用余弦演算法 相似度 b1n1 b1n2 b2n1 b2n2 bin1 bin2 math.sqrt b1n1 2 b2n1 2 bin1 2 math.sqrt b1n2 2 b2n2 2 bin2 2 math....