Learn practical skills, build real-world projects, and advance your career

基于文本相似度计算的相似APP发现

1. 主要思路:

将APP的文本简介的向量作为APP的特征向量,通过计算两个APP的特征向量之间的余弦值来判断两个APP之间的相似度。
优化:由于在所有APP中两两计算相似度复杂度太大,所以只考虑同一类别下的APP两两之间进行相似度的计算。

2. 主要流程:

  • 对所有APP的简介文本进行分词、去停用词、去标点等处理。
  • 计算APP的TF-IDF向量表示,并进行l2归一化
  • 对于每一个APP,计算其他APP与当前APP的余弦相似度,并排序,取topk作为与当前APP相似的APP。

3. 实现步骤

主要包括:

  • 环境数据准备
  • 文本分词处理
  • ti-idf 计算并进行l2归一化,方便cosine距离的计算
  • 在同一类别中计算APP之间的cosine距离,取topk

3.1 环境数据准备

import re
import jieba
import pickle
import multiprocessing

import pandas as pd
import numpy as np

from tqdm import tqdm
from sklearn.feature_extraction.text import TfidfVectorizer
from zhon.hanzi import punctuation
# app_raw_data 数据 或者 node_app数据
app_raw_data = pd.read_csv('../../data/kgdata/node_app.csv')

# 取出需要的两列数据:app的唯一标识以及简介
app_ids = list(app_raw_data['app_id:ID(app_id)'].values)
app_briefs = list(app_raw_data['soft_brief'].values)
print("number of app_id:",len(app_ids))
print("number of app_brief:",len(app_briefs))
/home/LAB/zhangcw/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2785: DtypeWarning: Columns (0,6,8,12,14,22,23,24) have mixed types. Specify dtype option on import or set low_memory=False. interactivity=interactivity, compiler=compiler, result=result)
number of app_id: 1881732 number of app_brief: 1881732

3.2 文本分词处理