python/nimport pandas as pd/nimport re/nfrom collections import Counter/nimport math/n/ndef text_similarity(text1: str, text2: str, n: int) -> float:/n '''/n 计算文本相似度/n :param text1: 文本1/n :param text2: 文本2/n :param n: 子串长度/n :return: 相似度/n '''/n def n_gram(text: str, n: int) -> list:/n '''/n 将文本切分成长度为n的子串/n '''/n text = re.sub(r'[^/w/s]', '', text)/n text = text.lower()/n words = text.split()/n ngrams = []/n for word in words:/n for i in range(len(word)-n+1):/n ngrams.append(word[i:i+n])/n return ngrams/n/n def cosine_similarity(vec1: dict, vec2: dict) -> float:/n '''/n 计算余弦相似度/n '''/n intersection = set(vec1.keys()) & set(vec2.keys())/n numerator = sum([vec1[x] * vec2[x] for x in intersection])/n/n sum1 = sum([vec1[x]**2 for x in vec1.keys()])/n sum2 = sum([vec2[x]**2 for x in vec2.keys()])/n denominator = math.sqrt(sum1) * math.sqrt(sum2)/n/n if not denominator:/n return 0.0/n else:/n return float(numerator) / denominator/n/n ngrams1 = n_gram(text1, n)/n ngrams2 = n_gram(text2, n)/n vec1 = Counter(ngrams1)/n vec2 = Counter(ngrams2)/n similarity = cosine_similarity(vec1, vec2)/n if similarity != 0:/n similarity = 1/n return similarity/n/n/nmax_salary = 8000/nb = 7000/n/nif max_salary > b:/n similarity = 1 / math.log(max_salary - b + 1)/n print('最高薪资大于指定值,相似度为:', similarity)/nelse:/n similarity = 0/n print('最高薪资小于等于指定值,相似度为:', similarity)/n/n/nmin_salary = 5000/na = 4000/n/nif min_salary > a:/n similarity = 1 / math.log(min_salary - a + 1)/n print('最低薪资大于指定值,相似度为:', similarity)/nelse:/n similarity = 0/n print('最低薪资小于等于指定值,相似度为:', similarity)/n/n/ndf1 = pd.read_excel(r'C:/Users/carlD/result1-1.xlsx')/ndf2 = pd.read_excel(r'C:/Users/carlD/result1-2.xlsx')/n/nsimilarity_df = pd.DataFrame(columns=['A1', 'B1', 'A2', 'B2', 'Similarity'])/n/nfor i in range(len(df1)):/n text1 = str(df1.loc[i, 'A']) + ' ' + str(df1.loc[i, 'B'])/n for j in range(len(df2)):/n text2 = str(df2.loc[j, 'A']) + ' ' + str(df2.loc[j, 'B'])/n similarity = text_similarity(text1, text2, 2)/n similarity_df.loc[len(similarity_df)] = [df1.loc[i, 'A'], df1.loc[i, 'B'], df2.loc[j, 'A'], df2.loc[j, 'B'],/n similarity]/n/nsimilarity_df.to_excel(r'C:/Users/carlD/result3-1.xlsx', index=False)/n

文本和数值相似度计算 Python 代码

原文地址: https://www.cveoy.top/t/topic/nIwe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录