🏵根据资料和经验总结一下CSDN博客质量分提高因素
关注作者:JuruoAssociation 原创于 CSDN
原创不易,谢绝转载。点击支持原文
写博客时稍加留意即可,我这篇博客按照下文的方法写的,第一版就有97分
文章目录
- ✅加分项检查清单
- 1. ❄️长度
- 2. ❄️标题
- 3.❄️ 图片
- 4. ❄️链接
- 5. ❄️目录
- 6. ❄️标准目录
- 7. ❄️代码
- 8. ❄️投票
- 9. ⚠️标签
- ✅参考资料
✅加分项检查清单
1. ❄️长度
- 不能太长。大于
1000000 token
的在最新5.0版本中将直接判为60分(存疑,超过10^6
字的文章,可能是把连载系列专栏整合至一篇博客中了);但根据资料整理,超过万字的文章都可能会损伤可读性,让读者产生理解困难(aka.劝退),而且常被用于制造标题党 - 也不能太短,一篇技术博客,一两百字就写完是不太合适的。长度专项判分上限1,从0开始计算大约每
1000 token
得分0.25
;一般文字+代码达到至少这样的长度是比较合适的 - 使用引人注意的软文、套话等等以及引流行为会被打击,CSDN曾经被诟病于此,重拳出击乃意料之中。
2. ❄️标题
正如ccat大佬所说,一篇灌水博客也能刻意命中很多高阶的词汇,一篇好的入门博客也可能只包含领域的基本概念。好的博客应该是名副其实(不包含过大过空关键词或蹭热关键词)、言简意赅(不加废话关键词,把重要关键词提炼再提炼)的。
3.❄️ 图片
尽量少用外链图片,不稳定的可能会影响读者体验,甚至被判定为死链;使用站内图片是比较合适的。夹带私货适量即可。
4. ❄️链接
- 推荐相关阅读小组件:如果链接违规或者是死链,会倒扣分;链接站内或者自己的文章即可
- 内容管理列表提示改进质量?很多时候是长度不够,不推荐复制黏贴,有专门算法对抗冗余内容,和代码复杂度检测是一类的
- 原创声明小组件。除了常见的审查元素人工转载,部分网站有直接爬虫,爬取含有特定关键词的博文然后直接转载到其网站上,全过程无需人工干预,而且光明正大标注原创。因此添加原文链接大多是可以保留原创出处的。之前写过一篇forest专注森林软件闪退的解决方案,就因为触发了一款同名网络游戏关键词而被自动转载。
关注作者:JuruoAssociation 原创于 CSDN
原创不易,谢绝转载。点击支持原文
- 参考资料小组件
[1] IDA汇编字符串跟踪
- 结尾小组件(没啥用,供个人发电用)
首发于 2022.07.24,投喂对象上至各路神仙,下至可爱的麦片和香草
虽然他们看不懂,若有手糊或不足,亦或改进建议,还请不吝赐教
5. ❄️目录
- 好习惯无需多言,方便笔者也方便读者。建议设置多级的、层次清晰的标题;若要增强可读性,标题后适当加序号或者emoji是合适的,例如🏵✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️
- 一些特殊技巧例如使用mermaid表格绘制标题,建议全文统一格式,点击查看例子
6. ❄️标准目录
文章开头加入以下markdown语句即可自动添加
@[TOC]
效果图如下
7. ❄️代码
主要评分标准是代码量得分也就是lines of code
,但是有专门算法检测冗余的简单代码,例如把循环展开成顺序代码,或者复制黏贴怪,会被扣分。[3]
不过仍然有若干疑问等待探究,例如这是我一个project当中一段前端姿态计算的buffer函数
//特征:注释必要,结构紧实,有必要的分段空行,含有中途输出
function getBuffer(){
// 取历史记录关键帧buffer的平均值
const bufferlength = bufferPositions.length;// 所有缓冲区长度是相同的,取第一个长度
if (bufferlength == 0) {
return;
}
const avgPositions = bufferPositions.reduce((acc, cur) => acc.map((a, i) => ({ x: (a.x + cur[i].x), y: (a.y + cur[i].y)})), new Array(16).fill({ x: 0, y: 0 })).map(a => ({ x: a.x / bufferlength, y: a.y / bufferlength}));
const avgTime = bufferTime.reduce((acc, cur) => acc + cur, 0) / bufferlength;
// 如果有半数以上关键帧认为这个关节在运动,那么设置为true
const avgStates = bufferStates.reduce((acc, cur) => acc.map((a, i) => a + cur[i]), new Array(16).fill(0)).map(a => (a > bufferlength / 2));
const avgSpeeds = bufferSpeeds.reduce((acc, cur) => acc.map((a, i) => a + cur[i]), new Array(16).fill(0)).map(a => a / bufferlength);
const avgDirections = bufferDirections.reduce((acc, cur) => acc.map((a, i) => a + cur[i]), new Array(16).fill(0)).map(a => a / bufferlength);
const buffer = {
positions: avgPositions,
time: avgTime,
states: avgStates,
speeds: avgSpeeds,
directions: avgDirections
}
// console.log(buffer);
return buffer;
}
其中对于代码空行是否过多,注释程度,中途输出必要性和集成可读性的判定没有明确。
从极端一点的角度想,注释空行等等过多也不一定恰当,例如使用AI可以为每一行代码生成注释,加上中途输出和空行可以增加到原代码的接近三倍行数,但是如果注释和空行全不算,又违背可读性的初衷。
关于集成度,下面的函数虽然对reduce函数进行了解包,但是并不见得可读性提高,实际上对于有约定俗成的程序样式,集成、紧实一点反而有好处(我还可以叫AI把map都给展开来,对吧)。
// 由AI重写,含有大量AI生成的注释,用奇怪的技巧增加了复杂度,但可读性反而不如前者
// 如果想,甚至可以把map再展开
function getBuffer(){ // 获取历史记录关键帧buffer
// 取历史记录关键帧buffer的平均值
const bufferlength = bufferPositions.length;// 所有缓冲区长度是相同的,取第一个长度
// console.log(bufferlength);
// console.log(bufferPositions);
// console.log(bufferTime);
if (bufferlength == 0) { // 如果没有历史记录,返回空
return;
}
function sumPositions(acc, cur) { // 计算两个位置数组的和
return acc.map((a, i) => ({ // 两个位置数组的和
x: a.x + cur[i].x,
y: a.y + cur[i].y
}));
}
function averagePositions(positions, length) { // 计算平均位置数组
const newArray = new Array(16).fill({ x: 0, y: 0 };
const sum = positions.reduce(sumPositions, newArray));
return sum.map(a => ({
x: a.x / length,
y: a.y / length
}));
}
function sumValues(acc, cur) { // 计算两个值数组的和
return acc.map((a, i) => a + cur[i]);
}
function averageValues(values, length) {
const newArray = new Array(16).fill(0);
const sum = values.reduce(sumValues, newArray);
return sum.map(a => a / length);
}
function majorityStates(values, threshold) {
return values.map(a => a > threshold);
}
// 使用重构后的函数
// 计算平均位置
const avgPositions = averagePositions(bufferPositions, bufferlength);
// 计算平均时间
const avgTime = bufferTime.reduce((acc, cur) => acc + cur, 0) / bufferlength;
// 如果有半数以上关键帧认为这个关节在运动,那么设置为true
const avgStates = majorityStates(averageValues(bufferStates, bufferlength), bufferlength / 2);
// 计算平均速度和方向
const avgSpeeds = averageValues(bufferSpeeds, bufferlength);
const avgDirections = averageValues(bufferDirections, bufferlength);
// 构造buffer对象,这样就不用每次都创建新的对象了
const buffer = {
positions: avgPositions,
time: avgTime,
states: avgStates,
speeds: avgSpeeds,
directions: avgDirections
}
// console.log(avgDirections);
// console.log(buffer);
return buffer;
}
得出结论:代码这一块算法有待深挖,笔者还需多为读者考虑,合理使用空行、注释和中途输出,合理控制集成度。
空行 | 注释 | 中途输出 | 集成整合 | |
---|---|---|---|---|
过多 | 分散注意 | 失去重点 | 程序写的不好 | 变成混淆器 |
过少 | 影响意群划分 | 费时费力 | 这个问题不大 | 汇编语言也不好理解 |
可能夸张了一点(逃)
8. ❄️投票
可以增强读者互动,虽然个人认为对内容帮助不大,但既然元素多样性的判分打在那里,加个投票甚至是inscode也合情合理。不过这里真的没什么代码运行,改天搬一个姿态解算放到inscode(不是)
9. ⚠️标签
据参考[2],文章标签多样性可以提高质量分,个人感觉是增加流量,因为官方博客中也未曾提到标签。
✅参考资料
[1]. 博客质量分计算5.0版本
[2]. 标签多样性是否会影响质量分
[3]. 内容质量分细节:长度、超链接数、代码复杂度
[4]. 内容质量分细节:标题关键字