IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 无监督关键短语的生成问题博客06--create_vocabulary.py的分析 -> 正文阅读

[人工智能]无监督关键短语的生成问题博客06--create_vocabulary.py的分析

2021SC@SDUSC

本文我们将分析create_vocabulary.py文件,该文件主要的功能是创立了一个词典,统计了文本的所有词和词出现的次数,以便后续的指标的计算和处理,将得到的结果保存到vocab_kp20k.npy文件中。首先我们来看一下该文件的结构。

?

一、create_vocabulary.py结构

?图1:create_vocabulary.py的第一部分和相关资源的下载

首先是一些包的引入,Counter基于可迭代对象实现计数,我们将依次对每个词计数,依旧是引入了nltk包,里面有很多自然语言处理相关的函数接口。通过nltk下载了英文的stopwords停词赋给stoplist,stopwords一般指没有实意的词,如英文语句中的the,is等。

图2:create_vocabulary.py的第二部分

第二部分写了一个类Vocabulary,是对词典的一个封装,提供了对词典进行处理的相关函数。

  • init函数:vocabulary对象的初始化函数
  • add_word函数:实现了向词典对象中添加词及相应索引
  • call函数:查找词典中是否有word单词,若没有返回unk,若有单词,返回单词的索引
  • len函数:返回词典的长度,即一共收纳了多少词

之后还写了build_vocab函数,该函数完成了词典的构造,设置了阈值为3,即只记录语料中出现了超过三次的单词。里面会有对vocabulary对象的相关处理。

代码的第三部门就是main函数的实现和对结果的保存,将在下文仔细分析。

?

二、关于create_ vocabulary_demo.py的分析?

在分析源文件之前, 我们先来分析一个创建词典的demo文件以大致了解词典创建的思路和方法。我们采用测试文本test.txt进行词典demo的构建,该测试文本选自wiki文本数据的一小部分,只是为了演示demo,因此这里不再设置阈值,而是列出所有出现的单词。测试文本的内容见下图。

图3:test.txt

将test.txt与create_ vocabulary_demo.py放在同一目录下后读入测试文件,开始词典的构建,create_ vocabulary_demo.py的完整代码如下。

import string

filename=open('test.txt')
# 打开测试文本
filelines=filename.readlines()
# 按行读入
filename.close()

word_cnt={}
# 初始化word_cnt为空词典

for line in filelines:
    line=line.rstrip()
    line=line.lower() # 将所有单词转为小写处理
    word_list=line.split(" ") # 以空格作分词处理
    for word in word_list:
        if word in word_cnt:
            word_cnt[word]+=1
        else:
            word_cnt[word]=1

result=sorted(word_cnt.items(),key=lambda d:d[1],reverse=True) #将结果按词频降序排列
print(result) # 输出构造的词典

对于test.txt中的每一行,首先将英文转为小写统一处理,再以分词得到了由一个一个英语单词组成的列表word_list,这里没有用stopwords对一些停词进行处理。之后构造词典,对于列表word_list中的每一次词word(也就是列表中的元素),若它还未出现在词典word_cnt中,就在词典中加入该词并令其出现次数为1,若已出现,则令其出现次数加一。

我们来分析将结果排序的那一行代码,首先这里用了一个迭代器,dict.items()——an interator over the (key, value) items of D,之后用到了匿名函数。lambda x:x+1表示若输入为x,将其转化为x+1输出,这里lambda d:d[1]表示若访问(key,value),则输出value(即d[1],d[0]表示key)。这里的d可以是任意变量名,用作指代dict.items()返回的变量。reverse=True表示按值进行从大到小的排序;reverse=False表示按值进行从小到大的排序。

demo的输出结果如下:

图4:create_ vocabulary_demo.py的输出结果

?

?三、关于create_ vocabulary.py的分析?

在分析了demo之后,我们就很容易分析源文件了。不过需要注意的是,这里并不统计每个词出现了多少次,而是希望给每个词一个索引,用集合的方式,可以用索引找到单词,也可以用单词找到索引。我们首先分析vocabulary类。

class Vocabulary(object):
    def __init__(self):
        self.word2idx = {}
        self.idx2word = {}
        self.idx = 0

首先是初始化的init函数,这里首先将idx初始化为0,?也就是词典中还没有单词。有两个集合一个是word2idx用来是词找索引,idx2word用索引找词,都初始化为空集合。

def add_word(self, word):
    if not word in self.word2idx:
        self.word2idx[word] = self.idx
        self.idx2word[self.idx] = word
        self.idx += 1

add_word函数向词典中添加单词,如果参数word不在集合word2idx中,则?

def __call__(self, word):
    if not word in self.word2idx:
        return self.word2idx['<unk>']
    return self.word2idx[word]
def __len__(self):
    return len(self.word2idx)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:37:57  更:2021-11-19 17:40:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/24 4:18:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计