pip源

由于默认源下载速度几把慢(10KB/s),通过更换国内源的方式能显著提升速度(100~200KB/s)

给出几个国内镜像:

让pip源使用国内镜像:

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/

临时使用某个源下载的使用语句如下:

通过清华源下载jieba

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba

通用格式:

packageNAME换成包名即可

``pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple packageNAME`

这是临时性的,即本次下载使用这个源,永久性的更换源如下:

如果要永久性的,可以按以下操作。

Linux下,修改 ~/.pip/pip.conf (没有就创建一个,文件夹要加“.”,表示是隐藏文件夹)。

Windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,xx一般表示用户名,新建文件pip.ini。

它们的文件内容如下(使用的是清华镜像,其他可以自行修改):

1
2
3
4
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

namedtuple:

首次学习

from collections import namedtuple

引入一个强化包,继承自元组,是元组的强化版。

首先把他实例化,如下:

fun_use = namedtuple(“admin”,[“name”,”authority”,”timeout”])

之后可以调用fun_use来访问这个已经制定的admin元组

现在给第一个管理A赋值

1
2
3
4
5
from collections import namedtuple
fun_use = namedtuple("admin",["name","authority","timeout"])
A = fun_use("chairman",16,"15s")
print(A)
# 会显示A在admin元组内,值为(name="chairman",authority=16,timeout="15s")

可以通过示例名.自定义属性名来访问具体的值

1
print("管理员名称{},权限等级为{},超时时间为{}".format(A.name,A.authority,A.timeout))

本身元组是不允许修改的,但是这个强化版的元组允许访问修改里面的值,方法如下:

1
2
A._replcae(authority=32)
print("管理员提权至{}".format(A.authority))

可以发现元组的值发生了变化。

增强型元组还支持转换成字典,即属性名:值,用_asdict()如下:

1
print(A._asdict())

第二次学习

参考自

显然只会一些句法是不够的,现在提出几个问题:

  • 如何将普通的元组和字典转换成Namedtuple
  • 如何对Namedtuple排序?
  • 与其他数据类型的区别
  • 如何创建

引言:

namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,更能够方便的通过属性名来访问数据。在python中,传统的tuple类似于数组,只能通过下标来访问各个元素,我们还需要注释每个下标代表什么数据。通过使用namedtuple,每个元素有了自己的名字。

jieba

安装

Github——jieba (包括中文教程)

根据官方文档的介绍,安装方法如下:

  • 全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
  • 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
  • 手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
  • 通过 import jieba 来引用
  • 如果需要使用paddle模式下的分词和词性标注功能,请先安装paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1

有时候全自动安装往往失败,本文使用了半自动安装方式

安装遇到问题

已经安装jieba后,遇到了问题

使用CMD命令,再运行一次pip3 install jieba会提示已经存在,并且返回一个地址,似乎是本地解释器环境lib中没有jieba包的问题

反正我直接在Pycharm里面直接选择安装这个包等待完成安装即可

分词

jieba.lcut(str)精度分词模式,对str内容进行分词

jieba.lcut(str,cut_all=True)全分词模式,对str进行全分词

jieba.lcut_for_search(str)搜索引擎分词模式,是以上两种模式的结合

jieba.cut(str)对一个字符串进行分词

推荐使用lcut(),他直接返回list

精度模式会对长句进行精确分词,没有冗余,意味着结果可以再拼接成原句

全分词模式会对有语义的内容从不同角度全部分词,有冗余

示例:

“好好学习,天天向上”

精度模式是 “好好学习”,“天天向上”

全分词模式是“好好”,“好好学习”,“好学”,“学习”,“天天”,“向上”,“天天向上”

搜索引擎模式在精度分词的基础上对长的字符串再分词,方便搜索引擎抓取关键词。

全分词模式速度比较快,精度模式分词分得比较好,但是慢

英文分词需要先把所有英文单词转换成小写模式lowwer(),将特殊字符替换成空格,代码如下

1
2
for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
txt = txt.replace(ch, " ") # 将文本中特殊字符替换为空格

分词结果的返回值是列表内字符串形式

分词完成后返回的是列表,使用“ ”.join()将列表内容输入出来

【需要注意】

分词会按照词频来分,词频越高的词越容易被切出来,因此【台中】经常被切成【台】【中】而不是保留【台中】的原因是因为词频P(台中)<P(台)<P(中),因此调整词频才能较好的解决这个问题。

贴出官方的分词速度

  • 1.5 MB / Second in Full Mode
  • 400 KB / Second in Default Mode
  • 测试环境: Intel(R) Core(TM) i7-2600 CPU @ 3.4GHz;《围城》.txt

统计词数\行数

因为分词不完全正确,我们需要去掉一些不需要的词语,一般去掉单个词语,即len()==1的词语

因为我们一开始不知道文件有少行,因此我们需要读出行数,可以直接使用readline()然后len()一下就行,但是如果文件很大的话,似乎会出现某种问题,因此使用enumerate()统计,代码如下:

1
2
3
for count,line in enumerate("file_name"):
continue
print("文件的总行数为{}".format(count+1))

多词合并

有时统计人名时会出现多个昵称都指向一个人,因此需要进行合并

示例代码如下:

1
for word in words: #words是已经切分好的

关键词提取

import jieba.analyse来引入关键词分析功能

使用方法如下:

jieba.analyse.extract_tags(str,topK=20)

不过我不是很理解这个extract_tags是什么意思

str进行关键词提取,返回20个TF/IDF权重最大的关键词

这个方法的全文为:

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

  • sentence 为待提取的文本
  • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight 为是否一并返回关键词权重值,默认值为 False
  • allowPOS 仅包括指定词性的词,默认值为空,即不筛选

自定义字典

jieba本身的分词词典可能不满足现代化的互联网需求,需要建立自己的字典或者及时更新新的字典,也可以在现有字典的基础上添加词语

jieba.load_userdict(file_name)载入自定义词典,可以是.txt .csv

自定义词典的格式:

一个词占一行,每一行是三个部分,用空格隔开

【词名】【词频_可省略】【词性_可省略】

也可以动态更新内置词典

  • 使用 add_word(word, freq=None, tag=None)del_word(word) 可在程序中动态修改词典。
  • 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
  • 注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

官方给出的示例,我不是很看得懂实际上

1
2
3
4
5
6
7
8
9
10
11
12
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中将/出错/。
>>> jieba.suggest_freq(('中', '将'), True)
494
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中/将/出错/。
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台/中/」/正确/应该/不会/被/切开
>>> jieba.suggest_freq('台中', True)
69
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台中/」/正确/应该/不会/被/切开

提示

在使用文本路径时,请使用\,使用/会被认为是除法,需要加转义,也就是只能使用//

安装WordCloud

一般情况下,直接使用CMD安装:pip install wordcloud,但往往不成功

通过官网离线下载的方式下载、安装

在这哦

选择适合自己本地环境的版本即可,cp是你的python版本,我的是3.10.xamd64

不知道如何查看自己电脑是几位的请移步Paddle安装部分

安装飞浆PaddlePaddel

内容引自CSND

以及花了四五个小时反复重新安装10.2的悲惨遭遇总结而出

兼容性确认:

必须拥有英伟达GPU,并且检查版本兼容性:

【1】环境确认:(截取部分)

  • Unbuntu/Linux/Windows 7/10

  • 有且仅有一张GPU

  • Python版本 3.6+ ~ 3.10+

​ CMD输入python --version检查版本号

  • pip版本 20.2.2+

​ CMD输入python -m -pip --version检查pip版本号

​ 输入python -m pip install --upgrade pip更新pip

【2】系统兼容性确认

在CMD中输入python -c "import platform;print(platform.architecture()[0]);print(platform.machine())"

要求返回值必须是64bitAMD64或x86_64或x64

版本检查

打开电脑的英伟达控制面板,右键桌面可以看到【英伟达控制面板】

在【管理3D设置】——左下方【系统信息】——【驱动版本】

词查找

jieba.tokenize可以查找出字符串内分词在字符串的起始位置,返回一个容器(我不知道具体是什么),通过下标访问,0:分词,1:分词在文本出现的初始位置-1,2:分词在文本中出现的最终位置(含)

或者在CMD里面输入nvidia-smi返回驱动版本号、

从图中可以指导,我们的驱动器版本号是512.59

每次英伟达的驱动更新都可能改变这个版本号,目前我还没遇到这种情况。姑且认为他不会变。

对照英伟达官网中的,这里给出一部分截图

根据图表中的对应,512版本应当使用至少11.x版本的CUDA ToolKit(在官网处只提供11.x版本和10.x版本的Kit

注意:根据我的经验,尽可能使用较新的版本,理论上应该是向下兼容的,但是10.2版本无论如何都无法正常运行,选择I Agree……然后选择11.x进行下载。

CUDA ToolKit

下载完成后双击安装读条即可。

安装时请使用自定义安装,然后修改到合适的路径,三个路径最好都是用同一个文件夹,或者使用默认路径也行,但是必须在自定义安装中记录下其路径,这对以后有帮助。假设路径是./dv11.2

其后选择相应的cuDNN包下载,此处选择的是为CUDA 11.x准备的cuDNN

解压之后将三个文件复制粘贴到从自定义安装中读出的路径中。

将压缩包的内容复制粘贴合并

安装Paddle

直接在CMD运行以下代码,此处使用的是安装适配CUDA 11.2的版本,其他版本请前往官网下载

python -m pip install paddlepaddle-gpu==2.3.0.post112 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html

即可快速安装Paddle

安装完成提示Successfully后即可

引入测试

在Python文件中进行测试,

1
2
3
import paddle
paddle.enable_static()
paddle.utils.run_check()

结果如下:

结果

出现如下结果时说明Paddle成功启用

排障:

【1】DeprecationWarning 使用代码过旧,这个无需理会,不影响程序运行

【2】版本兼容性问题,请查阅Paddle排障板块

Paddle

需要注意的是,只接受unicode编码的文本,因此在字符串前面添加u可以转换成unicode例如u”str”

logging

一个内置的Python日志模块

WordCloud

从文本中读取文件,需要把提取的列表转换成文本,如下

1
2
3
4
5
ls_re = ['a','b','c'] # 这些是已经提取好的中文,但是末尾的换行符被去掉了
g = open("file_path","w")
g.writelines([line+'\n' for line in ls_re])
g.flush()
g.close()

writelines()能写入可迭代对象,一般是列表的内容到文本中

【排障】其他杂七杂八的问题

中文性判断:

判断这个单个字符串是否为中文(不包括混合情况)

1
2
3
ls = ['你好','a','其他','我们中出了一个叛徒']
for i in ls:
print('\u4e00' <= i <= '\u9fff')

PaddlePaddle排障

版本兼容性问题

使用pip install paddlepaddle指令或运行官网的安装指令完成,并显示successfully后,在python中引用依然报错,报错内容如下

1
2
3
4
5
6
7
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
1. Downgrade the protobuf package to 3.20.x or lower.
2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates

重点词是Downgrade the protobuf package to 3.20.x or lower.提示我们应该降级安装,因此运行如下代码进行Protobuf降级

1
pip install 'protobuf~=3.19.0'

成功解决该报错

Picgo排障

写Blog时发现图片辅助Picgo出现问题,报错如下:

JavaError

重装Picgo失败后决定重装Java

Java重新安装

Java官网中下载JDK,然后安装在默认位置(以C:\Program Files\Java\jdk-18.0.1.1为例)

环境变量

写入变量名为JAVA_HOME值为C:\Program Files\Java\jdk-18.0.1.1

写入变量名为CLASSPATH值为C:\Program Files\Java\jdk-18.0.1.1

PATH变量中写入记录C:\Program Files\Java\jdk-18.0.1.1

CMD中输入java返回提示信息视为安装成功

显然,上述办法也失败了

随便删点什么

于是顺着报错路径去删掉了整个AppData下的picgo文件夹再重装,解决。

Github排障

SSH问题

修好Picgo后得去重新获取token,不小心删掉了Github的SSH,在./user/name/.ssh的用户文件夹下可以发现之前创建的id_rsa.pub公钥,重新在Github中添加公钥即可

获取token

在账户设置setting页面最底下的开发者设置Developer Setting可以找到私人验证Personal access token,新建一个,权限勾选repo即可

设置结果