一.书接上回!如果我们想将文字替换为中文该如何做呢?
1.1 直接修改data数据
代码如下:
def text_demo():
data = ["爱中国,爱人民","喜欢上学,喜欢上课"]
transfer = CountVectorizer()
data = transfer.fit_transform(data)
print(data.toarray())
print(transfer.get_feature_names())
return None
text_demo()
此时结果又是什么呢?会不会报错呢?
可见,此时代码将中文进行分类,但是没有进行单个字的分类,这对于日后处理较大数据集时会有较大难度且繁琐,那我们应该如何进行中文特征抽取呢?
1.2 引进jieba第三方库
首先我们需要下载第三方库,操作流程为:win+r ——> cmd ——> pip install jieba (若是conda则使用conda进行安装)
1.2.1 了解jieba的基本使用方法
这边可查看Python——jieba优秀的中文分词库(基础知识+实例) 进行相应学习
1.2.2 对文本(中文)进行特征抽取
第一步:使用jieba 对文本进行分词,代码如下:
import jieba
def cut_word(text):
# 用结巴对中文字符串进行分词
text = " ".join(list(jieba.cut(text)))
return text
第二步:进行文本特征抽取,代码如下:
from sklearn.feature_extraction.text import TfidfVectorizerdef
def text_chinese_count_demo2():
"""
对中文进行特征抽取
:return: None
"""
data = ["吾辈处末世,勿以己之长而盖人;勿以己之善而形人;勿以己之多能而困人。收敛才智,若无若虚。",
"凡称祸福自己求之者,乃圣贤之言;若谓祸福惟天所命,则世俗之论矣。",
"学习的敌人是自我的满足,要认真学习一点东西,必须从不自满开始。对自我,学而不厌”对人家,诲人不倦”我们应采取这种态度。"]
# 将原始数据转换成分好词的形式
text_list = []
for sent in data:
text_list.append(cut_word(sent))
print(text_list)
# 1、实例化一个转换器类
transfer = CountVectorizer()
# 2、调用fit_transform
data = transfer.fit_transform(text_list)
print("文本特征抽取的结果:\n", data.toarray())
print("返回特征名字:\n", transfer.get_feature_names())
return None
运行结果:
结果表明:对应下列特征名字中,列表中每一句话分词之后的词语出现次数,例如0001,其中的“1”所对应的特征名字为“之善”,其在该列表中出现的次数为一次。
二.该如何处理某个词或短语在多篇文章中出现的次数高这种情况
2.1 引进Tf-idf文本特征提取
- TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
- TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
- 词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率
- 逆向文档频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到
-
为了方便大家理解,给出一个例子:
假如一篇文件的总词语数是100个,而词语"难过"出现了5次,那么"难过"一词在该文件中的词频就是5/100=0.05。而计算文件频率(IDF)的方法是以文件集的文件总数,除以出现"难过"一词的文件数。所以,如果"难过"一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是lg(10,000,000 / 1,0000)=3。最后"难过"对于这篇文档的tf-idf的分数为0.05 * 3=0.15
代码如下:
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba
def cut_word(text):
# 用结巴对中文字符串进行分词
text = " ".join(list(jieba.cut(text)))
return text
def text_chinese_count_demo2():
"""
对中文进行特征抽取
:return: None
"""
data = ["吾辈处末世,勿以己之长而盖人;勿以己之善而形人;勿以己之多能而困人。收敛才智,若无若虚。",
"凡称祸福自己求之者,乃圣贤之言;若谓祸福惟天所命,则世俗之论矣。",
"学习的敌人是自我的满足,要认真学习一点东西,必须从不自满开始。对自我,学而不厌”对人家,诲人不倦”我们应采取这种态度。"]
# 将原始数据转换成分好词的形式
text_list = []
for sent in data:
text_list.append(cut_word(sent))
print(text_list)
# 1、实例化一个转换器类
# transfer = CountVectorizer(sparse=False)
transfer = TfidfVectorizer()
# 2、调用fit_transform
data = transfer.fit_transform(text_list)
print("文本特征抽取的结果:\n", data.toarray())
print("返回特征名字:\n", transfer.get_feature_names())
return None
text_chinese_count_demo2()
运行结果:
此时的数据类型更加方便计算机进行学习,提高效率!