自动采集文章(先说成果抓了掘金前端类目下的文章标题192条)

优采云 发布时间: 2022-02-15 16:27

  自动采集文章(先说成果抓了掘金前端类目下的文章标题192条)

  本网站的内容是从兴趣中采集的。如果您无意中侵犯了您的相关权益,请留言告知我们,我们将尽快删除。谢谢你。

  俗话说:如果你有一把锤子:hammer: 在你的手中,一切看起来都像钉子。当我拿着朴素贝叶斯之锤时,我看到掘金队 文章 的分类就像一颗等待被锤击的钉子。

  目前,用户需要在掘金文章中手动选择已发布文章的类别。如果用算法自动判断文章属于哪个类别,那么这一步就可以省去(单看这种情况,用户体验提升很小,但改造后内容分布可以更好) .

  让我们谈谈结果

  我在掘金的前端类别下捕获了 192 个 文章 标题,在后端类别下捕获了 969 个 文章 标题,在人工智能类别下捕获了 692 个 文章 标题。未经任何优化的朴素贝叶斯训练模型的分类准确率为0.79。

  可以看出朴素贝叶斯在技术文章分类中是一个不错的算法。它可以在少于 2000 个标题的情况下达到 0.8 的正确率。如果加上文章内容,我猜准确率可以是0.9以上。

  怎么做

  数据采集

  直接使用采集器新建采集任务,如优采云、优采云等。将 采集 中的 文章 数据保存到本地。我使用 优采云采集器,每个类别一个 采集 任务,并将捕获的数据保存为 Excel。

  

  标记和计算 IF-TDF

  在IF-TDF中,IF是词频,是指单词a在待分类文档中出现的次数与待分类文档中单词总数的比值。TDF是逆文档频率,是指收录指定单词a的文档在整个文档集中所占的比例。

  IF*TDF 等价于 IF-TDF。

  比如文章A的标题有8个词,前端出现一次,我抓的1000个标题中有800个收录前端。那么 IF-TDF 等于 1/8 * lg(1000/800).

  使用 IF-TDF,可以选择对单个标题很重要但很少出现在所有标题中的单词。而这种词是正式区分文章类别的关键。

  所以计算IF-IDF的第一步就是分词,用jieba分词来完成:

  IF-IDF可以直接使用sklearn自带的TfidfVectorizer计算。

  from sklearn.feature_extraction.text import TfidfVectorizer

# stop_words:停止词

# x_train: 分词后的文本列表训练集

# x_test:分词后的文本列表测试集

tf = TfidfVectorizer(stop_words=stop_words, max_df=0.5)

train_features = tf.fit_transform(x_train)

test_features = tf.transform(x_test)

  代码中的stop_words是一个文本文件,里面保存了中文常用的连接词,如的、我等。因为这些词很常见,对文本分类没有帮助,所以在实际计算 IF-IDF 时不计算在内。

  使用朴素贝叶斯训练模型

  from sklearn.naive_bayes import MultinomialNB

# alpha:平滑系数

clf = MultinomialNB(alpha=0.001).fit(train_features, y_train)

predicted_labels=clf.predict(test_features)

  predict_labels 是我使用文本分类模型预测的 文章 分类。与实际值比较:

  from sklearn import metrics

metrics.accuracy_score(y_test, predicted_labels)

# output: 0.7931034482758621

  其他

  自掘金发展以来,无数作者间接提供了大量准确标注的数据。使用更多的数据进行训练,选择合适的停用词库并对文章标题进行一些必要的预处理,并为一些关键词增加权重——比如前端、JavaScript、Android、Java等。 ,分类准确率可达97%。

  完整的代码可以在这里找到。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线