使用python对json数据进行预处理、分词、fasttext词向量
note: 1. 在编写程序是尽量使本地编译环境和服务器编译环境保持一致,如果 不一致可能后导致移植后程序报错。
#第一步,预处理json数据集
- 合并json数据集
由于本项目的数据集书爬取网站上的数据,并存储为.json格式。故有两种解决方案:
方案一:对文件挨个读取并且处理
方案二:合并.json数据集为一个文件夹
#coding = utf-8
import io
import os
filenames = os.listdir('all_data')
#由于服务器使用的python是2.7版本,故读取的时候需要使用io
f = io.open('data/test.json','w','encoding = utf-8')
#遍历文件名
for filename in filenames:
filepath = 'all_data/'+filename
#先遍历单个文件
g = io.open(filepath,'r','encoding = utf-8')
#合并文件的时候,每合并一个文件夹都需要加一个换行符,否则无法识别json
f.write(g.read()+'\n')
f.close()
合并后的文件是data/test.json文件
- 去掉文件内容中的\n,使用replace代替。提取json数据中的title和content标签中的内容
#encoding=utf-8
import json
import io
f = io.open("data/text.json",'r',encoding='utf-8')
for line in f.readlines():
#替换json中的\n字符为空字符
line=line.replace("\\n","")
#将json格式转化为python格式
lines = json.loads(line)
#提取json数据中的title和content的内容
ti=lines['title']
content=lines['content']
#将处理后的文件存储在process_data/data.txt文件中
f = io.open("process_data/data.txt",'a',encoding='utf-8')
f.write(ti)
f.write(content)
f.close()
#第二步,使用jieba分词对数据集进行分词
jieba分词目前已经非常成熟,再此不做赘述,以下是项目中的代码
#encoding=utf-8
import jieba
f=open("process_data/data.txt","r",encoding='utf-8')
line=f.readline()
#使用精确模式对数据集进行分词
seg_list = jieba.cut(line, cut_all=False)
data=" ".join(seg_list)
f=open("jieba_data/data_jieba.txt","w",encoding='utf-8')
f.write(data)
#第三步,使用fasttext跑一遍分词结果
在服务器中使用如下代码
./fasttext cbow -input data.txt -output result -epoch 30 -neg 5 -loss ns -dim 100 -ws 5
result表示的是训练完成后生成的result.vec和result.bin 文件
其中result.vec文件包含单词的vectors,每行一个;result.bin是一个二进制文件,包含模型参数、字典、所有hyper参数。二进制文件用于计算单词向量或重启优化。