维基百科中文语料分析(附实际评论案例)
Lz的研究方向大概定了下来,应该会涉及到评论文本分析,所以最近导师让我看看文本数据预处理这块,然后我上Github上找到了这个项目,跟着做了一下。然后通过自己爬取的某多多平台评论数据进行了实际操作,最后也是能够出结果。(这个出结果的意思是能够把文本数据转化成词向量,并且可以得出某词的余弦相似度,随后的主题提取,情感分析我还在看)。话不多说,直接进入正题。
这个维基百科中文语料库在网上有很多资源,我就不提供渠道了,我就把我的这个文本放到下面百度网盘链接里了,需要的自取。
链接:https://pan.baidu.com/s/1bax33-wAbxyUokah9YhaeA
提取码:zxt1
这个语料库有点大,但是还是有的词他不存在,所以中华文化真的是博大精深。
我将整个过程分为以下步骤:
1、语料库格式转换
下载的维基百科语料库是xml格式,需要转换成txt格式;且部分语料是繁体,所以需要转换成简体。但是我这份代码直接一步搞定,直接从xml格式转换成txt简体中文,不需要opencc什么的软件,虽然我也费劲巴拉的下载了这个opencc,但最后还是看不懂网上的教程,最后好在发现了这份代码,但是作者找不到了,如果有小伙伴发现的话,希望能偶提醒我一下。
2、分词
本文采用的是jieba分词,效果很好,很容易调用。
3、使用word2vec来训练文本词向量模型
注意这个word2vec是针对这个维基百科文本数据进行的训练,所以只有这份数据里出现过得词才会有对应的词向量,如果你有新的词,最后可以通过增量训练的方式加入进去,我昨天也是搞了很久这个增量训练,但是没成功。
强烈建议这三步分为三个子文件分别执行,不然每进行一次就要转换很久格式,第一步的语料库格式转换我是花费了80分钟才整完,所以把这几步单独整,可以避免很多麻烦事。
步骤就先这三步吧,下面看看代码吧。
1、语料库格式转换(这个是在网上找的一份代码,如有知道出处的可以提醒我一下,谢谢啦~)
其中,extract_pages函数后面是需要放入你自己语料库的文件位置,别弄错了哦,虽然网上很多教程已经很详细了,但是针对我们初学者,很多细节是我们注意不到的,但是这些细节在网上那些大佬看来是不用提起的操作,但是对于我们来说可能需要想半天,找很久的教程,这个我真的深有感触。
# -*- coding: utf-8 -*-
import imp
import sysimp.reload(sys)
# sys.setdefaultencoding('utf8')from gensim.corpora.wikicorpus import extract_pages, filter_wiki
import bz2file ####记得安装呀!!!
import re
from opencc import OpenCC ####修改过
from tqdm import tqdm
import codecswiki = extract_pages(bz2file.open(r"C:\Users\28493\Downloads\zhwiki-latest-pages-articles.xml.bz2"))
cc = OpenCC('t2s') ###修改过def wiki_replace(d):s = d[1]s = re.sub(':*{\|[\s\S]*?\|}', '', s)s = re.sub('<gallery>[\s\S]*?</gallery>', '', s)s = re.sub('(.){{([^{}\n]*?\|[^{}\n]*?)}}', '\\1[[\\2]]', s)s = filter_wiki(s)s = re.sub('\* *\n|\'{2,}', '', s)s = re.sub('\n+', '\n', s)s = re.sub('\n[:;]|\n +', '\n', s)s = re.sub('\n==', '\n\n==', s)s = u'【' + d[0] + u'】\n' + sreturn cc.convert(s).strip() ####修改过i = 0
f = codecs.open('00000wiki.txt', 'w', encoding='utf-8') ####自己改名字就好了!叫狗蛋都行
w = tqdm(wiki, desc=u'已获取0篇文章')
for d in w:if not re.findall('^[a-zA-Z]+:', d[0]) and d[0] and not re.findall(u'^#', d[1]):s = wiki_replace(d)f.write(s + '\n\n\n')i += 1if i % 100 == 0:w.set_description(u'已获取%s篇文章' % i)f.close()
这个整完后会在你的pycharm左边文件界面出现一个 txt 文件,本文的是“00000wiki.txt”,当然这个名字可以随便改。
2、分词
jieba分词真的好用,名字起的也是很形象。代码如下
其中jieba在使用时会用到两个文件,一个是停用词文件,一个是jieba的词典库。这两个是公用的,应该用到jieba这个包就一定会用到这两个文件,文件放到下面百度网盘链接里了。在代码中对应的是“jieba.set_dictionary”和“stopword_set”下面的文件。
链接:https://pan.baidu.com/s/1yxdC_aK10K859QDW7Ke_Dw
提取码:zxt1
import jieba
import logging
def main():logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)# jieba custom setting.jieba.set_dictionary(r"C:\Users\28493\OneDrive\桌面\word2vec实战教学\jieba_dict\dict.txt.big")# load stopwords setstopword_set = set()with open(r"C:\Users\28493\OneDrive\桌面\word2vec实战教学\jieba_dict\stopwords.txt", 'r', encoding='utf-8') as stopwords:for stopword in stopwords:stopword_set.add(stopword.strip('\n'))output = open('wiki_seg.txt', 'w', encoding='utf-8')# 最后输出的文件名称with open('00000wiki.txt', 'r', encoding='utf-8') as content:for texts_num, line in enumerate(content):line = line.strip('\n')words = jieba.cut(line, cut_all=False)for word in words:if word not in stopword_set:output.write(word + ' ')output.write('\n')if (texts_num + 1) % 10000 == 0:logging.info("已完成前 %d 行的斷詞" % (texts_num + 1))output.close()if __name__ == '__main__':main()
最后会得到一个分词完成后的文件,本文中是“wiki_seg.txt”。同样也会出现在你的pycharm界面左方。
3、词向量模型训练
这一步,只要把分词后的“wiki_seg.txt”放进去就行,代码中的“wiki_seg.txt”是个地址,应该不是词,所以还是在左边右击这个文件,最后复制文件地址。
import logging
from gensim.models import word2vec, Word2Vecdef main():logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)sentences = word2vec.LineSentence("wiki_seg.txt")model = word2vec.Word2Vec(sentences, vector_size=250)# 保存模型,供日後使用model.save("word2vec.bin")# 模型讀取方式# model = word2vec.Word2Vec.load("your_model_name")if __name__ == '__main__':main()
word2vec_model = Word2Vec.load("word2vec.bin")
# word2vec_model = word2vec.Word2Vec.load('word2vec.bin')
word2vec_model.wv.save_word2vec_format('word2vec.txt', binary=False)
# 查看词向量
print('北京:', word2vec_model.wv['北京'])
A = word2vec_model.wv['北京']
sim_words = word2vec_model.wv.most_similar(u'北京')
for w in sim_words:print(w)
sim_words1 = word2vec_model.wv.similarity(u'北京', u'天津')
print(sim_words1)
训练完成后模型可以保存为很多形式,本文保存成“word2vec.bin”这个是模型名称,应该是打不开的;所以把它的格式进行转换,转换成下面的“word2vec.txt”或者“word2vec.vector”这俩是可以直接打开,可以看到对应的词向量,文件最终都会出现在pycharm界面的左边。
然后,你就可以输入随意的词来输出它的词向量矩阵,以及输出与这个词在本文档中相似度最高的词,以及探究随意给定的两个词之间相似度是多少。这里都用的是余弦相似度。
至于在词向量设置好之后怎么应用我现在也不太清楚。老师让我把销售数据整理成矩阵形式,文本数据要么转换成词向量形式进行词嵌入,要么通过词典方法进行分词,主题提取、情感分析。这些我现在都是一头雾水。
下面我用我自己爬取的某多多平台商品数据进行实验,数据大概是200条,爬去下来时excel形式,需要手动把它复制贴到文本文档中,所以对于我们做中文的评论分析,什么xml转换成txt,然后再繁转简其实都是不需要的,即本文的第一步其实是不经常用到的。最后贴到文本文档中的数据格式如下图所示
将这个文本先进行分词,带入到第二步的代码中,如下所示,最终输出的格式名称是Pdd.txt
import jieba
import logging
def main():logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)# jieba custom setting.jieba.set_dictionary(r"C:\Users\28493\OneDrive\桌面\word2vec实战教学\jieba_dict\dict.txt.big")# load stopwords setstopword_set = set()with open(r"C:\Users\28493\OneDrive\桌面\word2vec实战教学\jieba_dict\stopwords.txt", 'r', encoding='utf-8') as stopwords:for stopword in stopwords:stopword_set.add(stopword.strip('\n'))output = open('Pdd.txt', 'w', encoding='utf-8')with open(r"C:\Users\28493\OneDrive\桌面\拼多多批发数据\评论.txt", 'r', encoding='utf-8') as content:for texts_num, line in enumerate(content):line = line.strip('\n')words = jieba.cut(line, cut_all=False)for word in words:if word not in stopword_set:output.write(word + ' ')output.write('\n')if (texts_num + 1) % 10000 == 0:logging.info("已完成前 %d 行的斷詞" % (texts_num + 1))output.close()if __name__ == '__main__':main()
分词后的结果如下图所示
此时再进行第三步,将分好词的文本放入到word2vec中训练,代码如下
import logging
from gensim.models import word2vecdef main():logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)sentences = word2vec.LineSentence("Pdd.txt")model = word2vec.Word2Vec(sentences, vector_size=250)# 保存模型,供日後使用model.save("Pdd.model")model.wv.save_word2vec_format('Pdd.vector')# 模型讀取方式# model = word2vec.Word2Vec.load("your_model_name")if __name__ == '__main__':main()
word2vec_model = word2vec.Word2Vec.load('Pdd.model')
# 查看词向量
print('价格:', word2vec_model.wv['儿子'])
A = word2vec_model.wv['儿子']
sim_words = word2vec_model.wv.most_similar(u'儿子') # 这是探究与‘北京这个词相似度最高的几个词’
for w in sim_words:print(w)
sim_words1 = word2vec_model.wv.similarity(u'儿子', u'舒服') # 这是探究两个词之间的相似度
print(sim_words1)
最终保存为Pdd.model,然后就可以查看不同词的相关数据了。
以上就是我的所有分享,有很多都是在网上找的代码,如果有冒犯到作者或者其他人的,还望海涵,通知我我会及时改正。
不说了,干饭去了,希望大家赏个小心心,谢谢同志们~
维基百科中文语料分析(附实际评论案例)相关推荐
- 用Python3.6来做维基百科中文语料
首先介绍一下word2vec 参考http://www.cnblogs.com/iloveai/p/word2vec.html 2013年,Google开源了一款用于词向量计算的工具--word2ve ...
- wiki中文文本语料下载,在维基百科中文语料训练Word2vec and doc2vec 文本向量化代码示例
首先下载wiki中文语料(大约1.7G) https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 ...
- windows下使用word2vec训练维基百科中文语料全攻略!(三
全文共1552个字,7张图,预计阅读时间8分钟. 训练一个聊天机器人的很重要的一步是词向量训练,无论是生成式聊天机器人还是检索式聊天机器人,都需要将文字转化为词向量,时下最火的词向量训练模型是word ...
- windows下使用word2vec训练维基百科中文语料全攻略!(二)
全文共454个字,3张图,预计阅读时间5分钟. 训练一个聊天机器人的很重要的一步是词向量训练,无论是生成式聊天机器人还是检索式聊天机器人,都需要将文字转化为词向量,时下最火的词向量训练模型是word2 ...
- 维基百科简体中文语料训练word2vec词向量
步骤: 1.下载维基百科中文语料 2.使用工具从压缩包中抽取正文文本 3.将繁体字转简体字 4.分词 5.训练模型 6.测试模型 1.下载维基百科中文语料 语料下载地址:https://dumps.w ...
- wiki维基百科各种语料数据下载
wiki维基百科常用语料下载路径 英文语料路径: https://dumps.wikimedia.org/enwiki/ 中文语料路径: https://dumps.wikimedia.org/zhw ...
- Python Djang 搭建自动词性标注网站(基于Keras框架和维基百科中文预训练词向量Word2vec模型,分别实现由GRU、LSTM、RNN神经网络组成的词性标注模型)
引言 本文基于Keras框架和维基百科中文预训练词向量Word2vec模型,分别实现由GRU.LSTM.RNN神经网络组成的词性标注模型,并且将模型封装,使用python Django web框架搭建 ...
- 【NLP】维基百科中文数据训练word2vec词向量模型——基于gensim库
前言 本篇主要是基于gensim 库中的 Word2Vec 模型,使用维基百科中文数据训练word2vec 词向量模型,大体步骤如下: 数据预处理 模型的训练 模型的测试 准备条件: Window ...
- 维基百科中文创始人_维基百科的创始人正在建立一个社区运营的新闻网站
维基百科中文创始人 Back in 2001, Jimmy Wales co-founded Wikipedia with the mission of "empowering and en ...
- 【用户行为分析】 用wiki百科中文语料训练word2vec模型
本文地址: http://blog.csdn.net/hereiskxm/article/details/49664845 前言 最近在调研基于内容的用户行为分析,在过程中发现了word2vec这个 ...
最新文章
- 【nginx】从主页搭建看nginx常用配置
- ffmpeg封装h264裸流为mp4文件,视频播放速度特别慢
- datatable 导入mysql 解决_将DataTable中的数据导入到数据库中
- OpenCV Mat遍历的方法
- 点击预览,有时可以打开,有时不可以
- deepin中mysql数据库的连接_教你如何典雅的用Python连接MySQL数据库
- 距离传感器控制灯泡代码_生迪全彩智能 LED 灯泡体验评测
- y电容如何选型_高压并联补偿电容器基础及运行管理
- Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
- [HDOJ]1001. Sum Problem
- cad导出pdf_“又”一款免费的CAD批量导出PDF、DWF、PLT神兵利器
- 设计模式相关书籍推荐
- 计算机光盘无法格式化,怎么格式化光盘啊??求解!!
- 银行卡四要素验证API接口用法简介
- Justinmind使用教程(2)——计算表达式及条件使用方法
- 幼儿园体育游戏电子计算机教案,【小班体育活动】_小班体育教案100篇_小班体育游戏活动教案5篇...
- 80%菜鸟保税仓可实现送货上门 实现进口全链路、多场景、端到端物流解决方案...
- 新闻资讯android版
- python列表两两相减_python对向量构成的多维数组中的两个元素进行两两相减
- 5G之前,千兆级LTE在铺路,LTE是物联网最理想的连接技术
热门文章
- 分析google关键词de工具
- Excel快速填充小技巧,这几个技能你会了吗
- vue项目退出登录清除 store 数据
- 哪些英语用法是普通中国学生最生疏的?
- 梦幻手游显示连接服务器,?梦幻西游手游无法连接服务器怎么办 无法访问服务器解决方法?...
- server 2008 r2中无法启用“网络发现”
- Yate for Mac音乐标签管理工具
- 编程界的十大天神,都来拜一拜吧
- 智能营销笔记本全网最低价来了 代理送后台
- html快捷方式指定浏览器打开网页,设置桌面网址快捷方式,并默认使用指定浏览器打开...