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可以按照從小到大的順序顯示,...