英文文本特征提取:
文本特征提取需要導入第三方庫:sklearn.feature_extraction,調用其中的類CountVectorizer
代碼如下:
1 #文本特征提取 2 from sklearn.feature_extraction.text import CountVectorizer 3 #英文文本特征提取 4 def text_English_demo(): 5 data = ["I love china and china love me!","life is too long and i like python"] 6 #1 實例化轉換器對象 CountVectorizer()函數內可有參數stop_words,為列表類型,存放停用詞 7 transfer = CountVectorizer() 8 #2 調用文本特征提取函數 9 new_data = transfer.fit_transform(data) 10 print("特征名:\n",transfer.get_feature_names()) 11 print("new_data:\n",new_data.toarray()) 12 if __name__ == '__main__': 13 text_English_demo() #英文文本特征提取
注:CountVectorizer()不含像字典特征提取一樣可帶參數sparse,所以不能通過這種方式使得輸出格式為二維數組格式,但可以通過new_data.toarray()進行轉換
結果截圖:二維列表中的值為相應的特征詞的出現個數
當CountVectorizer(stop_words = ['and'])時:
結果:
中文文本特征提取:
我們先嘗試一下像提取英文特征詞一樣提取中文特征詞:
代碼如下:
#文本特征提取 from sklearn.feature_extraction.text import CountVectorizer #中文文本特征提取 def text_chinese_demo(): data = ["我愛北京!","天藍藍秋草香"] #1 實例化轉換器對象 CountVectorizer()函數內可有參數stop_words,為列表類型,存放停用詞 transfer = CountVectorizer() #2 調用文本特征提取函數 new_data = transfer.fit_transform(data) print("特征名:\n",transfer.get_feature_names()) print("new_data:\n",new_data.toarray()) if __name__ == '__main__': text_chinese_demo()
結果截圖:
emmmmm,這么看來是不行的,那么我們只好先使用jieba分詞了。
首先我們要引入jieba庫
代碼:
import jieba #中文文本特征提取jieba分詞 def text_chinese_demo2(): data = ["世界上那些最容易的事情中,拖延時間最不費力。","記住該記住的,忘記該忘記的;改變能改變的,接受不能接受的。"] for each in range(len(data)): result = "/".join(jieba.cut(data[each])) print(data[each],"\n分詞結果:",result) def get_participle(text): return " ".join(jieba.cut(text)) if __name__ == '__main__': text_chinese_demo2()
結果截圖:
然后我們將分詞得到的結果列表data使用轉換器對象CountVectorizer類的fit_transform()進行特征提取
注:CountVectorizer(stop_words = [])可添加參數stop_words列表存放停用詞
完整代碼:
import jieba #中文文本特征提取jieba分詞 def text_chinese_demo2(): data = ["世界上那些最容易的事情中,拖延時間最不費力。","記住該記住的,忘記該忘記的;改變能改變的,接受不能接受的。"] data_jieba = [] for each in range(len(data)): data_jieba.append("/".join(jieba.cut(data[each]))) # 1 實例化轉換器對象 CountVectorizer()函數內可有參數stop_words,為列表類型,存放停用詞 transfer = CountVectorizer() # 2 調用文本特征提取函數 new_data = transfer.fit_transform(data_jieba) print("特征名:\n", transfer.get_feature_names()) print("new_data:\n", new_data.toarray()) def get_participle(text): return " ".join(jieba.cut(text)) if __name__ == '__main__': text_chinese_demo2()
結果截圖:
data = ["世界上那些最容易的事情中,拖延時間最不費力。","記住該記住的,忘記該忘記的;改變能改變的,接受不能接受的。"]