word2vec

from gensim.models import KeyedVectors, Word2Vec, word2vec
from gensim.models.word2vec import LineSentence, PathLineSentences


def read_fime(fime_name):
    '''准备数据'''
    print('准备数据')
    train_data = []
    with open(fime_name, 'r', encoding='utf-8') as f:
        while True:
            data = f.readline()
            if not data:
                break
            train_data.append(f.readline())
    print(len(train_data))
    return train_data


def train_word2vec(train_data):
    '''训练模型并保存'''
    model = Word2Vec(LineSentence('..\\data\\train_data.txt'), size=128, window=5, alpha=1e-4, negative=5,
                     iter=100)  # 训练模型 LineSentence 加载数据  PathLineSentences 如果文件太大  这个可以一点点加载数据进行训练
    model.save("..\\data\\train_appid.model")  # 保存模型
    model.wv.save_word2vec_format("..\\data\\train_appid.vector",
                                  binary=True)  # 保存词向量 binary=True表示保存为二进制, binary=False 非二进制


def obtain_topl():
    '''获取模型训练的数据'''
    # model = Word2Vec.load('..\\data\\train_appid.model')
    model = Word2Vec.load('..\\data\\wiki.zh.text.model')  # 加载模型
    model = KeyedVectors.load_word2vec_format('..\\data\\train_appid.vector', binary=True)  # 加载词向量
    sim = model.most_similar('北京下雨啦', topn=10)  # 返回相似度集合
    model.wv.doesnt_match({'上海', '天津', '重庆', '深圳', '北京'})  # 找出一组集合中不同的类别
    model.wv.similarity('北京', '上海')  # 计算相似度
    print('下雨了')
    for item in sim:
        print(item[0], item[1])

    model.wv.doesnt_match({'上海', '天津', '重庆', '深圳', '北京'})  # 找出一组集合中不同的类别
    model.wv.similarity('北京', '上海')  # 计算相似度


def obtain_topls():
    '''获取模型训练的数据'''
    model = Word2Vec.load('..\\data\\train_appid.model')
    sim = model.most_similar('555', topn=10)  # 返回相似度集合
    print('5 168 225 543 555 1376 1639 2302 2599')
    for item in sim:
        print(item[0], item[1])


if __name__ == '__main__':
    # train_data = read_fime('..\\data\\train_data.txt')
    # train_word2vec(train_data)
    # obtain_topl()
    obtain_topls()