快速检索并引用你在CSDN上所有的博文笔记
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速检索并引用你在CSDN上所有的博文笔记相关的知识,希望对你有一定的参考价值。
简 介: 利用CSDN提供的博文的列表,编写了一个快速检索自己博文,并自动插入索引连接的程序。这样就可以大大提高博文写作的效率,将之前记录学习、工作的内容更好的进行连接。最后,感谢CSDN技术人员的大力支持和帮助。
关键词
: 博文,索引,分词,引用
§00 背景介绍
人生就像一场持续的演出,你在其中既做演员、又当导演。就像李雪琴所说: 做不了情绪的导演,可以做情绪的场记 。认真记录一下自己的思考和体验,可以“在擦干眼泪之后,记住每一次教训”。
▲ 图1 李雪琴:做不了情绪的导演,可以做情绪的场记
提到场记,在CSDN上记录了很多学习、工作的记录。非常方便,有效。为了能够进一步提高这些场记对于后面的帮助。特地向CSDN索要了一份自己博文的清单列表。这样便可以作为基础便于今后的查询与索引。
我想询问一下,如何能够方便获得我的所有在CSDN上文章的连接。 我在写作博文的时候,非常频繁的需要引用之前博文工作的内容,由于现在我的博文比较多(2460篇左右),通过现在CSDN上的查询比较麻烦,我想是否能够将我的所有博文的名称 以及对应的CSDN上的链接下载下来,我自己编写一个方便使用的Python名称检测,便可以加速我的博文写作过程。
如果现在我通过网络爬虫下来这些信息,还是比较麻烦,因此我想询问是否你们可以帮我将现在所有我之前博文的链接能够生成发送给我,或者有什么方便的接口,我可以调用?
§01 博文清单
今天(2022-01-18)收到CSDN给我发送过来博文列表,包含了文章名称和访问连接。
D:\\Temp\\卓晴老师全部文章列表.csv
1.1 读取博文内容
我得到的博文清单的列表是 CSV 格式。在Windows下,使用EXCEL打开该文件。
1.1.1 Excel文件打开
但是直接使用Excel打开,看到:
- 表格包含三列:
url
,title
,status
; - title的中文字符都出现乱码;
▲ 图1.1.1 EXCEL打开出现的乱码
这应该是文件存储时的编码出现问题。
1.1.2 利用Python读取
(1)读取程序
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
filename = r'D:\\Temp\\卓晴老师全部文章列表.csv'
with open(filename, 'r') as f:
for l in f.readlines():
print(l)
(2)执行结果
直接读取出现解码错误。
Traceback (most recent call last):
File "<pyshell#6>", line 2, in <module>
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 98: illegal multibyte sequence
根据 关于python内open函数encoding编码问题 提到的经验,在打开文件中增加encoding='utf-8'
可以解决这个情况。
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
filename = r'D:\\Temp\\卓晴老师全部文章列表.csv'
with open(filename, 'r', encoding='utf-8') as f:
for l in f.readlines():
print(l)
这样便可以获得正确的输出信息了:
下面是部分输出的信息。
"https://blog.csdn.net/zhuoqingjoking97298/article/details/122526980","为什么LED内部不集成限流电阻呢?","1"
"https://blog.csdn.net/zhuoqingjoking97298/article/details/122530436","什么是微分?什么是导数?如何利用微分-导数方程求导数?","1"
"https://blog.csdn.net/zhuoqingjoking97298/article/details/122531852","numpy中计算矩阵数值的核心函数","1"
"https://blog.csdn.net/zhuoqingjoking97298/article/details/122535149","第十六届全国大学生智能车竞赛相关照片","1"
"https://blog.csdn.net/zhuoqingjoking97298/article/details/122537709","清华大学本科生微积分2021年期末考试试卷","1"
可以得到2616条博文记录信息。
1.1.3 利用numpy读取CSV
根据python-numpy数组的csv文件写入与读取 介绍的方法,利用NumPy读取CSV文件。
但是直接读取会存在问题:
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
File "C:\\Users\\zhuoqing\\Anaconda3\\lib\\site-packages\\numpy\\lib\\npyio.py", line 1112, in loadtxt
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 98: illegal multibyte sequence
1.1.4 利用csv读写文件
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import csv
filename = r'D:\\Python\\Cmd\\database\\csdnlist-2022-1-18.csv'
with open(filename, 'r', encoding='utf-8') as f:
csv_reader = csv.reader(f, delimiter=',')
for count,l in enumerate(csv_reader):
print("l: \\n".format(l))
if count >= 10: break
l: ['url', 'title', 'status']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104064392', '紧急制动', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104064573', '大脑里的电极', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104064593', '数码管识别', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104064723', '劈-I-D', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104064893', 'CSDN上究竟可以上载多大的GIF文件?', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104072612', '使用AD8302进行检波', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104083055', '三极管饱和状态下增益', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104085992', '减速电机JGA25-370的控制电路', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104089780', '机械变阻器、电位器', '1']
l: ['https://blog.csdn.net/zhuoqingjoking97298/article/details/104092963', '手持红外温度计AR802B', '1']
可以看到使用CSV读取csv文件非常方便,它可以自动将读入的数据进行有效的分割。
1.2 文章检索
1.2.1 基础数据文件
将所得到的文件另外存储到:
filename = r'D:\\Python\\Cmd\\database\\csdnlist-2022-1-18.csv'
读取这个数据文件所需要的时间大约为0.3570秒;
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
filename = r'D:\\Python\\Cmd\\database\\csdnlist-2022-1-18.csv'
count = 0
starttime = time.time()
with open(filename, 'r', encoding='utf-8') as f:
for l in f.readlines():
count +=1
costtime = time.time() - starttime
print("count: \\n".format(count), "costtime: \\n".format(costtime))
count: 2616
costtime: 0.35702037811279297
1.2.2 中文分词
为了提高检索的效率,在传统的字符串匹配上,将所有的文章的title进行中文分词,以提高分词匹配的加权,可以提高匹配的中文理解能力。
在知乎 中文分词方法和软件工具汇总笔记 中汇总了中文分词的的方法和软件工具。之前我只知道 jieba分词 ,想不到现在可以使用的工具这么多呢。不过还是首先测试一下jieba分词对于所有引文标题的分词效果。
(1)JieBa分词
下面就按照jieba分词中介绍的方法进行实验。
Ⅰ.安装JieBa
pip3 install jieba
Ⅱ.测试分词效果
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import csv
import jieba
filename = r'D:\\Python\\Cmd\\database\\csdnlist-2022-1-18.csv'
with open(filename, 'r', encoding='utf-8') as f:
csv_reader = csv.reader(f, delimiter=',')
for count,l in enumerate(csv_reader):
seg = '-'.join(jieba.cut(l[1]))
print("seg: \\n".format(seg))
if count >= 20: break
seg: title
seg: 紧急制动
seg: 大脑-里-的-电极
seg: 数码管-识别
seg: 劈---I---D
seg: CSDN-上-究竟-可以-上载-多大-的-GIF-文件-?
seg: 使用-AD8302-进行-检波
seg: 三极管-饱和状态-下-增益
seg: 减速-电机-JGA25---370-的-控制电路
seg: 机械-变阻器-、-电位器
seg: 手持-红外-温度计-AR802B
seg: 什么-数字-万用表-可以-测量-噪声-?
seg: 测试-可编程-波形发生器- -AD9833
seg: AD9833-数字信号-发生器-模块
seg: 使用-AD9833-谐波-发送-调频-广播
seg: RDA5807- -FM-收音机-模块
seg: Hands---On- -Learning- -Through- -Racing
seg: 脑残-的-猪尾-汇
seg: 挑战杯-科展-上-的-智能-车-作品
seg: 至-简至-美
seg: 一分钟-制版-法
虽然看起来上面分词的效果不咋地,但利用这个结果还是可以在一定程度上提高对于博文检索的精确性的。
关于JieBa的详细使用方法,在简书的博文 jieba分词详解 中给出了详细的介绍。
1.2.3 处理CSV文件
由于动态调用JieBa分词需要一定时间,因此将原始的CSV文件进行预处理,将所有的标题分词之后进行存储,这样后期处理便可以直接利用分词后的标题进行检索的。
(1)转换文件格式
import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *
import csv
import jieba
filename = r'D:\\Python\\Cmd\\database\\csdnlist-2022-1-18.csv'
outfile = r'D:\\Python\\Cmd\\database\\csdnlist-2022-1-18-jieba.csv'
with open(filename, 'r', encoding='utf-8') as f:
csv_reader = csv.reader(f, delimiter=',')
with open(outfile, 'w') as outf:
out_write = csv.writer(outf, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for count,l in enumerate(csv_reader):
seg = '`'.join(jieba.cut(l[1]))
try:
out_write.writerow([l[0], seg])
except:
pass
print('Process lines'.format(count))
最终获得2615行处理后的数据。其中有一条在out_write.writerow的过程中出现中文编码错误。最终的结果存储在csdnlilst-2022-1-18-jieba.csv
中。
csdnlist-2022-1-18-jieba.csv
csdnlist-2022-1-18.csv
(2)检查处理结果
注意,由于上面在生成新的CSV文件的时候,没有使用 encoding='utf-8'
编码的方式,所以在下面再打开CSV文件的时候,不需要在使用encoding='utf-8'
编码方式了。
import sys,os信管通低代码快速开发平台简介(完)