机器学习之文本特征提取
英文文本特征提取:
文本特征提取需要导入第三方库: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 = ["世界上那些最容易的事情中,拖延时间最不费力。","记住该记住的,忘记该忘记的;改变能改变的,接受不能接受的。"]