import pandas as pd import math import jieba # 定义函数计算余弦相似度 def compute_xsd(ss1,ss2): stopwords = [] s1_cut = [i for i in jieba.cut(ss1, cut_all=True) if (i not in stopwords) and i != ' '] s2_cut = [i for i in jieba.cut(ss2, cut_all=True) if (i not in stopwords) and i != ' '] word_set = set(s1_cut).union(set(s2_cut)) word_dict = dict() i = 0 for word in word_set: word_dict[word] = i i += 1 s1_cut_code = [0] * len(word_dict) for word in s1_cut: s1_cut_code[word_dict[word]] += 1 s2_cut_code = [0] * len(word_dict) for word in s2_cut: s2_cut_code[word_dict[word]] += 1 sum = 0 sq1 = 0 sq2 = 0 for i in range(len(s1_cut_code)): sum += s1_cut_code[i] * s2_cut_code[i] sq1 += pow(s1_cut_code[i], 2) sq2 += pow(s2_cut_code[i], 2) try: result = round(float(sum) / (math.sqrt(sq1) * math.sqrt(sq2)), 3) except ZeroDivisionError: result = 0.0 return result # 定义两篇文章 text1 = '我喜欢打篮球' text2 = '篮球是我的爱好' # 定义空的DataFrame df_sim = pd.DataFrame(columns=['text1', 'text2', 'similarity']) # 计算两篇文章的相似度并存储到DataFrame中 for i in range(len(text1)): for j in range(len(text2)): sim = compute_xsd(text1[i], text2[j]) df_sim.loc[len(df_sim)] = [text1[i], text2[j], sim] # 输出DataFrame print(df_sim)以上代码,怎么计算出三个两篇文章三个相似度
时间: 2024-01-05 17:05:16 浏览: 78
这段代码是计算两篇文章的相似度,并将结果存储在一个DataFrame中。由于这里只有两篇文章,因此在循环中只需要进行一次计算,即计算text1和text2两个字符串的相似度。代码中的df_sim.loc[len(df_sim)] = [text1[i], text2[j], sim]是将计算结果存储在DataFrame中,其中text1[i]和text2[j]分别表示两篇文章,sim表示它们的相似度。由于只有一次计算,因此DataFrame中只有一行数据,其相似度就是存储在该行的'similarity'列中的值。你可以通过以下代码查看相似度的值:
```
print(df_sim['similarity'][0])
```
其中0表示第一行数据的索引,即唯一的一行数据。
阅读全文