一、jieba库的三种模式和函数
首先得安装jieba库
在官网https://pypi.org/project/jieba/
#files下载源文件,保存在python子文件夹Scripts文件夹里面
打开命令行,进入到下载的jieba库源文件的setup.py文件的上一级文件目录下
输入命令python setup.py install等待安装即可
import jieba
text = ("test.txt","r",encoding = "utf-8")#注意,这里的编码方式一定要是utf-8,否则读取文本会出错
#精确模式,这个会最准确的将文本中的词语切割出来,没有冗余
words1 = jieba.lcut(text)
#全模式,会将所有可能出现的词语列举出来,有冗余
words2 = jieba.lcut(text,cut_all = True)
#搜索引擎模式,在精确模式上,再次对词语进行拆分
words3 = jieba.lcut_for_search(text)
#jieba库的函数,向jieba库的分词词库里面增加切割的词语
jieba.add_words(string)
#例如
words1 = jieba.lcut("中国是一个伟大的国家")
#输出words1:['中国', '是', '一个', '伟大', '的', '国家']
words2 = jieba.lcut("中国是一个伟大的国家",cut_all = True)
#输出words2:['中国', '国是', '一个', '伟大', '的', '国家']
words3 = jieba.lcut_for_search("中华人民共和国是伟大的")
#输出words3:['中华', '华人', '人民', '共和', '共和国', '中华人民共和国', '是', '伟大', '的']
jieba.lcut("中国是一个美丽的国家")
#输出:['中国', '是', '一个', '美丽', '的', '国家']
jieba.add_words("美丽的国家")
jieba.lcut("中国是一个美丽的国家")
#再次输出:['中国', '是', '一个', '美丽的国家']
二、yield生成器
#yield生成器generator所创建的是一个算法,只有通过next()方法调用才会输出结果,而它在调用到最后一个就会停止调用,所以这需要一个变量来接收
#创建生成器的方法有很多
#方法一:
L = [x*x for x in range(10)]#这是普通的列表
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]#这是输出
d = (x*x for x in range(10))#将中括号改成小括号就可以创建一个生成器
<generator object <genexpr> at 0x0000018E70E38B10>#这是直接输入d的结果
0
1
4
...
以上是依次调用next(d)输出的结果,这是不是很麻烦,因为手动调用需要很多次,所以现实中都用for循环调用,因为generator所返回的是一个可迭代的对象
for i in d:
print(i)
#方法二:
#可以在函数中使用yield生成器,这样该函数就变成了一个生成器
#例如斐波拉契数列,max是要输出的个数,n用来计算
def fib(max):
n,a,b = 0,0,1
while (n < max):
print(b)
a,b = b,a+b
n += 1
fib(5)#直接调用,会直接输出结果
#使用yield生成器创建斐波那契数列函数生成器
def fib(max):
n,a,b = 0,0,1
while (n < max):
yield b
a,b = b,a+b
n += 1
fib(5)#不会输出数列,而是输出fib的类型:<generator object fib at 0x0000018E756B01B0>
next(fib(5))#正确的调用方式
#方法三,yield生成器与函数的关系,函数在执行到yield语句时就会返回,再次调用函数时会从上次yield语句的下一句开始执行
def ofo():
print("step 1")
yield 1
print("step 2")
yield 2
print("step 3")
yield 3
o = ofo()#o用来接收generator算法
o.next()#这个输出方法在python3中不适用
next(o)#这个才是正确的调用方法
#参考网站:https://www.liaoxuefeng.com/wiki/897692888725344/92302968513862
三、迭代器
#只要是可迭代的,无论是否有下标,都可以迭代;任何实现了next()方法的都可以被称为迭代器
#字典的迭代,默认情况下字典迭代的是key,如果要迭代value,可以用for value in dict.values();如果要迭代键和值,可以用for keys,values in dict.items();迭代key,可以用for key in dict()
for keys,values in {'a':1,"b":2,"c",3}.items():
print(keys,values)
#输出
a 1
b 2
c 3
#列表的迭代
for i in [1,2,3,4,5,6]:
print(i)
#输出
1
2
3
...
#字符串的迭代
for i in 'ABC':
print(i)
#输出
A
B
C
#集合的迭代
s = set([1,2,3])#创建一个集合
for x in s:
print(x)
#输出
1
2
3
#如何判断对象是否可迭代Iterable?通常是通过collections模块的Iterable类型来判断该对象是否可迭代
from collections import Iterable
isinstance('abc',Iterable)
#True
isinstance(123,Iterable)
#False,整数不能迭代
isinstance([1,2,3],Iterable)
#True
#for循环的本质就是通过不断调用next()函数实现的
for x in [1,2,3]:
pass
#创建一个可迭代Iterato的对象,使用iter()方法
#完全等价于
it = iter([1,2,3])
while True:
try:
x = next(it)#通过next()方法获取下一个值
except StopIteration:#到达结尾时引发异常StopIteration就退出循环
break
四、python如何去掉标点符号
#方法一
string.replace('需要被替换的一个标点符号','用来替换的标点符号')
string.replace('?',' ')#将问号用空格来替换
#方法二
for i in "各种标点符号":
string.replace(i,' ')#将各种标点符号用空格来替换
for i in ",.?:;!":
string.replace(i,' ')