pip install Scikit-learn
#!/usr/bin/env python # -*- coding: utf-8 -*- #author tom from sklearn.feature_extraction import DictVectorizer l=[ {'city':'北京','temparatue':20}, {'city':'深圳','temparatue':40}, {'city':'廣州','temparatue':60}, ] def dictvec(): """ 字典數據抽取 :return: """ #實例化對象 dic=DictVectorizer() #調用feature,參數是字典,或者把字典放置於可迭代對象中,好比說列表 data=dic.fit_transform(l) print(dic.get_feature_names()) print(data) if __name__ == '__main__': dictvec()
結果:(sparse矩陣,這樣邊讀邊處理,有助於節約內存)python
['city=北京', 'city=廣州', 'city=深圳', 'temparatue']
(0, 0) 1.0
(0, 3) 20.0
(1, 2) 1.0
(1, 3) 40.0
(2, 1) 1.0
(2, 3) 60.0數組
改變一下實話對象的參數(sparse默認爲True,咱們把他改成False)工具
#!/usr/bin/env python # -*- coding: utf-8 -*- #author tom from sklearn.feature_extraction import DictVectorizer l=[ {'city':'北京','temparatue':20}, {'city':'深圳','temparatue':40}, {'city':'廣州','temparatue':60}, ] def dictvec(): """ 字典數據抽取 :return: """ #實例化對象 dic=DictVectorizer(sparse=False) #調用feature,參數是字典,或者把字典放置於可迭代對象中,好比說列表 data=dic.fit_transform(l) print(dic.get_feature_names()) print(data) if __name__ == '__main__': dictvec()
結果:(ndaarray或者數組) 這個咱們成爲one-hot編碼編碼
['city=北京', 'city=廣州', 'city=深圳', 'temparatue']
[[ 1. 0. 0. 20.]
[ 0. 0. 1. 40.]
[ 0. 1. 0. 60.]]spa
DictVectorizer.fit_transform(x)
返回值:轉換以前的數據格式
把關於分類的特徵值進行特徵化以區分
#!/usr/bin/env python # -*- coding: utf-8 -*- #author tom from sklearn.feature_extraction.text import CountVectorizer l=['life is short ,i like python','life is long,i dislike python'] def countvec(): """ 對文本數據進行特徵值化 :return: """ count=CountVectorizer() data=count.fit_transform(l) print(count.get_feature_names()) print(data) print('-----分割線-----------') #文本沒有sparse參數,只能調用toarray()方法轉換成array print(data.toarray()) if __name__ == '__main__': countvec()
結果:3d
['dislike', 'is', 'life', 'like', 'long', 'python', 'short'] (0, 2) 1 (0, 1) 1 (0, 6) 1 (0, 3) 1 (0, 5) 1 (1, 2) 1 (1, 1) 1 (1, 5) 1 (1, 4) 1 (1, 0) 1 -----分割線----------- [[0 1 1 1 0 1 1] [1 1 1 0 1 1 0]]
再來看一下中文的特徵抽取code
#!/usr/bin/env python # -*- coding: utf-8 -*- #author tom from sklearn.feature_extraction.text import CountVectorizer l=['life is short ,i like python','life is long,i dislike python'] l1=['人生苦短,我喜歡python','人生漫長,我不用python'] def countvec(): """ 對文本數據進行特徵值化 :return: """ count=CountVectorizer() data=count.fit_transform(l1) print(count.get_feature_names()) # print(data) print('-----分割線-----------') #文本沒有sparse參數,只能調用toarray()方法轉換成array print(data.toarray()) if __name__ == '__main__': countvec()
結果:orm
['人生漫長', '人生苦短', '我不用python', '我喜歡python'] -----分割線----------- [[0 1 0 1] [1 0 1 0]]
並無太大的實際意義,因此咱們手動對中文分詞看看對象
#!/usr/bin/env python # -*- coding: utf-8 -*- #author tom from sklearn.feature_extraction.text import CountVectorizer l=['life is short ,i like python','life is long,i dislike python'] l1=['人生 苦短,我 喜歡 python','人生 漫長,我 不用 python'] def countvec(): """ 對文本數據進行特徵值化 :return: """ count=CountVectorizer() data=count.fit_transform(l1) print(count.get_feature_names()) # print(data) print('-----分割線-----------') #文本沒有sparse參數,只能調用toarray()方法轉換成array print(data.toarray()) if __name__ == '__main__': countvec()
結果:blog
['python', '不用', '人生', '喜歡', '漫長', '苦短'] -----分割線----------- [[1 0 1 1 0 1] [1 1 1 0 1 0]]
因此,咱們須要藉助分詞工具,這邊推薦結巴
pip install jieba
實例:
#!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import jieba from sklearn.feature_extraction.text import CountVectorizer def cutWord(): """ 利用結巴分詞 :return: 分詞後的字符串 """ #切詞 con1=jieba.cut('擁有萬卷書的窮書生,並不想去和百萬富翁交換鑽石或股票。知足於田園生活的人也並不豔羨任何學者的榮譽頭銜,或高官厚祿。') con2=jieba.cut('苦樂全憑自已判斷,這和客觀環境並不必定有直接關係,正如一個不愛珠寶的女人,即便置身在極其重視虛榮的環境,也無傷她的自尊。') con3=jieba.cut('人的一輩子常處於抉擇之中,如:念哪一間大學?選哪種職業?娶哪種女子?……等等傷腦筋的事情。一我的抉擇力的有無,能夠顯示其人格成熟與否。') print(con1) print(con2) print(con3) #轉換成列表 content1=list(con1) content2=list(con2) content3=list(con3) print(content1) print(content2) print(content3) #把列表拼接成字符串(分詞後的) c1=' '.join(content1) c2=' '.join(content2) c3=' '.join(content3) print(c1) print(c2) print(c3) return c1,c2,c3 def chines_vec(): c1,c2,c3=cutWord() count=CountVectorizer() data=count.fit_transform([c1,c2,c3]) print(count.get_feature_names()) print(data.toarray()) if __name__ == '__main__': chines_vec()
結果:
['一個', '一輩子', '一種', '一間', '萬卷書', '不想', '不愛', '與否', '之中', '事情', '交換', '人格', '任何', '傷腦筋', '關係', '判斷', '即便', '能夠', '處於', '大學', '頭銜', '女人', '女子', '學者', '客觀', '並不必定', '成熟', '抉擇', '擁有', '無傷', '顯示', '有無', '極其', '正如', '知足', '環境', '珠寶', '田園生活', '百萬富翁', '直接', '窮書生', '等等', '置身', '職業', '股票', '自尊', '自已', '豔羨', '苦樂', '榮譽', '虛榮', '重視', '鑽石', '高官厚祿'] [[0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 0 1 0 1 0 0 1 1] [1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 2 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0 0] [1 1 2 1 0 0 0 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 0 1 2 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0]]
把上面的列子改一下
#!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import jieba from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer def cutWord(): """ 利用結巴分詞 :return: 分詞後的字符串 """ #切詞 con1=jieba.cut('擁有萬卷書的窮書生,並不想去和百萬富翁交換鑽石或股票。知足於田園生活的人也並不豔羨任何學者的榮譽頭銜,或高官厚祿。') con2=jieba.cut('苦樂全憑自已判斷,這和客觀環境並不必定有直接關係,正如一個不愛珠寶的女人,即便置身在極其重視虛榮的環境,也無傷她的自尊。') con3=jieba.cut('人的一輩子常處於抉擇之中,如:念哪一間大學?選哪種職業?娶哪種女子?……等等傷腦筋的事情。一我的抉擇力的有無,能夠顯示其人格成熟與否。') print(con1) print(con2) print(con3) #轉換成列表 content1=list(con1) content2=list(con2) content3=list(con3) print(content1) print(content2) print(content3) #把列表拼接成字符串(分詞後的) c1=' '.join(content1) c2=' '.join(content2) c3=' '.join(content3) print(c1) print(c2) print(c3) return c1,c2,c3 def chines_vec(): c1,c2,c3=cutWord() # count=CountVectorizer() tf=TfidfVectorizer() data=tf.fit_transform([c1,c2,c3]) print(tf.get_feature_names()) print(data.toarray()) if __name__ == '__main__': chines_vec()
結果:(值越高越重要,能夠做爲分類的依據)
['一個', '一輩子', '一種', '一間', '萬卷書', '不想', '不愛', '與否', '之中', '事情', '交換', '人格', '任何', '傷腦筋', '關係', '判斷', '即便', '能夠', '處於', '大學', '頭銜', '女人', '女子', '學者', '客觀', '並不必定', '成熟', '抉擇', '擁有', '無傷', '顯示', '有無', '極其', '正如', '知足', '環境', '珠寶', '田園生活', '百萬富翁', '直接', '窮書生', '等等', '置身', '職業', '股票', '自尊', '自已', '豔羨', '苦樂', '榮譽', '虛榮', '重視', '鑽石', '高官厚祿'] [[0. 0. 0. 0. 0.25 0.25 0. 0. 0. 0. 0.25 0. 0.25 0. 0. 0. 0. 0. 0. 0. 0.25 0. 0. 0.25 0. 0. 0. 0. 0.25 0. 0. 0. 0. 0. 0.25 0. 0. 0.25 0.25 0. 0.25 0. 0. 0. 0.25 0. 0. 0.25 0. 0.25 0. 0. 0.25 0.25 ] [0.16005431 0. 0. 0. 0. 0. 0.21045218 0. 0. 0. 0. 0. 0. 0. 0.21045218 0.21045218 0.21045218 0. 0. 0. 0. 0.21045218 0. 0. 0.21045218 0.21045218 0. 0. 0. 0.21045218 0. 0. 0.21045218 0.21045218 0. 0.42090436 0.21045218 0. 0. 0.21045218 0. 0. 0.21045218 0. 0. 0.21045218 0.21045218 0. 0.21045218 0. 0.21045218 0.21045218 0. 0. ] [0.15340416 0.20170804 0.40341607 0.20170804 0. 0. 0. 0.20170804 0.20170804 0.20170804 0. 0.20170804 0. 0.20170804 0. 0. 0. 0.20170804 0.20170804 0.20170804 0. 0. 0.20170804 0. 0. 0. 0.20170804 0.40341607 0. 0. 0.20170804 0.20170804 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.20170804 0. 0.20170804 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]]
解讀:TfidfVectorizer