基于TF-IDF算法、余弦相似度算法实现相似文本推荐——文本相似度算法,主要应用于文本聚类、相似文本推荐等场景。
设计说明
使用jieba切词,设置自定义字典
使用TF-IDF算法,找出文章的关键词;
每篇文章各取出若干个关键词(比如20个),合并成一个集合,计算每篇文章对于这个集合中的词的词频(待优化:为了避免文章长度的差异,可以使用相对词频,);
生成两篇文章各自的词频向量;
计算两个向量的余弦相似度,值越大就表示越相似。
实现说明
1)初始化
需要对原始文档做些简单的处理,在预处理结果文件中每一行记录一个文档,文档ID与文档内容通过一定分隔符分割(比如以:::间隔),写入txt文档,当然并非一定如此处理,此处可以根据实际使用,调整代码实现。
我选取了五则新闻,其中1,2,3为房地产板块新闻,4,5为NBA板块新闻。
原始文本预处理
其余初始化内容详见代码注释。
class DocumentSimilarity:
def __init__(self):
#停词字典路径
self.stopword = 'Cstopword.dic'
#原始文档路径,每一行一个文档,文档ID与文档内容以:::间隔
self.DocumentFilePath = 'Document.txt'
#切词结果存放路径
self.CutWordFilePath = 'CutWordNews.txt'
#每个文档选取关键词个数
self.KeyWordsNum = 10
#推荐相似文档个数
self.DocumentSimilarityNum = 6
#切词结果,格式为{文档ID:切词结果,……}
self.CutWordDict = {}
#文档关键词字典,格式为{文档ID:{关键词:TF-IDF值,……},……}
self.DocumentKeywords = {}
#文档词频字典,格式为{文档ID:{切词:词频,……},……}
self.WordsFrequenc