NLP學習 day02 基本文字處理技能

2021-09-24 17:17:30 字數 3899 閱讀 3913

1,基本文字處理技能

1.1 分詞的概念

最大匹配法,最大匹配是指以詞典為依據的,去詞典罪當單詞的第一次取字數量的掃瞄串。在詞典中進行掃瞄(為提公升掃瞄效率,還可以根據字數多少設計多個字典,然後根據字數分別從不同字典中進行掃瞄,下面以「我們在野生動物園玩』'為例說明一下這幾種匹配方法。

2.1 unigram、bigram、trigram的概念

unigram 一元分詞,把句子分成乙個乙個的漢字

bigram 二元分詞,把句子從頭到尾每兩個字組成乙個詞語

trigram 三元分詞,把句子從頭到尾每三個字組成乙個詞語

文字矩陣化:要求採用詞袋模型且是詞級別的矩陣化

步驟有:

3.1 分詞(可採用結巴分詞來進行分詞操作,其他庫也可以);

3.2 去停用詞;構造詞表。

3.3 每篇文件的向量化。

詞向量矩陣生成過程

詞向量矩陣生成按照以下過程:

載入資料集->分詞->生成詞彙表->生成word_index->載入預訓練詞向量模型->生成詞向量矩陣

以下過程以thucnews 資料集為例

\# -*- coding: utf-8 -*-

"""created on mon jun 24 17:31:21 2019

@author: administrator

nlp 第2天的學習任務

"""import pandas as pd

import numpy as np

train_file = 'cnews/cnews.train.txt'

val_file = 'cnews/cnews.val.txt'

test_file = 'cnews/cnews.test.txt'

test_data = pd.read_csv(test_file,sep='\t',engine='python',names=['label','content'],encoding='utf-8')

test_data = test_data.iloc[:100,:]

train_data = pd.read_csv(train_file,sep='\t',engine='python',names=['label','content'],encoding='utf-8')

train_data = train_data.iloc[:100,:]

validation_data = pd.read_csv(val_file,sep='\t',engine='python',names=['label','content'],encoding='utf-8')

train_data = train_data.iloc[:100,:]

from multiprocessing import pool, cpu_count

import re

import pkuseg

remove = re.compile('[\s\d,。?!~:「」;,.:?"!~$%^&@#¥#*()()、|/]')

def parallelize_dataframe(df, func):

df_split = np.array_split(df, cpu_count())

pool = pool(cpu_count())

df = pd.concat(pool.map(func, df_split))

pool.close()

pool.join()

return df

seg = pkuseg.pkuseg()

def pku_cut(df):

return df

##分詞

test_data = parallelize_dataframe(test_data, pku_cut)

train_data = parallelize_dataframe(train_data, pku_cut)

validation_data = parallelize_dataframe(validation_data, pku_cut)

\## 去停詞

stop_word_file='cnews/中文停用詞表.txt'

def get_stop_words(filename=stop_word_file):

stop_word=

for line in open(filename,'r',encoding='utf-8'):

return stop_word

stop_word = get_stop_words()

##標籤轉id

categories = ['體育', '財經', '房產', '家居', '教育', '科技', '時尚', '時政', '遊戲', '娛樂']

cat_to_id = dict(zip(categories, range(len(categories))))

##儲存好分詞後的資料

import pickle

with open('train.pickle', 'wb') as handle:

pickle.dump(train_data, handle, protocol=pickle.highest_protocol)

with open('test.pickle', 'wb') as handle:

pickle.dump(test_data, handle, protocol=pickle.highest_protocol)

with open('val.pickle', 'wb') as handle:

pickle.dump(validation_data, handle, protocol=pickle.highest_protocol)

\## 載入資料

train = pickle.load( open ( 'train.pickle', "rb" ))

test = pickle.load( open ( 'test.pickle', "rb" ))

val = pickle.load( open ( 'val.pickle', "rb" ))

all_content = pd.concat([train['content'],test['content'],val['content']]).values

\## 計算詞彙表與詞頻

from collections import defaultdict

def build_vocab(sentences):

vocab = defaultdict(int) #將詞彙表初始化為乙個字典

for i, sentence in enumerate(sentences):

for word in sentence: ## split的原因是我讀取的資料每一行是乙個字串,要將其分開,轉為list

vocab[word] += 1 #記錄每個詞出現的次數

return vocab

vocab = build_vocab(all_content)

vocab_list = [ key for key,value in vocab.items() ]

w2i =

##將w2i存起來

import pickle

with open('cnews_w2i.pickle', 'wb') as handle:

pickle.dump(w2i, handle, protocol=pickle.highest_protocol)

vocab_sort= sorted(vocab.items(), key=lambda d:d[1], reverse = true)

vocab_list = [ key for key,value in vocab_sort]

vocab_list = vocab_list=vocab_list[:7000]

Vue基本語法day02

v if 和 v show 切換元素的隱藏和顯示 格式 v if v show 布林值 true 元素顯示,false 元素就隱藏 相同點 都可以切換元素的顯示和隱藏 不同點 實現的方法不同 v if 顯示 建立節點,隱藏 刪除節點 通過不斷的建立和刪除節點來切換 v show 顯示 display...

Qt學習筆記day02

帶引數的訊號由於訊號可以過載,則在處理訊號的時候,要注意處理方式 qt5的方法 採用函式指標的方法指向過載的函式 void subwidget funsignal subwidget mysignal connect w,funsignal,this,mainwidget dealsub void ...

Python學習筆記 day02

一 組織列表 1.s.sort 方法可以將列表中的元素按照從小到大的順序排序,而且是永久的改變了 s的元素順序。如果想要倒序排序,則使用 s.sort reverse true 即可。2.sorted s 方法可以將列表 s按照從小到大的順序顯示出來,但只是臨時性地讓 s可以按照從小到大的順序顯示,...