@wuxin1994
2017-07-24T16:13:43.000000Z
字数 1486
阅读 1883
学习笔记17
1.程序步骤如下:
a.下载维基语料库并预处理
b.合并jieba自带的分词词典和项目用到的分词词典
c.从topic.json中得到 description 并写入到 desc_texts.texts。同时,得到一个 tid-keywords 字典。
d.对维基语料库和description语料库进行分词,并合并分词结果到segment.txt。(并得到句子和段落的语料库)
e.利用分词结果训练word2vec模型(利用句子和段落语料库训练sent2vec,doc2vec模型)
f.处理原始输入json文件,根据topic数目拆分,并根据tid-keywords字典加入keywords字段信息。
g.分别处理各个字段,得到向量表示,并以json格式存储,然后写入到输出文件中。
2.项目程序代码已经基本写完,跟凌波师兄讨论了进度并请教了几个问题。不过目前还有三个待解决的问题:
KeyError(u"word '\u74dc\u897f\u897f' not in vocabulary",)
训练doc2vec模型耗时太久,训练一下午只完成了5%的训练。打算先试试不用wiki预料训练,先得到一个初步的结果。
sent2vec部分的训练打算用doc2vec训练,而语料库打算只用本次项目中的sentence数据。
原因分析及解决办法:初始文件不是json结构,要让程序能直接load出json格式的数据流,存储格式为一个lists。
import re
description = re.findall(r"\"description\"\=\>\"[^\"]*\"",topic)#以读取description字段为例。
TypeError: write() argument 1 must be unicode, not str
原因分析及解决办法:编码问题,写入的字段需要是unicode。
写入的文件每次总多一行空格,一直以为是显示bug,后来在数据写入时加上了一些if判断,问题解决。
#办法1
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#办法2
write(string.encoding('utf-8'))
#办法3:可以先将需要输出或者写入的数据用for循环转成unicode字符串,然后再用write()方法写入。
#办法4 :将unicode转换成汉字的方法
print string.decode("unicode-escape")
#办法4(写入json文件时)
json.dump(new_topic_json,data_input,ensure_ascii=False)