機器學習之文本特征提取


  英文文本特征提取:

  文本特征提取需要導入第三方庫: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 = ["世界上那些最容易的事情中,拖延時間最不費力。","記住該記住的,忘記該忘記的;改變能改變的,接受不能接受的。"]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM