你好 我想要一段python代码 我给定中文句子 能够帮我在列表中找出语义最相近的前三条句子
时间: 2024-04-03 09:36:55 浏览: 78
好的,你可以使用以下代码实现该功能,其中使用的是gensim库中的Word2Vec模型:
```python
import jieba
import gensim
# 加载预训练的Word2Vec模型
model = gensim.models.Word2Vec.load('your_model_path')
# 定义要查找相似句子的列表
sentences = ['第一句话', '第二句话', '第三句话', '第四句话', '第五句话']
# 分词并去除停用词
stopwords = ['的', '了', '是', '我', '你', '他', '她', '它', '有', '在', '和', '就', '这', '也']
sentences = [[word for word in jieba.cut(sentence) if word not in stopwords] for sentence in sentences]
# 将每个句子转化为词向量的平均值
sentence_vectors = []
for sentence in sentences:
vector = []
for word in sentence:
if word in model.wv.vocab:
vector.append(model.wv[word])
if vector:
sentence_vectors.append(sum(vector) / len(vector))
# 计算每个句子与其他句子的相似度
similarities = []
for i, vector in enumerate(sentence_vectors):
similarity = []
for j, v in enumerate(sentence_vectors):
if i == j:
similarity.append(0)
else:
similarity.append(model.wv.cosine_similarities(vector, [v])[0])
similarities.append(similarity)
# 找出与每个句子最相似的前三个句子
for i, similarity in enumerate(similarities):
print('与第{}句话最相似的前三句话为:'.format(i+1))
for index in sorted(range(len(similarity)), key=lambda i: similarity[i], reverse=True)[1:4]:
print(' - ' + sentences[index])
```
需要注意的是,这段代码中使用的是预训练的Word2Vec模型,如果你没有自己的预训练模型,可以使用现成的预训练模型,例如Chinese Word Vectors(https://github.com/Embedding/Chinese-Word-Vectors)。同时,代码中的停用词表和模型路径需要根据实际情况进行修改。
阅读全文