spaCy簡介
spaCy語言模型包含了一些強大的文本分析功能,如詞性標注和命名實體識別功能。目前spaCy免費支持的語言有:英文、德語、法語、西班牙語、葡萄語、意大利語和荷蘭語,其他的語言也在慢慢的增長。對於spaCy處理中文文本(本文選取了《天龍八部》小說來示例)具體實現過程如下:
1、對文本進行分詞處理並去除停用詞保存成一個txt
首先,在導入spaCy相關模塊后,需要加載中文處理包。然后讀取小說數據,對天龍八部小說進行nlp處理,既包括:分詞、向量化、詞性標注、語法解析和命名實體識別,並對小說用符號“/”進行分隔。最后通過is_stop函數判斷分詞中的詞語是否為停用詞,去除掉停用詞后把結果寫入txt文件中,具體代碼如下:
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
2、提取文本中所有的人物(去重)並輸出成另一份txt
在對天龍八部進行分詞和去除停用詞處理后,利用nlp函數處理后對文本有屬性分類,提取出屬性為“PERSON”的詞語,寫入到另外一份txt文件中:
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運行該文件,結果如下:



3、改進方向
(1)從結果看來,文本分詞效果會比jieba處理效果遜色一點,分詞這部分建議還是用jieba模塊。但是spaCy除了分詞,其在向量化、詞性標注等方面准確度較高。
(2)從時間消耗來看,處理整本小說所花費的時間較長,原因也有可能是代碼中涉及到多重for循壞,這也是后續代碼需要改進的地方。
