机器学习之文本特征提取

  英文文本特征提取:

  文本特征提取需要导入第三方库: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 = ["世界上那些最容易的事情中,拖延时间最不费力。","记住该记住的,忘记该忘记的;改变能改变的,接受不能接受的。"]
posted @ 2020-03-20 18:09  星*月  阅读(1889)  评论(0编辑  收藏  举报