• 【Python自然语言处理】第一章学习笔记——搜索文本、计数统计和字符串链表


    这本书主要是基于Python和一个自然语言工具包(Natural Language Toolkit, NLTK)的开源库进行讲解

    NLTK

    • 介绍:NLTK是一个构建Python程序以处理人类语言数据的平台,它为50多个语料库和词汇资源(如WordNet)提供了易于使用的接口,以及一套用于分类、标记、解析和语义推理等的文本处理库。
    • 配置:在安装Python和Anaconda之后直接
    import nltk
    

      本文是使用jupyter notebook进行编译。

    函数:

    1. 搜索文本

      1. 搜索单个词出现的地方:A_text.concordance("A_word")
      2. 搜索跟一个词出现在相似上下文的所有词:A_text.similar("A_word")
      3. 搜索两个词出现的相同上下文,也就是分别先找到这两个词的上下文,然后取交集:A_text.common_contexts{["word1", "word2"]}
      4. 用离散图表示一个词在文本中出现的位置,横坐标为从文本开头算起的词数目,也就是一个词在文本中出现的位置,每一行为一个文本,纵坐标为要搜索的单词(可以是多个,用逗号隔开):A_text.dispersion_plot(["w1", "w2", "w3"]
    2. 生成文本:根据一篇文本生成相似风格的新文本。A_text.generate() 这个功能已经被注释掉,不能使用,就先当不存在吧。。。

    3. 计数统计

      1. 统计文本长度即单词和标点数目:len(A_text)
      2. 统计文本中有多少个不同的单词和标点:先将文本转化为集合得到一个词汇表,由于集合中的元素都不是不重复的,所以可以通过统计集合大小来获取:len(set(A_text)
      3. 可以用sorted函数来有序输出词汇表中的词汇:sorted(set(A_text)
      4. 统计每个单词平均被使用的次数,即文本词汇丰富度:len(A_text)/len(set(A_text)
      5. 统计一个单词在一个文本中的出现次数:A_text.count("A_word")

    文本:

    1. 将文本表示为词链表:sent1=['Call', 'me', 'Ishmael', '.']

      1. 链表的加法为头尾连接两个链表:sent1+sent2; 乘法是复制自己并拼接在一起:sent1*2
      2. 在链表中追加一个元素:sent1.append(""A_word")
      3.  链表的连接:'X'.join(['Monty', 'Python']), X是任意连接符
      4. 链表的分隔:sent1.split(‘X’)
    2. 链表索引,即下标,从0开始

      1. 通过下标定位到某个词:text4[173]
      2. 找出一个词第一次出现时的索引,即下标:text4.index('awaken')
      3. 切片,即从大文本中抽取一个片段,得到一个子链表:text5[16715:16735]。注:
        • 不取第16735个数。
        • 第一个数字省略时表示从头开始取起,第二个省略则表示一直取到末尾
        • 两个值可以都是负数,因为链表是个循环链表,但是起点正值的时候不能超过链表长度,终点可以。
      4. 可以用新内容替换一个片段,新内容长度可小于、等于、大于片段长度

    简单文本统计:

    1. 获取文本中每个词的频次,以键值对的形式存储:FreqDist(A_text)

      1. 获取FreqDist中的key值,以list存储:list(FreqDist(A_text).keys())
      2. 获取FreqDist中的键值对,以dict_items字典存储:FreqDist(A_text).items()
      3. 获取FreqDist中频次为1的key的列表,以list存储:FreqDist(A_text).hapaxes()
      4. 取某个key的频次:FreqDist(A_text)[A_key]。如果是字符,要加引号
      5. 取频次最大的key值:FreqDist(A_text).max()
      6. 取某个key值的频率:FreqDist(A_text).freq(A_key)
      7. 取样本总数:FreqDist(A_text).N()
      8. 绘制频次分布表:FreqDist(A_text).tabulate()
      9. 绘制频次分布图:FreqDist(A_text).plot()
      10. 绘制累积频率分布图:FreqDist(A_text).plot(cumulative=True)
      11. 测试样本在fdist1中出现的概率是否小于fdist2
    2. 寻找长词且高频词

      1.  
    3. 寻找常见词语搭配和双连词:

      1. 枚举所有双连词:list(bigrams(A_text))
      2. 寻找最常见的双连词:A_text.collocations()
    4.  比较两字符
      1. s.startswith(t)
      2. s.endswith(t)
      3. t in s
      4. s.islower():测试s中所有字符是否都是小写字母
      5. s.issupper():大写
      6. s.isalpha():测试s中所有字符是否都是字母
      7. s.isalnum():是否都是字母或数字
      8. s.isdigit():是否都是数字
      9. s.istitile():s中所有词是否都首字母大写
  • 相关阅读:
    毕业设计:专业填写格式
    关于《毕业设计指导记录》的建议
    毕业设计通知
    毕业设计答辩:幻灯片内容制作要点
    Latex 模版生成会议论文 不显示Keywords,而是显示 Index Terms- ,改成Keywords 方法
    mysql information_schema
    C# odbc
    cwRsync 配置文件详解
    Rsync
    openssl rsa 私钥 PKCS8私钥 公钥
  • 原文地址:https://www.cnblogs.com/a-present/p/9350716.html
Copyright © 2020-2023  润新知