中文文本清洗、分詞、訓(xùn)練詞向量

中文文本在訓(xùn)練詞向量的相關(guān)操作和使用的函數(shù)工具總結(jié)

只保留中文字符(數(shù)字、字母)

判斷漢字、數(shù)字和字母的函數(shù)

#是否是漢語判讀    
def is_chinese(uchar):
 """判斷一個unicode是否是漢字"""
 if uchar >= u'\u4e00' and uchar <= u'\u9fa5':
  return True
 else:
  return False
#是否是數(shù)字判斷
def is_number(uchar):
 """判斷一個unicode是否是數(shù)字"""
    if uchar >= u'\u0030' and uchar <= u'\u0039':
        return True
    else:
        return False
#是否是英文字符判斷
def is_alphabet(uchar):
 """判斷一個unicode是否是英文字母"""
    if (uchar >= u'\u0041' and uchar <= u'\u005a') or (uchar >= u'\u0061' and uchar <= u'\u007a'):
        return True
    else:
        return False

使用上述三種函數(shù)可以實現(xiàn)對字符串進行篩選的處理,該函數(shù)輸入待處理的字符串,返回清洗后的字符串

def format_str(content):
    content_str = ''
    for i in content:
        if is_chinese(i):#or is_number(i) or is_alphabet(i):
            content_str = content_str+i
    return content_str

分詞去停用詞

cut_word傳入一個文檔,文檔中每個句子占一行,輸出是分詞并且去除停用詞之后的文檔

def stopwordslist(filepath):
    stopwords = [line.strip() for line in open(filepath, 'rb').readlines()]
    return stopwords
 
def cut_word():

    stop_words = stopwordslist(stop_word_path)
    corpus = ''
    temp = 0
    with open("./word2vec_data.txt",'r',encoding='utf-8') as f:
        documents = f.readlines()
    for document in tqdm(documents):
        document = document.replace("\n","")
        document_cut = jieba.cut(document, cut_all=False)
        # print('/'.join(document_cut))\
        result = ""
        for item in tqdm(document_cut):
            if(item not in stop_words):
                result += item;
        corpus += result+"\n"
          #  print(result)
    #分好詞之后的數(shù)據(jù)
    with open('./corpus.txt', 'w+', encoding='utf-8') as f:
        f.write(corpus)  # 讀取的方式和寫入的方式要一致

gensim中word2vec進行詞向量訓(xùn)練

# -*- coding: utf-8 -*-
from gensim.models import word2vec
import logging
 
##訓(xùn)練word2vec模型
 
# 獲取日志信息
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', level=logging.INFO)
 
# 加載分詞后的文本,使用的是Text8Corpus類
 
sentences = word2vec.Text8Corpus(r'./corpus.txt')
 
# 訓(xùn)練模型,部分參數(shù)如下
model = word2vec.Word2Vec(sentences, size=100, hs=1, min_count=1, window=3)
 
# 模型的預(yù)測
print('-----------------分割線----------------------------')
 
# 計算兩個詞向量的相似度
try:
    sim1 = model.similarity(u'中央企業(yè)', u'事業(yè)單位')
    sim2 = model.similarity(u'教育網(wǎng)', u'新聞網(wǎng)')
except KeyError:
    sim1 = 0
    sim2 = 0
print(u'中央企業(yè) 和 事業(yè)單位 的相似度為 ', sim1)
print(u'人民教育網(wǎng) 和 新聞網(wǎng) 的相似度為 ', sim2)
 
print('-----------------分割線---------------------------')
# 與某個詞(李達康)最相近的3個字的詞
print(u'與國資委最相近的3個字的詞')
req_count = 5
for key in model.similar_by_word(u'國資委', topn=100):
    if len(key[0]) == 3:
        req_count -= 1
        print(key[0], key[1])
        if req_count == 0:
            break
 
print('-----------------分割線---------------------------')
# 計算某個詞(侯亮平)的相關(guān)列表
try:
    sim3 = model.most_similar(u'新華社', topn=20)
    print(u'和 新華社 與相關(guān)的詞有:\n')
    for key in sim3:
        print(key[0], key[1])
except:
    print(' error')
 
print('-----------------分割線---------------------------')
# 找出不同類的詞
sim4 = model.doesnt_match(u'新華社 人民教育出版社 人民郵電出版社 國務(wù)院'.split())
print(u'新華社 人民教育出版社 人民郵電出版社 國務(wù)院')
print(u'上述中不同類的名詞', sim4)
 
print('-----------------分割線---------------------------')
# 保留模型,方便重用
model.save(u'word2vec.model')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容