归纳总结:基于内容的推荐算法之关键词提取

优采云 发布时间: 2022-10-21 21:15

  归纳总结:基于内容的推荐算法之关键词提取

  基于内容的推荐算法是一种较早且易于理解的推荐算法。其主要思想是,我们首先根据信息的特征给信息赋予一些属性(可以称为“标签”)。对于一个文章,或者一个段落,它的属性可以理解为它的关键词,这个文章的主要内容是文章的关键词的提取.

  1.TF-IDF方法

  TF(Term Frequency)词频,直观上是指一个词在文章中出现的次数,为了避免文章长度的影响,对于不同的文章,词频计算应归一化。

  文章的标签应该是文章中的一个重要词,在文章中应该出现多次,所以我们需要进行词频统计。

  但是,在每个文章中,出现频率最高的词是“yes”、“yes”、“in”等。这些词被称为“停用词”,这意味着它们对结果没有用处,并且必须要过滤掉的话。

  此外,换句话说,具有实际意义,还会存在一些问题。比如“Bee Breeding in China”的文章中,“China”、“bee”和“breeding”这三个词出现的次数一样多,但很明显,我们更想要的标签是后两个词

  因此,我们需要一个重要性调整系数来衡量一个词是否为常用词。如果一个词比较少见,但是在这个文章中出现了多次,那么它很可能反映了这个文章的特点,正是我们需要的标签。

  用统计语言表示,这个权重称为“逆文档频率”(IDF),在计算 IDF 时需要一个语料库来模拟使用该语言的环境。

  如果一个词比较关键,那么收录该词的文档就会相对较少,该词的逆文档频率会更高。

  综上所述,TF 和 IDF 都与单词的关键程度成正比。

  用两者的乘积来综合考虑和判断一段文字的关键词,已经成为一种常见的关键词提取方法。

  二、代码实现

  这里是中文文章的关键词提取,所以使用了jieba分词器。

  import os

import numpy

import jieba

import jieba.posseg as pseg

import string

from sklearn import feature_extraction

from sklearn.feature_extraction.text import TfidfTransformer

from sklearn.feature_extraction.text import CountVectorizer

import time

start=time.clock()

# 获取文件列表

def getfilelist():

path = "./input/"

filelist = []

files = os.listdir(path)

# 返回指定文件夹包含的文件或文件夹的名字列表

for f in files:

if (f[0] == '.'):

pass

else:

filelist.append(f)

return filelist, path

# 对文档进行分词处理

def fenci(argv, path):

<p>

# 保存分词结果的目录

sFilePath = &#39;./segfile&#39;

if not os.path.exists(sFilePath):

os.mkdir(sFilePath)

# 读取文档

filename = argv#这里的argv是文档

f = open(path + filename, &#39;r+&#39;)

file_list = f.read()

f.close()

# 对文档进行分词处理,采用默认模式

seg_list = jieba.cut(file_list, cut_all=True)

# 对空格,换行符进行处理

result = []

for seg in seg_list:

seg = &#39;&#39;.join(seg.split())

if (seg != &#39;&#39; and seg != "\n" and seg != "\n\n"):

result.append(seg)

# 将分词后的结果用空格隔开,保存至本地。

f = open(sFilePath + "/" + filename, "w+")

f.write(&#39; &#39;.join(result))

f.close()

# 读取已分词好的文档,进行TF-IDF计算

def Tfidf(filelist):

# filename = argv # 这里的argv是文档

path = &#39;./segfile/&#39;

corpus = [] # 存取100份文档的分词结果

sFilePath = &#39;F:/fenciDoc/tfidffile&#39;

if not os.path.exists(sFilePath):

os.mkdir(sFilePath)

for ff in filelist:

fname = path + ff

f = open(fname, &#39;r+&#39;)

print(fname)

content = f.read()

f.close()

corpus.append(content)

  

vectorizer = CountVectorizer()

transformer = TfidfTransformer()

tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))

word = vectorizer.get_feature_names() # 所有文本的关键字

weight = tfidf.toarray() # 对应的tfidf矩阵

keyword=open(sFilePath + &#39;/&#39;+&#39;keyword.txt&#39;,&#39;w+&#39;)#保存关键词的文档

# 这里将每份文档词语的TF-IDF写入tfidffile文件夹中保存

for i in range(len(weight)):

print(u"--------Writing all the tf-idf in the", i, u" file into ",

sFilePath + &#39;/&#39; + str(i+1) + &#39;.txt&#39;, "--------")

f = open(sFilePath + &#39;/&#39; + str(i+1) + &#39;.txt&#39;, &#39;w+&#39;)

#将每一篇的关键词存入

keyword.write("第"+str(i+1)+"篇关键词:"+&#39;\n&#39;)

x=weight[i]

y=x.argsort()#返回从小到大的索引值

max=len(word)

#print(y)

keyword.write(word[y[max-1]]+ " " + str(x[y[max-1]])+"\n")

keyword.write(word[y[max-2]]+ " " + str(x[y[max - 2]])+"\n")

keyword.write(word[y[max-3]]+ " " + str(x[y[max - 3]])+"\n")

keyword.write(word[y[max - 4]] + " " + str(x[y[max - 4]]) + "\n")

keyword.write("\n")

f.write("全部分词和TFIDF值:"+"\n")

for j in range(len(word)):

f.write(word[j] + " " + str(weight[i][j]) + "\n")

f.close()

if __name__ == "__main__":

(allfile, path) = getfilelist()

for ff in allfile:

print("Using jieba on " + ff)

fenci(ff, path)

Tfidf(allfile)

end=time.clock()

print("运行时间"+str(end-start)+"秒")</p>

  推荐文章:万能文章正文提取系统

  软件介绍

  

  通用文章体提取系统,软件不需要编写规则自动采集,支持版权提升软件,如果有bug或有更好的功能建议,请与开发者联系!

  如何使用

  

  1. 采集前,

  检查软件目录中是否有两个文件,“采集保存配置.ini”和“采集链接.txt”,如果有,请将其删除。

  2. 运行主程序“通用文章体抽排系统(自动版).exe”设置相关信息,保存配置,然后单击“开始”。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线