本帖最后由 风雨阑珊处 于 2018-5-26 15:38 编辑
一.数据的特征抽取1. sklearn特征抽取api2. 字典特征抽取
[Python] 纯文本查看 复制代码 from sklearn.feature_extraction import DictVectorizer
def dict_vec():
## 实例化
dict = DictVectorizer(sparse=False)
## 调用tif_transform, 转换数据
data = dict.tif_transform([
{'city': '北京', 'temperature': 100},
{'city': '上海', 'temperature': 60},
{'city': '重庆', 'temperature': 120},
])
## 打印特征
print(dict.get_feature_names())
## 打印处理后的列名称
print(data)
3. 文本特征抽取 (情感分析, 自然语言处理)- 统计所有文章当中出现的词(重复算作一次, 符号, 单个的字母不进行统计)
- 对着词频列表进行统计, 每个转换后的句子长度一样
- 统计每篇文章在词的列表中进行次数统计
- 3.1 sklearn.feature_extraction.text
[Python] 纯文本查看 复制代码 from sklearn.feature_extraction.text import CountVectorizer
def count_vec():
cv = CountVerctorizer() # CountVectorizer里面没有sparse,需要用data.toarray()
data = cv.tif_transform(['file is short, i like python', 'life is too long, i dislike python'])
print(cv.get_feature_names()) # 词频列表
print(data.toarray())
3.2 中文特征抽取 (import jieba)
[Python] 纯文本查看 复制代码 from sklearn.feature_extraction.text import CountVectorizer
import jieba
def cut_word():
"""
jieba分词
:return: (str, str...)
"""
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
count1 = []
count2 = []
count3 = []
[count1.append(i) for i in con1]
[count2.append(i) for i in con2]
[count3.append(i) for i in con3]
c1 = ' '.join(count1)
c2 = ' '.join(count2)
c3 = ' '.join(count3)
return c1, c2, c3
def count_cn_vec():
"""
中文文本特征抽取
:return: None
"""
# 分词处理
c1, c2, c3 = cut_word()
cv = CountVectorizer()
data = cv.fit_transform([c1, c2, c3])
print(cv.get_feature_names())
print(data.toarray())
return None
if __name__ == '__main__':
count_cn_vec()
3.3 TF-IDF (sklearn.feature_extranction.text.TfidfVectorizer)- 如果每个词或短语在一片文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力, 适合用来分类.
- TF-IDF作用: 用以评估一个词对一个文件集或一个语料库中的其中一份文件的重要程度.
[Python] 纯文本查看 复制代码 from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cut_word():
"""
jieba分词
:return: list
"""
con1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。")
con2 = jieba.cut("我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。")
con3 = jieba.cut("如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。")
count1 = []
count2 = []
count3 = []
[count1.append(i) for i in con1]
[count2.append(i) for i in con2]
[count3.append(i) for i in con3]
c1 = ' '.join(count1)
c2 = ' '.join(count2)
c3 = ' '.join(count3)
return c1, c2, c3
def count_cn_vec():
"""
中文文本特征抽取
:return: None
"""
# 分词处理
c1, c2, c3 = cut_word()
tf = TfidfVectorizer()
data = tf.fit_transform([c1, c2, c3])
print(tf.get_feature_names())
print(data.toarray())
return None
if __name__ == '__main__':
count_cn_vec()
|