用句向量法加余弦相似度判断两个文本的相似度,文本用txt存储,给出python代码示例
时间: 2024-04-23 16:27:47 浏览: 56
当使用句向量法结合余弦相似度来判断两个文本的相似度时,可以使用Python的文本处理库(如NLTK)和预训练的词向量模型(如Gensim)来实现。以下是一个示例代码:
```python
import nltk
from gensim.models import Word2Vec
from sklearn.metrics.pairwise import cosine_similarity
# 读取文本文件
def read_text_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
return text
# 对文本进行分词
def tokenize_text(text):
sentences = nltk.sent_tokenize(text)
word_tokens = [nltk.word_tokenize(sentence) for sentence in sentences]
return word_tokens
# 计算句子的句向量表示
def calculate_sentence_vector(word_tokens, word2vec_model):
sentence_vector = []
for tokens in word_tokens:
vectors = []
for token in tokens:
if token in word2vec_model.wv:
vectors.append(word2vec_model.wv[token])
if vectors:
sentence_vector.append(sum(vectors) / len(vectors))
return sentence_vector
# 计算两个句子的相似度(余弦相似度)
def calculate_similarity(sentence_vector1, sentence_vector2):
similarity_matrix = cosine_similarity(sentence_vector1, sentence_vector2)
return similarity_matrix[0][0]
# 主函数
def main():
# 加载预训练的词向量模型
word2vec_model = Word2Vec.load('your_word2vec_model_path')
# 读取文本文件
text1 = read_text_file('text1.txt')
text2 = read_text_file('text2.txt')
# 分词
word_tokens1 = tokenize_text(text1)
word_tokens2 = tokenize_text(text2)
# 计算句向量表示
sentence_vector1 = calculate_sentence_vector(word_tokens1, word2vec_model)
sentence_vector2 = calculate_sentence_vector(word_tokens2, word2vec_model)
# 计算相似度
similarity = calculate_similarity(sentence_vector1, sentence_vector2)
print('相似度:', similarity)
if __name__ == '__main__':
main()
```
在上述代码中,需要将"your_word2vec_model_path"替换为你自己训练或下载的词向量模型的文件路径。同时,需要将"text1.txt"和"text2.txt"替换为你要比较相似度的两个文本文件路径。
请确保已安装NLTK、Gensim和scikit-learn库,可以使用pip命令进行安装:
```
pip install nltk gensim scikit-learn
```
此代码示例将两个文本文件分别读取并进行分词处理,然后使用预训练的词向量模型计算句向量表示,最后通过余弦相似度计算两个句子的相似度。
阅读全文