使用sklearn 计算文本余弦相似度

1   sklearn的TfidfVectorizer() 方法的参数解释

2  输入数据格式:一个列表,列表中的每个元素代表一个文本。每个文本分词后的词语组成的一个字符串 代表该文本。

    生成的模型和tfidf矩阵分别保存。

import pandas as pd
from sklearn.externals import joblib
from scipy import sparse
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
df = pd.read_csv("doc/traindata.csv",delimiter='\t',encoding='utf-8')
train = []
for i in range(len(df["content"])):
    line = str((df["content"][i]))
    #line = line.split()
    # for word in line:
    #     words +=word
    train.append(line)
print(len(train))
# 文档频率的高于0.9的词语忽视,低于在2个文档中出现的忽视。
vec = TfidfVectorizer(max_df=0.9,min_df=2,dtype=np.float64)
# 生成训练数据的tfidf矩阵,矩阵每行代表一个样本的tfidf向量。
train_tfidf = vec.fit_transform(train)
print(vec.vocabulary_)
#保存tfidf矩阵
sparse.save_npz('./doc/train_tfidf.npz', train_tfidf)  #保存
#保存tfidf模型
joblib.dump(vec,'./doc/model_tfidf.pkl')
a = train_tfidf.toarray()
print(a.shape)

 

3  在测试阶段,直接加载tfidf矩阵、训练集语料、vec模型。

   用模型对测试集进行处理;然后遍历整个训练集tfidf矩阵,和测试集文本两两求余弦相似度

实验过程中遇到的问题:

把mysql数据库中的数据存为DataFrame格式的时候,用index=False清除索引列。

清除df 中的指定某列 del df['列名']

定位df 中的某一行

# 选取等于某些值的行记录 用==
df.loc[df['column_name'] == some_value]
# 选取某列是否是某一类型的数值 用 isin
isin df.loc[df['column_name'].isin(some_values)]
# 多种条件的选取 用 &
df.loc[(df['column'] == some_value) & df['other_column'].isin(some_values)]
#  选取不等于某些值的行记录 用 != 
df.loc[df['column_name'] != some_value] 
# isin返回一系列的数值,如果要选择不符合这个条件的数值使用~ 
df.loc[~df['column_name'].isin(some_values)]

                                  

猜你喜欢

转载自blog.csdn.net/qq_34333481/article/details/85126228