Python 如何将CountVectorizer中的特定项加上余弦_相似度加权?

Python 如何将CountVectorizer中的特定项加上余弦_相似度加权?,python,pandas,dataframe,cosine-similarity,Python,Pandas,Dataframe,Cosine Similarity,我正在编写一些代码,在这些代码中,我获取了一组附加了主题代码的文档,然后对它们运行CountVectorier,以生成与用户配置文件的相似性 因此,如果我们调用主题代码A、B、C等,那么我将这样的文档加载到数据帧中: | Document ID | Subject Codes | |-------------|---------------| | 1 | A B | | 2 | B C | | 3

我正在编写一些代码,在这些代码中,我获取了一组附加了主题代码的文档,然后对它们运行CountVectorier,以生成与用户配置文件的相似性

因此,如果我们调用主题代码A、B、C等,那么我将这样的文档加载到数据帧中:

| Document ID | Subject Codes |
|-------------|---------------|
| 1           | A B           |
| 2           | B C           |
| 3           | C             |
等等

因此,我要做的第一件事是在subject codes字段上运行CountVectorizer fit_transform,并将其存储到
subject_code_count_matrix

用户对各种(但不是所有)文档都有评分(共5分),因此为了获得对用户的建议,我加载了他们的所有评分和相关文档ID。评分为5分,所以我将其除以5来加权。这将产生如下数据帧:

| Document ID | Weighted Rating |
|-------------|-----------------|
| 2           | 0.4             |
等等

然后我生成一个用户配置文件,如下所示:

| Document ID | Weighted Rating |
|-------------|-----------------|
| 2           | 0.4             |
user\u profile=np.dot(主题代码计数矩阵[user\u ratings['index'].values].toarray().T,user\u ratings['weighted\u ratings'].values)
然后,为了生成用户可能感兴趣的文档,我执行以下操作:

user\u subject\u code\u similarity\u matrix=pd.数据帧(余弦\u相似度(np.至少\u 2d(用户配置文件)、subject\u code\u count\u matrix))
对于索引,用户\主题\代码\相似性\矩阵中的分数。iloc[0]。排序\值(升序=False)。iteritems():
... 排序值在这里
所以我的问题是——有没有一种方法可以让我对任何包含特定主题代码的文档进行加权?就像现在的用户对文档进行评分一样,我的理解是,评分低的文档只会降低看起来与该文档相似的文档的权重。因此,在我上面的示例中,如果我想对任何包含主题代码C的文档进行总体加权,即使对文档3的最低评分为1(加权评分为0.2),也只对看起来像文档3的文档进行加权,文档3是完全包含主题代码C的文档,而不是任何包含主题代码C的文档,这样正确吗?那么,除了用户的个人资料外,还有没有一种方法可以让我对带有特定主题代码的文档进行评分


理想情况下,我不想弄乱
subject\u code\u count\u matrix
变量,因为它是在一组非常大的文档上生成的(生成它需要几分钟),我多次重复使用它进行比较。如果可以通过这种方式实现加权,我可以复制它。

您是否考虑过使用
TfidfVectorizer
而不是
CountVectorizer
?@SergeyBushmanov我确实考虑过,但这会带来什么好处?我不太关心对不经常出现的术语进行排名,我希望所有术语都具有相同的权重(除非我没有,这是例外,也是我问题的基础)。除非TF-IDF为我提供了一种以这种方式加权条款的方法?