目錄
1、資料集準備
2、資料集處理
(1)簡單分詞、詞性還原、停用詞過濾
(2)特徵提取(tt-idf、資訊增益、卡方檢驗、互資訊、n-gram等)
(3)文字標籤向量化
(4)選擇合適的演算法模型進行訓練
"""函式說明:簡單分詞
parameters:
filename:資料檔案
returns:
list_word_split:分詞後的資料集列表
category_labels: 文字標籤列表
"""def word_split(filename):
read_data=pd.read_excel(filename)
list_word_split=
category_labels=
for i in range(len(read_data)):
row_data = read_data.iloc[i, 1] # 讀取單個漏洞描述文字
list_row_data = list(jieba.cut(row_data)) # 對單個漏洞進行分詞
list_row_data=[x for x in list_row_data if x!=' '] #去除列表中的空格字元
row_data_label=read_data.iloc[i,2] #讀取單個漏洞的類別標籤
return list_word_split, category_labels
"""函式說明:詞性還原
parameters:
list_words:資料列表
returns:
list_words_lemmatizer:詞性還原後的資料集列表
"""def word_lemmatizer(list_words):
wordnet_lemmatizer = wordnetlemmatizer()
list_words_lemmatizer =
for word_list in list_words:
lemmatizer_word =
for i in word_list:
return list_words_lemmatizer
"""函式說明:停用詞過濾
parameters:
filename:停用詞檔案
list_words_lemmatizer:詞列表
returns:
list_filter_stopwords:停用詞過濾後的詞列表
"""def stopwords_filter(filename,list_words_lemmatizer):
list_filter_stopwords= #宣告乙個停用詞過濾後的詞列表
with open(filename,'r') as fr:
stop_words=list(fr.read().split('\n')) #將停用詞讀取到列表裡
for i in range(len(list_words_lemmatizer)):
word_list =
for j in list_words_lemmatizer[i]:
if j not in stop_words:
return list_filter_stopwords
if __name__=='__main__':
list_word_split, category_labels=word_split('testdata.xls') #獲得每條文本的分詞列表和標籤列表
print('分詞成功')
list_words_lemmatizer=word_lemmatizer(list_word_split) #詞性還原
print('詞性還原成功')
list_filter_stopwords=stopwords_filter('stopwords.txt',list_words_lemmatizer) #獲得停用詞過濾後的列表
print("停用詞過濾成功")
停用詞表也可參考:stopwordstf-idf演算法實現參看:tf-idf演算法 資訊增益演算法實現參看:資訊增益演算法
"""
函式說明:文字向量化,標籤向量化 one-hot編碼
parameters:
feature_words:特徵詞集
doc_words:文字列表
doc_category_labels:文字類別標籤
returns:
docvec_list:文字向量列表
labelvec_list:標籤向量列表
"""def words2vec(feature_words,doc_words,doc_category_labels):
#文字列表轉向量列表
docvec_list=
for words in doc_words:
docvec = [0] * len(feature_words)
for j in words:
if j in feature_words:
docvec[feature_words.index(j)]=1
#標籤列表轉向量列表
labelvec_list =
labelset=list(set(doc_category_labels))
for label in doc_category_labels:
doclabel = [0] * len(labelset)
doclabel[labelset.index(label)]=1
return docvec_list,labelvec_list
自然語言處理 英文文字 python
關於自然語言處理的資料已經非常多,對於英文文字的處理步驟和方式在這裡給大家整理一下 一般來說英文文字處理有幾以下幾個步驟 1 分詞操作 分詞應該是所有自然語言處理首先都需要做的,那麼分詞有以下幾種方法供給大家參考 1.textblob包中提供的分詞操作用法 text.word,其中text為文字名稱...
自然語言處理
自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...
自然語言處理
前言 自然語言處理 natural language processing 是計算科學領域與人工智慧領域中的乙個重要方向。它研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。自然語言處理是一門融語言學 電腦科學 數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言...