Python实现文本特征提取的方法详解

目录
  • 1.字典文本特征提取 DictVectorizer()
    • 1.1 one-hot编码
    • 1.2 字典数据转sparse矩阵
  • 2.英文文本特征提取
  • 3.中文文本特征提取
  • 4. TF-IDF 文本特征提取 TfidfVectorizer()

1.字典文本特征提取 DictVectorizer()

1.1 one-hot编码

创建一个字典,观察如下数据形式的变化:

import pandas as pd
from sklearn.feature_extraction import DictVectorizer

data = [{'city': '洛阳', 'temperature': 39},
        {'city': '成都', 'temperature': 41},
        {'city': '宁波', 'temperature': 42},
        {'city': '佛山', 'temperature': 38}]

df1 = pd.DataFrame(data)
print(df1)

# one-hot编码 因为temperature是数值型的,所以会保留原始值,只有字符串类型的才会生成虚拟变量
df2 = pd.get_dummies(df1)
print(df2)

输出如下:

1.2 字典数据转sparse矩阵

使用DictVectorizer()创建字典特征提取模型

# 1.创建对象  默认sparse=True 返回的是sparse矩阵;  sparse=False  返回的是ndarray矩阵
transfer = DictVectorizer()
# 2.转化数据并训练
trans_data = transfer.fit_transform(data)
print(transfer.get_feature_names_out())
print(trans_data)

使用sparse矩阵没有显示0数据,节约了内存,更为简洁,这一点比ndarray矩阵更好。

2.英文文本特征提取

文本特征提取使用的是CountVectorizer文本特征提取模型,这里准备了一段英文文本(I have a dream)。统计词频并得到sparse矩阵,代码如下所示:

CountVectorizer()没有sparse参数,默认采用sparse矩阵格式。且可以通过stop_words指定停用词。

from sklearn.feature_extraction.text import CountVectorizer

data = ["I have a dream that one day this nation will rise up and live out the true meaning of its creed",
        "We hold these truths to be self-evident, that all men are created equal",
        "I have a dream that one day on the red hills of Georgia, "
        "the sons of former slaves and the sons of former slave owners will be able to sit down together at the table of brotherhood",
        "I have a dream that one day even the state of Mississippi",
        " a state sweltering with the heat of injustice",
        "sweltering with the heat of oppression",
        "will be transformed into an oasis of freedom and justice",
        "I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character",
        "I have a dream today"]

# CountVectorizer文本特征提取模型

# 1.实例化  将"is"标记为停用词
c_transfer = CountVectorizer(stop_words=["is"])

# 2.调用fit_transform
c_trans_data = c_transfer.fit_transform(data)

# 打印特征名称
print(c_transfer.get_feature_names_out())

# 打印sparse矩阵
print(c_trans_data)

输出结果如下图所示:

3.中文文本特征提取

准备一段中文文本(data.txt),以水浒传中风雪山神庙情节为例:

大雪下的正紧,林冲和差拨两个在路上又没买酒吃处。早来到草料场外,看时,一周遭有些黄土墙,两扇大门。推开看里面时,七八间草房做着仓廒,四下里都是马草堆,中间两座草厅。到那厅里,只见那老军在里面向火。差拨说道:“管营差这个林冲来替你回天王堂看守,你可即便交割。”老军拿了钥匙,引着林冲,分付道:“仓廒内自有官司封记,这几堆草一堆堆都有数目。”老军都点见了堆数,又引林冲到草厅上。老军收拾行李,临了说道:“火盆、锅子、碗碟,都借与你。”林冲道:“天王堂内我也有在那里,你要便拿了去。”老军指壁上挂一个大葫芦,说道:“你若买酒吃时,只出草场,投东大路去三二里,便有市井。”老军自和差拨回营里来。
只说林冲就床上放了包裹被卧,就坐下生些焰火起来。屋边有一堆柴炭,拿几块来生在地炉里。仰面看那草屋时,四下里崩坏了,又被朔风吹撼,摇振得动。林冲道:“这屋如何过得一冬?待雪晴了,去城中唤个泥水匠来修理。”向了一回火,觉得身上寒冷,寻思:“却才老军所说五里路外有那市井,何不去沽些酒来吃?”便去包里取些碎银子,把花枪挑了酒葫芦,将火炭盖了,取毡笠子戴上,拿了钥匙,出来把草厅门拽上。出到大门首,把两扇草场门反拽上,锁了。带了钥匙,信步投东。雪地里踏着碎琼乱玉,迤逦背着北风而行。那雪正下得紧。
行不上半里多路,看见一所古庙。林冲顶礼道:“神明庇佑,改日来烧钱纸。”又行了一回,望见一簇人家。林冲住脚看时,见篱笆中挑着一个草帚儿在露天里。林冲径到店里,主人道:“客人那里来?”林冲道:“你认得这个葫芦么?”主人看了道:“这葫芦是草料场老军的。”林冲道:“如何便认的?”店主道:“既是草料场看守大哥,且请少坐。天气寒冷,且酌三杯权当接风。”店家切一盘熟牛肉,烫一壶热酒,请林冲吃。又自买了些牛肉,又吃了数杯。就又买了一葫芦酒,包了那两块牛肉,留下碎银子,把花枪挑了酒葫芦,怀内揣了牛肉,叫声相扰,便出篱笆门,依旧迎着朔风回来。看那雪,到晚越下的紧了。古时有个书生,做了一个词,单题那贫苦的恨雪:
广莫严风刮地,这雪儿下的正好。扯絮挦绵,裁几片大如栲栳。见林间竹屋茅茨,争些儿被他压倒。富室豪家,却言道压瘴犹嫌少。向的是兽炭红炉,穿的是绵衣絮袄。手捻梅花,唱道国家祥瑞,不念贫民些小。高卧有幽人,吟咏多诗草。

对中文提取文本特征,需要安装并使用到jieba库。使用该库将文本处理成为空格连接词语的格式,再使用CountVectorizer文本特征提取模型进行提取即可。

代码示例如下:

import jieba
from sklearn.feature_extraction.text import CountVectorizer

# 将文本转为以空格相连的字符串
def cut_word(sent):
    return " ".join(list(jieba.cut(sent)))

# 将文本以行为单位,去除空格,并置于列表中。格式形如:["第一行","第二行",..."n"]
with open("./论文.txt", "r") as f:
    data = [line.replace("\n", "") for line in f.readlines()]

lis = []
# 将每一行的词汇以空格连接
for temp in data:
    lis.append(cut_word(temp))

transfer = CountVectorizer()
trans_data = transfer.fit_transform(lis)
print(transfer.get_feature_names())
# 输出sparse数组
print(trans_data)
# 转为ndarray数组(如果需要)
print(trans_data.toarray())

程序执行效果如下:

转换得到的ndarray数组形式(如果需要)如图所示:

4. TF-IDF 文本特征提取 TfidfVectorizer()

TF-IDF文本提取器可以用来评估一字词对于一个文件集或者一个语料库中的其中一份文件的重要程度。

代码展示如下:

from sklearn.feature_extraction.text import TfidfVectorizer
import jieba

def cut_word(sent):
    return " ".join(list(jieba.cut(sent)))

with open("data.txt", "r") as f:
    data = [line.replace("\n", "") for line in f.readlines()]

lis = []
for temp in data:
    # print(cut_word(temp))
    lis.append(cut_word(temp))

transfer = TfidfVectorizer()
print(transfer.get_feature_names())
print(trans_data)

程序执行结果如下:

到此这篇关于Python实现文本特征提取的方法详解的文章就介绍到这了,更多相关Python文本特征提取内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用python进行文本预处理和提取特征的实例

    如下所示: <strong><span style="font-size:14px;">文本过滤</span></strong> result = re.sub(r'[^\u4e00-\u9fa5,.?!,.::" "' '( )< >〈 〉]', "", content)#只保留中文和标点 result = re.sub(r'[^\u4e00-\u9fa5]', ""

  • Python文本特征抽取与向量化算法学习

    本文为大家分享了Python文本特征抽取与向量化的具体代码,供大家参考,具体内容如下 假设我们刚看完诺兰的大片<星际穿越>,设想如何让机器来自动分析各位观众对电影的评价到底是"赞"(positive)还是"踩"(negative)呢? 这类问题就属于情感分析问题.这类问题处理的第一步,就是将文本转换为特征. 因此,这章我们只学习第一步,如何从文本中抽取特征,并将其向量化. 由于中文的处理涉及到分词问题,本文用一个简单的例子来说明如何使用Python的机器

  • Python实现文本特征提取的方法详解

    目录 1.字典文本特征提取 DictVectorizer() 1.1 one-hot编码 1.2 字典数据转sparse矩阵 2.英文文本特征提取 3.中文文本特征提取 4. TF-IDF 文本特征提取 TfidfVectorizer() 1.字典文本特征提取 DictVectorizer() 1.1 one-hot编码 创建一个字典,观察如下数据形式的变化: import pandas as pd from sklearn.feature_extraction import DictVecto

  • Python处理文本数据的方法详解

    目录 前言 用python处理文本数据 用python处理数值型数据 前言 HI,好久不见,今天是关闭朋友圈的第60天,我是野蛮成长的AC-Asteroid. 人生苦短,我用Python,通过短短两周时间自学,从基础知识到项目实践,在这个过程中深刻体会到这款语言的魅力,今天带来一个有趣的项目,用Python处理文本数据,一起来看看今天的问题吧. 用python处理文本数据 实验目的 熟悉python的基本数据结构,以及文件的输入与输出. 实验数据 利用xxxx年xx机器学习会议的评测数据和评测任

  • Python实现画图软件功能方法详解

    概述 虽然Python的强项在人工智能,数据处理方面,但是对于日常简单的应用,Python也提供了非常友好的支持(如:Tkinter),本文主要一个简单的画图小软件,简述Python在GUI(图形用户界面)方面的应用,仅供学习分享使用,如有不足之处,还请指正. 设计思路 页面布局:主要分为上下两部分 a. 绘图区域,本例以Canvas实现 b. 下部:功能区,由按钮实现 事件监听:通过给功能按钮绑定事件,来实现不同的功能,如:绘线,绘矩形等功能. 绘图区域:监听鼠标左键的按下(开始绘图)和抬起(

  • Python对象类型及其运算方法(详解)

    基本要点: 程序中储存的所有数据都是对象(可变对象:值可以修改 不可变对象:值不可修改) 每个对象都有一个身份.一个类型.一个值 例: >>> a1 = 'abc' >>> type(a1) str 创建一个字符串对象,其身份是指向它在内存中所处的指针(在内存中的位置) a1就是引用这个具体位置的名称 使用type()函数查看其类型 其值就是'abc' 自定义类型使用class 对象的类型用于描述对象的内部表示及其支持的方法和操作 创建特定类型的对象,也将该对象称为该类

  • Python 常用模块 re 使用方法详解

    一.re模块的查找方法: 1.findall   匹配所有每一项都是列表中的一个元素 import re ret = re.findall('\d+','asd鲁班七号21313') # 正则表达式,待匹配的字符串,flag # ret = re.findall('\d','asd鲁班七号21313') # 正则表达式,待匹配的字符串,flag # print(ret) 2.search 只匹配从左到右的第一个,等到的不是直接的结果,而是一个变量,通过这个变量的group方法来获取结果 impo

  • 在自动化中用python实现键盘操作的方法详解

    原来在robotframework中使用press key方法进行键盘的操作,但是该方法需要写被操作对象的locator,不是很方便,现在找到了一种win32api库写键盘操作的一个方法(注意:此方法被操作界面必须在顶层),首先,需要安装win32api的python库,使用命令: pip install pywin32 具体实现代码如下: import win32api import win32con class MyLibrary(object): def keybd_event(self,

  • 对Python实现累加函数的方法详解

    这个需求比较奇怪,要求实现Sum和MagaSum函数,实现以下功能 Sum(1) =>1 Sum(1,2,3) =>6 MegaSum(1)() =>1 MegaSum(1)(2)(3)() =>6 实际上Sum就是Python自建的sum函数,它支持变参,变参怎么实现,自然是*args,所以很容易写出雏形: Sum def Sum(*args): count = 0 for i in args: count+=i return count 第二个函数就有点皮了,它要求有参数的时候

  • python对于requests的封装方法详解

    由于requests是http类接口的核心,因此封装前考虑问题比较多: 1. 对多种接口类型的支持: 2. 连接异常时能够重连: 3. 并发处理的选择: 4. 使用方便,容易维护: 当前并未全部实现,后期会不断完善.重点提一下并发处理的选择:python的并发处理机制由于存在GIL的原因,实现起来并不是很理想,综合考虑多进程.多线程.协程,在不考虑大并发性能测试的前提下使用了多线程-线程池的形式实现.使用的是 concurrent.futures模块.当前仅方便支持webservice接口. #

  • 对Python捕获控制台输出流的方法详解

    有时候我们的代码里可能要调用控制台命令,比如我想用Python写一个批量编译 .java 文件的脚本,用到如下代码 常规用法 os.system import os,traceback try: p = os.system("javac Test.java") print p except: print "\nexcept:\n" print traceback.format_exc() 如然编译成功会返回一个0,如果错误会返回一个非0的值给p,这种方法可以知道执行

  • python文件处理fileinput使用方法详解

    这篇文章主要介绍了python文件处理fileinput使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 fileinput模块可以对一个或多个文件中的内容进行迭代.遍历等操作,我们常用的open函数是对一个文件进行读写操作. fileinput模块的input()函数比open函数更高效和好用,体现在: input()函数生成一个迭代器,保证了在遇到大文件的读取时不会占用太大的内存. 用fileinput对文件进行循环遍历

随机推荐