zoukankan      html  css  js  c++  java
  • python学习之jieba库和yield生成器以及迭代器

    一、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,' ')
    
  • 相关阅读:
    【C#】枚举和字符串以及数字之间的互相转换
    MySQL中int(M)和tinyint(M)数值类型中M值的意义
    C# 将数组拼接为字符串 string.Join 的使用
    MySQL-locate()函数
    C# 4.0 dynamic用法,并且与 var, object的区别
    Go语言 go get 找不到 google.golang.org/protobuf/encoding/prototext 解决办法
    Go语言 中逗号ok模式
    MySQL数据库面试题(2020最新版)
    .Net Core 3.0开源可视化设计CMS内容管理系统建站系统
    SQL Server 全文搜索/全文索引
  • 原文地址:https://www.cnblogs.com/BASE64/p/10956302.html
Copyright © 2011-2022 走看看