基于10个类别假新闻1000篇文章数据训练中文word2vec模型

爬取语料库

利用爬虫爬取百度网页每个类别假新闻10页,共1000篇文章。爬取的类别如下:

 基于10个类别假新闻1000篇文章数据训练中文word2vec模型_第1张图片

数据预处理

汇总

把爬取到的10个txt文件都放在同一个文件夹下,利用程序将这10个txt文件合并在一起。

把汇总的txt文件命名为result.txt。

程序如下:

 file: FileMerage.py
# os模块中包含很多操作文件和目录的函数
import os
# 获取目标文件夹的路径
meragefiledir = os.getcwd() + '\\MerageFiles'
# 获取当前文件夹中的文件名称列表
filenames = os.listdir(meragefiledir)
# 打开当前目录下的result.txt文件,如果没有则创建
file = open('result.txt', 'w')

# 先遍历文件名
for filename in filenames:
    filepath = meragefiledir + '\\' + filename
    # 遍历单个文件,读取行数
    for line in open(filepath):
        file.writelines(line)
    file.write('\n')
# 关闭文件
file.close()

汇总完后的数据如下:

 基于10个类别假新闻1000篇文章数据训练中文word2vec模型_第2张图片

分词去停

利用jieba分词将得到的result.txt文件进行分词去停。这里使用的停词表是哈工大停词表。

import jieba
stopwords={}.fromkeys([line.rstrip()for line in open('stopword.txt','r',encoding='UTF-8')]) #创建并返回一个新字典,
jieba.add_word('原标题',1)
a=open("result.txt",'r').read()
segs=jieba.cut(a, cut_all=False)
final=''
for seg in segs:
    #seg=seg.encode('utf-8')
    if seg not in stopwords:
        final+=' '+seg
print(final)
fpath='F:/word2vec.txt'
with open(fpath, 'a') as f:  # 写入到文本文件中
    f.write(str(final) + '\n')

转换完后的数据如下:

 基于10个类别假新闻1000篇文章数据训练中文word2vec模型_第3张图片

训练word2vec

我们用gensim中的word2vec工具训练,在pycharm控制台运行如下命令:

Python train_word2vec_model.py corpus_seg.txt corpus.model corpus.vector

#  train_word2vec_model.py用于训练模型
import logging
import os.path
import sys
import multiprocessing
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
if __name__=='__main__':
    program = os.path.basename(sys.argv[0]) #os.path.basename表示返回path最后的文件名;sys.argv[0]表示传递命令行参数,参数train_word2vec_model.py为argv[0]
    logger = logging.getLogger(program)
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
    logging.root.setLevel(level=logging.INFO) ##
    logging.info("running %s" % ' '.join(sys.argv)) #info表示打印,Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
    if len(sys.argv) < 4:
        print (globals()['__doc__'] % locals()) #全局变量,局部变量
        sys.exit(1)
    inp,outp,outp2 = sys.argv[1:4] #依次表示切割后的文本,模型,向量
    model = Word2Vec(LineSentence(inp),size=400,window=5,min_count=5,workers=multiprocessing.cpu_count()) #.window是句子中当前词与目标词之间的最大距离
    model.save(outp) #训练后的模型保存;# 以二进制格式存储
    model.wv.save_word2vec_format(outp2,binary=False) # 以文本格式存储, 一行是一个词的vector

测试效果

pycharm中输入python命令。

接着依次输入:

import gensim

model = gensim.models.Word2Vec.load('corpus.model')

result = model.most_similar(u'老人')

for word in result:  print (word[0],word[1])

输出如下:

 基于10个类别假新闻1000篇文章数据训练中文word2vec模型_第4张图片

 

 

 

你可能感兴趣的:(基于10个类别假新闻1000篇文章数据训练中文word2vec模型)