社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

一种用python实现的自动重写文章标题的思路与代码实现

brooks的技术小屋 • 3 年前 • 848 次点击  

好几周没更新了,今天来给大家分享一个标题重写的小思路以及代码实现。

相信大家可能都用过5118的自动文章标题的功能,就是给一篇内容,然后直接帮你写个标题。这个功能我是去年的时候一个学员给我看的,目前是不是很完善了不是很清楚。当时它的思路就是直接从文章里面取出一句相关的话作为文章的新标题,当然了,它有好几句话可以供选择的。我们今天也来用python实现一个类似功能的小脚本。一起来玩玩吧。

先说下脚本的实现思路

  1. 获取原来的标题,并计算出标题的字数。
  2. 获取文章的文本内容,并根据中文句子的结束标点进行拆分
  3. 设置一个新标题的临界值,这里我给到的是原标题的0.5-2倍
  4. 筛选内容拆分出来的句子,只要字数符合新标题临界值的都拿出来
  5. 分别计算符合要求句子和原标题的集合相似度。
  6. 根据相似度的高低进行排序,拿出相似度最高的作为新标题即可

效果如下

这里还有一些不是很完善的地方哈,因为时间关系就没有做。 比如:应该要去除掉开头一些无意义的词语等

下面给出响应的代码,感兴趣的童鞋可以尝试玩玩,毕竟也不花钱。

代码

# coding: utf-8
"""
重写文章标题新方式
计算原标题与内容句子的相似度,取相似度最大的作为新标题
作者:brooks
"""

import re
import jieba

sep = re.compile(r'[;。?!…():\s]')


def calculate_similar(wset, wset_len, title):
tset = set(jieba.lcut_for_search(title))
try:
similar = 1 - len(wset - tset) / wset_len
except ZeroDivisionError:
similar = 1.0
return similar


def make_new_title(title, content, rmstop):
title_len = len(title)
title_cut = set(jieba.lcut_for_search(title))
max_title_len = title_len * 2
min_title_len = title_len * 0.5
sentences = sep.split(content)
candi_senes = [sen.strip() for sen in sentences if min_title_len < len(sen.strip()) < max_title_len]
good_titles = []
for candi_sen in candi_senes:
similar = calculate_similar(title_cut, title_len, candi_sen)
new_title = rmstop.sub('', candi_sen)
good_titles.append((candi_sen, new_title, similar))
good_titles.sort(key=lambda x: x[-1], reverse=True)
print(good_titles)


def test():
# 停止词,本来想着去除掉句子中的停止词的,但是发现效果并不好,可读性很差
res = r'|'.join(w.strip() for w in open("stopwords.txt", encoding="utf-8") if w.strip())
stop_words = re.compile(res)
# test.txt 是测试的内容,纯文本。
with open('test.txt', encoding= 'utf-8') as f:
content = f.read()
# 原标题
title = "场均净胜43.8分!史上最残暴的球队到底多恐怖?"
make_new_title(title, content, stop_words)


if __name__ == '__main__':
test()

结束

这个本来就是做着玩的,为啥要做这个呢,因为很多的文章如果不是根据关键词采集的,那么很难用现有的方法给它重写标题,因此想着用一种简单快速的方式进行重写。

这类文章的主要作用就是促进内容的收录,培养 权重所用。一般这种文章没有什么特定的关键词,比如散文这类型的文章,大部分情况下很难用一个关键词来优化一篇散文。都是多篇聚合为一个主题来优化。原因在于散文作者起的名字也太那个啥了。

与此类似的还有一些心灵鸡汤啊,早安晚安心语啊什么的。这类型的文章一般原创度很高,因此用来养站养收录还是很不错的哦。

之前闯哥的公众号文章也分享过几个思路。大家也可以移步到闯哥的公众号学习。

都到这里了,就关注点个在看呗!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/70553
 
848 次点击