N8 - 使用Word2Vec进行文本分类



由于K同学调整了目录,本来这应该是N6,现在是N8了,中间增加了两节内容,在这里一并打卡了。

N2 构建词典

其实在前面的章节打卡中,也涉及到了构建词典,但是没有一个完整的顺序,这节把构建词典的过程详细的梳理了一下。

1. 导入数据

使用自定义的数据,我直接从网络小说里面截取一段出来。然后按句拆开放到一个列表里。

# 数据
data = [
    "我这才想起今天的米彩在上海参加了一天的商务会谈,后又不顾疲惫来酒吧救场,心中除了感谢更过意不去。",
    "CC推了推我说道:“昭阳,你不送送米儿吗?”",
    "我赶忙点头说道:“嗯,我送她出去。”说着便从米彩手中接过手提包帮她提着。",
    "米彩说了声“谢谢”后在我之前向酒吧外走去,我跟上了她说道:“你老和我说谢谢,弄得我们之间多生分吶!”",
    "“有吗?”"
    "米彩心不在焉的回答,让我无从去接她的话,只是在沉默中跟着她的脚步向外面走着。",
    "忽然我们的脚步止于酒吧外面的屋檐下,此刻天空竟然飘起了漫天的雪花,这个冬天终于下雪了。",
    "我下意识的感叹,道:“下雪了!”",
    "“嗯!”米彩应了一声,却比我更会珍惜这样的画面,从手提包里拿出卡片相机将眼前银装素裹的世界定格在了镜头里,然后离开屋檐,走进了漫天的雪花中。"
]
# 把人名弄成自定义字典
user_dictionary = [
    "CC", "昭阳","米儿", "米彩"
]

2. 设置分词器

import jieba
tokenizer = jieba.lcut
jieba.load_userdict(user_dictionary)

3. 去除标点和停用词

编写一个过滤函数去除标点符号

import re
def remove_punctuation(text):
	return re.sub(r'[^\w\s]', '', text)

维护一个停用词列表,编写停用词过滤函数

stopwords = ['的', '这', '是']
def remove_stopwords(words):
	return [word for word in words if word not in stopwords]

4. 文本迭代器

编写一个迭代器,将文本转化成返回单词

def yield_tokens(data_iter):
	for text in data_iter:
		# 去除标点符号
		text = remove_punctuation(text)
		# 分词
		words = tokenizer(text)
		# 去除停用词
		words = remove_stopwords(words)
		yield words

5. 构建词典

from torchtext.vocab import build_vocab_from_iterator
# 遍历所有的分词结果,构建词典
vocab = build_vocab_from_iterator(yield_tokens(data), specials=['<unk>'])

# 将未知的词汇设置为<unk>
vocab.set_default_index(vocab['<unk>'])

build_vocab_from_iterator用来从一个可迭代对象中统计token的频次,并返回一个词典
它的原型如下

def build_vocab_from_iterator(iterator: Iterable,
							  min_freq: int = 1,
							  specials: Optional[List[str]] = None,
							  special_first: bool = True,
							  max_tokens: Optional[int] = None
							  )

参数解释如下:

  • iterator: 用于创建词典的可迭代对象
  • min_freq: 最小频数,文本中的词汇只有频数大于min_freq的才会保留下来,出现在词典中
  • specials: 特殊标志,值是一个字符串的列表。用于在词典中添加一些特殊的token,例如我们使用<unk>来代表字典中不存在的token。
  • special_first: 表示是否将special token放在词典顺序的最前面(也就是Index小),默认是True
  • max_tokens: 限制词典词汇的最大数量

备注:除了special_token之外的token是按词频来降序排列的,如果两个词的频次一样,则按出现顺序。
set_default_index可以设置默认使用的token,比如添加一个<unk>设置为默认。

6. 文本数字化

# 打印词典中的内容
print('词典大小:', len(vocab))
print('词典内部映射:', vocab.get_stoi())

text = "外面是冬天"
words = remove_stopwords(jieba.lcut(text))
print()
print('jieba分词后的文本:', jieba.lcut(text))
print('去除停用词后的文本:', words)
print('数字化后的文本:', [vocab[word] for word in words])

词典结果

N3 NLP中的数据集构建

torch.utils.data 是pytorch中用于数据加载和预处理的模块,其中包含DatasetDataLoad

构建一个基于Python爬虫技术的豆瓣影评分析系统是一项涉及多个技术领域的复杂任务。首先,你需要熟练掌握Python编程语言,特别是熟悉其在数据分析和网络爬虫方面的应用。下面是一个大致的步骤指南,帮助你从零开始搭建这样的系统: 参考资源链接:[Python爬虫实现的豆瓣影评分析系统](https://wenku.csdn.net/doc/j73z02n8x4) 1. 环境准备:确保你的计算机上安装了Python环境以及相关库,如requests、BeautifulSoup、Scrapy、pandas、jieba、matplotlib、seaborn、sklearn等。 2. 数据抓取:根据豆瓣网站的API使用规则,使用requests库或Scrapy框架来编写爬虫脚本,获取影评数据。注意遵守网站的robots.txt协议和合理控制爬取频率,避免对网站造成过大压力。 3. 数据清洗:使用pandas库对获取的影评数据进行预处理,包括去除无用字段、处理缺失值、去除噪声数据、以及对文本进行分词和去除停用词等。 4. 情感分析:运用自然语言处理技术对清洗后的文本进行情感分析。这可以通过构建或使用现有的情感分析模型来实现,如基于TF-IDF、词向量模型Word2Vec或GloVe和机器学习算法SVM、LSTM等。 5. 数据可视化:利用matplotlib、seaborn等库对分析结果进行可视化,例如制作情感词云、情感得分直方图、评分分布图等,以直观展示分析结果。 在整个过程中,你需要不断地测试、调试和优化你的代码,确保数据的准确性和系统的稳定性。此外,你还需要考虑系统的可扩展性,以便未来可以轻松添加新功能或处理更大规模的数据集。 对于想要深入了解构建过程和细节的用户,强烈建议阅读《Python爬虫实现的豆瓣影评分析系统》这篇论文。该文档不仅详细介绍了每个步骤的实施方法,还包括了系统设计的全面考量,是学习如何从零开始构建此类系统的宝贵资源。 参考资源链接:[Python爬虫实现的豆瓣影评分析系统](https://wenku.csdn.net/doc/j73z02n8x4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值