spaCy語言模型包含了一些強大的文本分析功能,如詞性標註和命名實體識別功能。目前spaCy免費支持的語言有:英文、德語、法語、西班牙語、葡萄語、意大利語和荷蘭語,其餘的語言也在慢慢的增加。對於spaCy處理中文文本(本文選取了《天龍八部》小說來示例)具體實現過程以下:python
首先,在導入spaCy相關模塊後,須要加載中文處理包。而後讀取小說數據,對天龍八部小說進行nlp處理,既包括:分詞、向量化、詞性標註、語法解析和命名實體識別,並對小說用符號「/」進行分隔。最後經過is_stop函數判斷分詞中的詞語是否爲停用詞,去除掉停用詞後把結果寫入txt文件中,具體代碼以下:web
import spacy import pandas as pd import time from spacy.lang.zh.stop_words import STOP_WORDS nlp = spacy.load('zh_core_web_sm') def fenci_stopwords(data,newdata1): fenci = [] qc_stopwords =[] article = pd.read_table(data,encoding="utf-8") start1 = time.time() with open(newdata1,'w',encoding='utf-8') as f1: for i in article["天龍八部"]:#分詞 doc = nlp(i) result1 = '/'.join([t.text for t in doc]) fenci.append(result1) for j in fenci:#去除停用詞 words = nlp.vocab[j] if words.is_stop == False: qc_stopwords.append(j) result2 = '/'.join(qc_stopwords) f1.write(result2) end1 = time.time() return end1-start1
在對天龍八部進行分詞和去除停用詞處理後,利用nlp函數處理後對文本有屬性分類,提取出屬性爲「PERSON」的詞語,寫入到另一份txt文件中:app
def quchong(data,newdata2): person = [] start2 = time.time() article = pd.read_table(data,encoding="utf-8") with open(newdata2,"w",encoding="utf-8") as f2: for i in article["天龍八部"]:#分詞 doc = nlp(i) for k in doc.ents: if k.label_ == "PERSON": person.append(k.text) #print(token.text,token.pos_) rw = list(set(person)) rw = "\n".join(rw) f2.write(rw) end2 = time.time() return end2-start2
經過在PowerShell運行該文件,結果以下:
函數
(1)從結果看來,文本分詞效果會比jieba處理效果遜色一點,分詞這部分建議仍是用jieba模塊。可是spaCy除了分詞,其在向量化、詞性標註等方面準確度較高。
(2)從時間消耗來看,處理整本小說所花費的時間較長,緣由也有多是代碼中涉及到多重for循壞,這也是後續代碼須要改進的地方。spa