word2vec将词转变为词向量。从而进行词之间的相似性度量。

# etc/bin/python
# -*- encoding: utf-8 -*-

from time import time
from gensim.models import Word2Vec


class LoadCorpora(object):
    def __init__(self, s):
        self.path = s

    def __iter__(self):
        f = open(self.path, 'r', encoding='utf-8')
        for line in f:  # 一行数据是一个新闻
            yield line.split(' ')


# 一个打印函数
def print_list(a):
    for i, s in enumerate(a):
        if i != 0:
            print('+', )
        print(s, )


if __name__ == '__main__':

    sentences = LoadCorpora('news.dat')
    t_start = time()
    # 从预料中找到200个词,进行模型构建
    model = Word2Vec(sentences, size=200, min_count=5, workers=8)  # 词向量维度为200,丢弃出现次数少于5次的词
    model.save('news.model')  # 保存模型,以便日后使用
    print('OK:', time() - t_start)

    model = Word2Vec.load('news.model')
    print('词典中词的个数:', len(model.wv.vocab))
    # 打印模型中的词
    for i, word in enumerate(model.wv.vocab):
        print(word, end=' ')

    # 计算模型中与橙子相似的词
    print('丝绸对应词向量及长度', len(model.wv['丝绸']), model.wv['丝绸'])
    result = model.wv.most_similar('丝绸')
    print('与丝绸最相近的词:')
    for w, s in result:
        print('\t', w, s)

    # 求任意两个词之间的相似度
    print('%s 和 %s 的相似度为:%.6f' % ('丝绸', '橘子', model.wv.similarity('丝绸', '橘子')))

    result = model.wv.most_similar(positive=['中国', '城市'], negative=['学生'])
    print('中国+城市-学生:')
    for word, similar in result:
        print('\t', word, similar)

    print('========================')
    words_list = ('苹果 三星 美的 海尔', '中国 日本 韩国 美国 北京',
                  '医院 手术 护士 医生 感染 福利', '爸爸 妈妈 舅舅 爷爷 叔叔 阿姨 老婆')
    for words in words_list:
        print(words, '离群词:', model.wv.doesnt_match(words.split(' ')))

在这里插入图片描述

tf-idf将文本映射到词库里的词频向量,从而进行文本分类(见Bayes)

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐