自然語言處理實踐——1.詞向量word2vec的轉化
阿新 • • 發佈:2020-12-28
1. 為什麼要進行詞向量的轉化?
計算機看不懂我們人類的語言文字,必須轉化成機器看得懂的形式才能進行下一步的處理。
2. 文字的預處理和詞向量化
自然語言中有很多字元是無用的(如:“嗎”,“的”,“。”,“,”),並且我們希望把整句整段的語言轉成容易處理的形式。不過在程式設計之前我們需要對檔案的目標進行良好的規劃:
data_try檔案中我們放了兩個對違紀黨員幹部的通報檔案:
然後程式碼如下,這裡我們使用的是Pycharm中的jupyter notebook:
#%%
import pandas as pd
import os,pathlib
import re
import jieba
import logging
from gensim.models import word2vec
#%%
root = pathlib.Path(os.path.abspath('__file__')).parent.parent #當前檔案的上兩級目錄
data_path = os.path.join(root,"data","data_try.xlsx") #data資料夾中的data_try檔案
df = pd.read_excel(data_path) #讀取檔案
df.columns = ['content' ]
#%%
# CELL: 預處理,包括去掉符號和停用詞
stopwords_path = os.path.join(root,"data","hit_stopwords.txt") #哈工大停詞表
semantic_train_path = os.path.join(root,"data","semantic_resource.txt") #訓練語料的目錄
jieba.load_userdict(stopwords_path)
def stopwordslist():
stopwords = [line. strip() for line in open(stopwords_path,encoding='UTF-8').readlines()]
return stopwords
def sentence_write(content,path):
"""
:param content: 等待分詞和去掉停用詞的內容
:param path: 儲存的目錄
:return: 無返回值
"""
content_spliting = jieba.lcut(content.strip())
stopwords = stopwordslist()
result = ""
#在停詞表中的詞去掉
for word in content_spliting:
if word not in stopwords:
if word != '\t':
result += word
result += " "
f = open(path, mode="a", encoding="utf-8")
f.write(result)
f.close()
return 0
def clean_sentence(line):
"""
去掉無用的符號
:param line:
:return:
"""
line = re.sub(
"[\s+\-\|\!\/\[\]\{\}_,.$%^*(+\"\')]+|[::;+——()?【】《》“”!,。?、[email protected]#¥%……&*()]+|", '',line) #對無意義字串進行替換
return line
def proc(df,attr):
df[attr] = df[attr].apply(clean_sentence)
return df
df = proc(df,'content')
for index,row in df.iterrows():
sentence_write(row['content'],semantic_train_path)
#%%
#進行語料訓練
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus(semantic_train_path)
# 訓練模型,部分引數如下
model = word2vec.Word2Vec(sentences, size=100, hs=1, min_count=1, window=3)
#%%
y = model.most_similar(u'阻撓', topn = 10)
y
總的來說,上面程式碼的作用是載入Excel檔案中的資料,進行清洗和去掉停用詞,從而得到一個由有效詞語組成的txt檔案,然後將這個檔案丟到logging和word2vec的包中進行向量化處理。最後的most_similar
的作用是訓練後的詞向量的相關性。
另外與one-hot詞向量不同,word3vec的向量化可以體現詞的相關性,具體的請參考我的其他博文。