機器學習(3.文本數據的特徵抽取(第一種))

文本特徵抽取

作用:對文本數據進行特徵值化

類:sklearn.feature_extraction.text.CountVectorizer

1.CountVectorizer語法

    • CountVectorizer(max_df=1.0,min_df=1,)

               •  返回詞頻矩陣

   •CountVectorizer.fit_transform(X,y)      

            •X:文本或者包含文本字符串的可迭代對象

           •返回值:返回sparse矩陣

  •CountVectorizer.inverse_transform(X)

           •X:array數組或者sparse矩陣

返回值:轉換之前數據格式

  •CountVectorizer.get_feature_names()

          •返回值:單詞列表

2.流程和例子

from sklearn.feature_extraction.text import CountVectorizer


def conuntvec():
    """
    對文本進行特徵值化
    :return: None
    """
    cv = CountVectorizer()

    data = cv.fit_transform(["life is short,i like python",
                             "life is too long,i dislike python"])
    print(cv.get_feature_names())
    # 將sparse矩陣轉換爲·數組
    print(data.toarray())
    return None

if __name__ == '__main__':
    conuntvec()

 結果:

['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
[[0 1 1 1 0 1 1 0]
 [1 1 1 0 1 1 0 1]]

 第一行,打印出   統計所有文章當中所有的詞,重複的只看做一次   (詞的列表)

 注意: 對於單個的英文字母直接進行放棄,不進行統計  (因爲它是沒有分類的依據的)

數據數組:, 類似於統計的次數,對每篇文章,在詞的列表裏面進行統計每個詞出現的次數

 數據數組的第一行,第一個小數組:對應的輸入的數據,以逗號分隔開,

  例如第一句話是:"life is short,i like python",    對應詞的列表,出現幾次值就爲幾

 3. 文本特徵抽取: 統計次數 Count()   ,可用於文本分類,情感分析

4.

(1)對於中文特徵值化要,按照指定的格式提前分好詞,例如 

     中文文本以空格分開

from sklearn.feature_extraction.text import CountVectorizer

def countvec():
    """
    對中文文本進行特徵值化
    :return: None
    """
    cv = CountVectorizer()
    data = cv.fit_transform([
        "人生 苦短 我 喜歡 Python Python",
        "人生 漫長 不用 Python"
    ])
    print(cv.get_feature_names())
    print(data.toarray())
    return None

if __name__ == '__main__':
    countvec()

   結果:  代表的意思同英文一樣,統計出次數

['python', '不用', '人生', '喜歡', '漫長', '苦短']
[[2 0 1 1 0 1]
 [1 1 1 0 1 0]]

(2)可以使用jieba庫進行分詞

利用jieba庫做中文特徵抽取,  例子


from sklearn.feature_extraction.text import CountVectorizer
import jieba


def cutword():
    content1 = jieba.lcut("今天很殘酷,明天更殘酷,後天很美好,但絕對大部分是死在明天晚上,"
                          "所以每個人不要放棄今天。")
    content2 = jieba.lcut("我們看到的從很遠星系來的光是在幾百萬年之前發出的,"
                          "這樣當我們看到宇宙時,我們是在看它的過去。")
    content3 = jieba.lcut("如果只用一種方式瞭解某樣事物,你就不會真正瞭解它。"
                          "瞭解事物真正含義的祕密取決於如何將其與我們所瞭解的事物相聯繫。")

    # 把分詞後的列表轉換成字符串
    c1 = ' '.join(content1)
    c2 = ' '.join(content2)
    c3 = ' '.join(content3)

    return c1, c2, c3


def chinesevec():
    """
    對一段文本使用jieba分詞後組成有空格的格式的字符串進行文本特徵抽取
    :return: None
    """
    c1, c2, c3 = cutword()
    cv = CountVectorizer()
    data = cv.fit_transform([c1, c2, c3])
    print(cv.get_feature_names())
    print(data.toarray())
    return None


if __name__ == '__main__':
    chinesevec()

抽取的結果: 完成了中文特徵抽取,文本特徵值化

['一種', '不會', '不要', '之前', '瞭解', '事物', '今天', '光是在', '幾百萬年', '發出', '取決於', 
'只用', '後天', '含義', '大部分', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天',
 '星系', '晚上', '某樣', '殘酷', '每個', '看到', '真正', '祕密', '絕對', '美好', '聯繫', '過
去', '這樣']
[[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0]
 [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1]
 [1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章