1. 程式人生 > >Python word2vector(含安裝環境)

Python word2vector(含安裝環境)

一、安裝Anaconda
Anaconda下載
因為映象在國外,最好不要晚上下,一大早下比較好,如果是迅雷會員就無所謂了。
我下的是Anaconda3-5.0.1-Windows-x86_64.exe,給一個百度網盤的連結
百度網盤連結
密碼:6jm4
安裝在D:\PythonSoftware\Anaconda3下面,自己建立資料夾,路徑不能有空格,不能有中文。
安裝時一定要勾選 “新增環境變數”這個項,會自動將Anaconda3所有的環境變數都加入
安裝好後,在命令列輸入 python
這裡寫圖片描述

這樣,python基本環境就安裝好了,裡面自帶了很多包,可以直接使用,如果沒有需要的包,可以在命令列中輸入pip list
這裡寫圖片描述


可以看到pip可以安裝哪些包,用pip install 包名 ,就可以線上安裝了。
Anaconda3包含的包的列表

這裡寫圖片描述

最後一步,把Run pycharm 勾起來,直接啟動
下面的這個圖會自動彈出,把快捷鍵修改為eclipse,其他OK
這裡寫圖片描述
根據下面的部落格修改提示的快捷鍵的操作:
提示快捷鍵修改

這裡寫圖片描述

三、安裝碼雲外掛
碼雲教程
將剛才建立的專案託管到碼雲中
這樣以後就可以直接push了
新增ignore檔案:
.gitignore
加入語句:
/data/*

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:\PythonSoftware\Anaconda3\include下面,因為上面報錯是沒有這個檔案

還是報錯!放棄了!

五、安裝gensim
下載地址
下載 gensim-3.1.0-cp36-cp36m-win_amd64.whl

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

也可以線上安裝:
直接在user目錄中建立一個pip目錄,如:C:\Users\xx\pip,新建檔案pip.ini,內容如下

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

以上是修改映象為清華大學,然後線上安裝會發現下載速度賊快

pip install gensim

清除pip快取路徑:

%LocalAppData%\pip\Cache

六、安裝結巴分詞

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]))