Word2Vec + Jieba 分词实现视频标签距离计算
来源:互联网 发布:ubuntu 无法安装 编辑:程序博客网 时间:2024/06/03 19:04
Word2Vec + Jieba 分词实现视频标签距离计算
看[Word2vec][1]有一点时间了,不是很理解里面的算法所以决定先亲手实践试试看。
- 分词实现
- Word2vec学习实现
分词实现
首先将文章保存成了txt的格式,用python读取txt,并最终将分词结果存入txt文件中。其中还做了一次编码转换。
#coding:utf8import jieba# 文字转码 保留片段conv_input_file_name = 'a.txt'conv_output_file_name = 'b.txt'def ucodeConvert(conv_input_file_name,conv_output_file_name): fin = open(conv_input_file_name, 'r') fout = open(conv_output_file_name, 'w') line = fin.readline() while line: try: newline = line.decode('GB2312').encode('utf-8') except UnicodeError: print 'Unicode Convert Error' break else: print >> fout,newline line = fin.readline() finally: fin.close() fout.close() print 'Convertion end'#分词 seg_input_file_name = 'input_doc.txt'seg_output_file_name = 'segment_result.txt'def wordSegment (seg_input_file_name, seg_output_file_name): fin = open(seg_input_file_name,'r') fout = open(seg_output_file_name, 'w') line = fin.readline() while line: newline = jieba.cut(line,cut_all=False) str_out =( ' '.join(newline).encode('utf-8') .replace(',',' ').replace('!',' ').replace('?',' ').replace('。',' ') .replace('(',' ').replace(')',' ').replace('《',' ').replace('》',' ') .replace('“',' ').replace('”',' ').replace(';',' ').replace(':',' ') .replace('~',' ').replace('-',' ').replace('——',' ').replace('+',' ') .replace('=',' ').replace('*',' ').replace('&',' ').replace('%',' ') .replace('、',' ').replace('、',' ').replace('.',' ').replace('_',' ').replace('\n',' ')) print str_out print >> fout,str_out line = fin.readline() fin.close() fout.close()# MainucodeConvert(conv_input_file_name,conv_output_file_name)wordSegment(seg_input_file_name,seg_output_file_name)
这样便处理好了分词。
尚需改进的地方: 单字的删除,重复词词频的查询,自定义词典。
Word2vec
接下来用Word2vec将所有的分词滚一遍,看看能出现什么样的结果(这里我们只注重近义词,反义词;或者说逻辑上有关联的词,和逻辑上无关联的词)
首先是建立模型:
# create modeldef createModel(model_file_name,sentences): model = w2v.Word2Vec(sentences, size=50, window=5, min_count=1, workers=4) model.save(model_file_name)
其中参数的意义和设置建议参考: [gensim函数库的Word2Vec的参数说明]
接下来计算词之间的距离:
# calculate distance between two wordsdef matchDistance(x,list_name,model): temp1 = x distances=[] for y in list_name: temp2 = y temp1 = unicodeConvert(temp1) temp2 = unicodeConvert(temp2) distances.append(model.similarity(temp1,temp2)) result_distance.append(distances)
这里在utf8转码问题上卡了很久,建议参考 [玩转Python让人讨厌的编码问题]
在此之外还应注意两点:
1.在将字符串转为list时,换行符会被加在元素尾部,输出时需要将‘’\n‘’去掉再进行输出。
解决办法:
1. 直接去除末尾项
f = open(tag_file_name,'r') tagger = [] # convert file to list for line in f.readlines(): tagger.append(line.decode('utf-8')[:-1])
2. 在读取utf8文件时,分为with BOM 和 without BOM两种,在with BOM的情况下,字符串会多一个\ufeff前缀。这时要去掉前缀才能顺利转码。
解决办法:
1. 解码去除BOM
def unicodeConvert(x): try: model.similar_by_word(x) except: x = x.encode('utf-8').decode('utf-8-sig') else: pass return x
- 直接去除‘\ufeff’(受jieba源码启发)
def checkBOM(x):try: x = x.lstrip('\ufeff')except UnicodeDecodeError:raise ValueError('dictionary filr %s must be utf-8' % filename)return x
如果有其他问题可以随时沟通:
阅读全文
0 0
- Word2Vec + Jieba 分词实现视频标签距离计算
- 计算jieba分词的Tf-idf值
- jieba分词
- jieba分词
- jieba分词
- jieba分词
- jieba分词
- jieba分词
- jieba分词
- jieba分词
- jieba分词
- jieba分词
- jieba分词
- word2vec的详细实例介绍(包含jieba分词提供的语料)
- 针对新闻标签提取的tf-idf优化算法1.0版本——基于jieba分词实现
- jieba.NET是jieba中文分词的.NET版本(C#实现)。
- jieba和word2vec使用小结
- python jieba分词学习
- 中缀到后缀表达式的转换:java-stack实现
- React Native之如何优化组件来达到减少代码冗余
- Python学习11_图像自动阈值分割
- std::function
- HDU-2612-Find a way
- Word2Vec + Jieba 分词实现视频标签距离计算
- JDK安装多个版本出现Java -version和你配置的环境变量的jdk版本不一致的问题
- 过滤器
- webview与js交互,window.close()回调方法onCloseWindow()无效的解决方法
- jquery 获取div下的第一个子元素方法总结
- Java中的多线程
- 实习总结二
- UE4中窗口模式切换
- OpenCV的中求解线性问题或者最小二乘问题的方法cv::solve