牛骨文教育服务平台(让学习变的简单)
博文笔记

Python word2vector(含安装环境)

创建时间:2017-11-26 投稿人: 浏览次数:1195

一、安装Anaconda
Anaconda下载
因为镜像在国外,最好不要晚上下,一大早下比较好,如果是迅雷会员就无所谓了。
我下的是Anaconda3-5.0.1-Windows-x86_64.exe,给一个百度网盘的链接
百度网盘链接
密码:6jm4
安装在D:PythonSoftwareAnaconda3下面,自己建立文件夹,路径不能有空格,不能有中文。
安装时一定要勾选 “添加环境变量”这个项,会自动将Anaconda3所有的环境变量都加入
安装好后,在命令行输入 python
这里写图片描述

这样,python基本环境就安装好了,里面自带了很多包,可以直接使用,如果没有需要的包,可以在命令行中输入pip list
这里写图片描述
可以看到pip可以安装哪些包,用pip install 包名 ,就可以在线安装了。
Anaconda3包含的包的列表

二、安装pycharm
下载地址:
官网windows社区版

这里写图片描述

最后一步,把Run pycharm 勾起来,直接启动
下面的这个图会自动弹出,把快捷键修改为eclipse,其他OK
这里写图片描述
根据下面的博客修改提示的快捷键的操作:
提示快捷键修改

这里写图片描述

三、安装码云插件
码云教程
将刚才建立的项目托管到码云中
这样以后就可以直接push了
添加ignore文件:
.gitignore
加入语句:
/data/*

四、安装 pyltp
pyltp是哈工大的NLP工具的python封装
LTP的功能
LTP在线演示
LTP文档
LTP发布版下载
LTP模型下载
pyltp文档

cmd:

pip install pyltp

结果报错。

pyltp源码下载
LTP源码工程下载
将解压后的ltp文件夹命名为ltp,整体复制到pyltp中。
也就是将ltp所有内容作为一个文件夹放到pyltp中。解压pyltp后所得到的文件夹中已经有一个名为ltp的空文件夹,把它替换或覆盖即可。
进入pyltp文件夹,cmd:

python setup.py install

还是报错。

这里写图片描述

C++编译工具下载
选择自定义安装,把√都去了。LTP这东西得编译,不然用不起来。

然后

pip install --upgrade setuptools
pip install --upgrade pip
pip install pyltp

这里写图片描述
简直想说我 *********** 啊,还是报错!

安装cmake:
cmake下载
安装时勾选自动添加环境变量

下载basetsd.h,百度搜一下就有,百度文库里面
然后放到D:PythonSoftwareAnaconda3include下面,因为上面报错是没有这个文件

还是报错!放弃了!

五、安装gensim
下载地址
下载 gensim-3.1.0-cp36-cp36m-win_amd64.whl

pip install gensim-3.1.0-cp36-cp36m-win_amd64.whl

也可以在线安装:
直接在user目录中创建一个pip目录,如:C:Usersxxpip,新建文件pip.ini,内容如下

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

以上是修改镜像为清华大学,然后在线安装会发现下载速度贼快

pip install gensim

清除pip缓存路径:

%LocalAppData%pipCache

六、安装结巴分词

pip install jieba
import jieba
import jieba.posseg as pseg

s = "我爱中国"
l = jieba._lcut(s)  # 分词,结果是list
print(l)

words = pseg.cut(s)  # 进行分词
result = []  # 记录最终结果的变量
for w in words:
    result.append(str(w.word) + "/" + str(w.flag))  # 加词性标注
print(result)

七、word2vector
人民日报98年1月语料库
词向量训练是已经分好词的句子,去除标点符号,由于语料库已经分词且词性标注了,所以不需要分词了, 不然就用结巴分词一下。
语料库是GB2312编码的,先用emeditor转成utf8的。

import gensim


def getSentences(path):
    """
    获得用于词向量训练的句子
    :param path: 文件存储的路径
    :return: list[[单词],[单词].....]
    """
    sents = []
    f = open(path, "r", encoding="utf8")
    for line in f:
        line = line.strip()
        if line != "":
            line_shuzu = line.split("  ")  # 按照2个空格拆分
            sen = []
            for i in range(len(line_shuzu)):
                # 第一个不存
                if i != 0:
                    word = line_shuzu[i].split("/")[0]  # 单词
                    pos = line_shuzu[i].split("/")[1]  # 词性
                    # 去除标点符号
                    if pos != "w":
                        sen.append(word)
            sents.append(sen)
    return sents


path = "./data/199801.txt"
sentences = getSentences(path)
"""
min_count:个数小于这个的单词会被丢弃
size:神经网络隐藏层单元数,几十到几百,也就是最后词向量的维度
workers:并发数,worker参数只有在安装了Cython后才有效. 没有Cython的话, 只能使用单核
window:滑动窗口大小,即每个单词前后文关联的单词个数,一般3-5
iter:迭代轮数
"""
model = gensim.models.Word2Vec(sentences, min_count=5, size=100, workers=2, window=5, iter=10)
model.save("./model/w2v_model")  # 保存模型
print(model["中国"])  # 打印中国的词向量

new_model = gensim.models.Word2Vec.load("./model/w2v_model")  # 载入模型
more_sentences = [["我", "爱", "你"], ["我", "爱", "祖国"]]
# 增量训练,total_examples是句子的数量,epochs是迭代轮数
new_model.train(more_sentences, total_examples=len(more_sentences), epochs=model.iter)

# 比较两个词语的相似度,越高越好,相似度就是2个向量夹角的余弦值
print(""唐山" 和 "中国" 的相似度:" + str(new_model.similarity("唐山", "中国")))
print(""中国" 和 "祖国" 的相似度:" + str(new_model.similarity("祖国", "中国")))
print(""中国" 和 "中国" 的相似度:" + str(new_model.similarity("中国", "中国")))
# 使用一些词语来限定,分为正向和负向的
result = new_model.most_similar(positive=["中国", "城市"], negative=["学生"])
print("同"中国"与"城市"二词接近,但是与"学生"不接近的词有:")
for item in result:
    print("   "" + item[0] + ""  相似度:" + str(item[1]))
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。