zoukankan      html  css  js  c++  java
  • NLP&Python笔记——列表/字符串基础操作与FreqDist类

    一. 列表&字符串

    1. 列表 list [ ]

    列表是python中使用最频繁的数据类型。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表。

    方法

    描述

    list.append(x)

    把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。

    list.extend(L)

    通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。

    list.insert(i,x)

    在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x)。

    list.remove(x)

    删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。

    list.pop([i])

    从列表的指定位置删除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被删除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)

    list.clear()

    移除列表中的所有项,等于del a[:]。

    list.index(x)

    返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。

    list.count(x)

    返回 x 在列表中出现的次数。

    list.sort()

    对列表中的元素进行排序。

    list.reverse()

    倒排列表中的元素。

    list.copy()

    返回列表的浅复制,等于a[:]。

    List1 + List2

    把后一个列表连接到前一个列表后面,返回一个列表。

    List1 * n

    将列表复制n遍,返回一个列表。

    ‘sep’.join(List)

    以sep作为分隔符,将seq所有的元素合并成一个新的字符串

    2. 字符串 String

    符号:单引号(' )、双引号(" )、三引号(''' """)均可

    一些对列表的操作也能用在字符串上。

    分割:String.split(str) 通过指定分隔符str对字符串进行切片。

     

    二. 频率分布类FreqDist

    利用nltk统计频率分布,可以使用频率分布类FreqDist,其中常用函数如下:

    例子

    描述

    fdist=FreqDist(samples)

    创建包含指定样本的频率分布

    fdist.inc(sample)

    增加样本

    fdist[‘monstrous’]

    计数给定样本出现的次数

    fdist.freq(‘monstrous’)

    给定样本的频率

    fdist.N()

    样本总数

    fdist.keys()

    以频率递减顺序排序的样本链表

    for sample in fdist:

    以频率递减的顺序遍历样本

    fdist.max()

    数值最大的样本

    fdist.tabulate()

    绘制频率分布表

    fdist.plot()

    绘制频率分布图

    fdist.plot(cumulative=True)

    绘制累计频率分布图

    fdist < fdist2

    测试样本在fdist中出现的频率是否小于fdist2

    示例程序:

    from nltk.book import *
    fdist1 = FreqDist(text1)
    print(fdist1)
    v1 = list(fdist1.keys())    # 按词频排序的结果
    print(v1[:50])              # 取前50的词
    v2 = list(fdist1.hapaxes()) # 只出现1次的词
    print(v2)
    print(text1.collocations()) # 寻找搭配词

     

    三. 数据的选择处理

    Python中对数据的选择处理有一个通用模板:   v = [f(w) for w in text if condition]

    应用这个模板,可以对数据进行一些指定操作:

    (1)取长度超过15的词

    long_words = [w for w in set(text1) if len(w)>15]

    (2)取长度超过15并且出现频次超过2的词

    long_words = [w for w in set(text1) if len(w)>15 and fdist1[w]>2]

    (3)去掉标点符号

    english_punctuations = [',', '.', ':', ';', '?', '(', ')', '[', ']', '&', '!', '*', '@', '#', '$', '%']
    text_list = [word for word in text_list if word not in english_punctuations]

    (4)去掉停用词

    stops = ['hi', 'ha', 'lol', 'oh']
    text_list = [word for word in text_list if word not in stops]

    (5)去掉非字母元素

    text_list = [word.lower() for word in text_list if word.isalpha()]

    (6)统计时不重复计算大小写不同的词

    text_list = set([word.lower() for word in text_list])

    选择处理时,可以借助以下词汇比较运算符

    函数

    含义

    s.startswith(t)

    测试s是否以t开头

    s.endswith(t)

    测试是否以t结尾

    t in s

    测试s中是否含有t

    s.islower()

    测试s中所有字符是否都是小写字母

    s.isupper()

    测试s中所有字符是否都是大写字母

    s.isalpha()

    测试s中所有字符是否都是字母

    s.isalnum()

    测试s中是否都是字母或数字

    s.isdigit()

    测试s中所有字符是否都是数字

    s.istitle()

    测试s是否首字母大写(s中所有的词都首字母大写)

  • 相关阅读:
    初识ABP vNext(8):ABP特征管理
    初识ABP vNext(7):vue身份认证管理&租户管理
    初识ABP vNext(6):vue+ABP实现国际化
    初识ABP vNext(5):ABP扩展实体
    初识ABP vNext(4):vue用户登录&菜单权限
    【Flutter 混合开发】嵌入原生View-iOS
    【Flutter 混合开发】嵌入原生View-Android
    使用Flutter完成10个商业项目后的经验教训
    谷歌发布Flutter Alpha:支持Windows
    【Flutter 实战】大量复杂数据持久化
  • 原文地址:https://www.cnblogs.com/yucen/p/9343549.html
Copyright © 2011-2022 走看看