Python【极简】文本分类+文本编码

sklearn-01-特征工程:特征提取 1 字典类型的特征抽取(结果是one-hot编码) API: from sklearn.feature_extraction import DictVectorizer 语法: dv = DictVectorizer(sparse=False) #实例化 dv.fit_transform() # 字典 --> one hot编码 dv.inverse_transform() # ... 阅读详情

文本分类【极简】模板

from jieba import cut
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import TfidfVectorizer

"""语料"""
texts = [
    '三个只有一个是新鲜的,其它两个都坏了,买得最差的一次水果',
    '京东,才发现你是个骗子,服务更是一样的烂',
    '火龙果很小,而且还有一个烂了,发霉了',
    '物流慢,收到时有两个底部已开始腐烂',
    '屏幕清晰度不高,而且运行速度巨慢',
    '贝质量很好,款式时尚,大小合适,做工精致,穿着舒服,服务很好',
    '质量很好的,款式也不错,看起来高档大气,卖家服务还好,不错',
    '裤子收到了,质量不错,价格便宜,穿着舒服,下次我还会来买的',
    '宝贝收到了,试了一下,穿上挺舒服的,是正品,综合给好评',
    '裤子挺好看,质量也不错,老公搭配衣服挺好看也很喜欢穿',
]
y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

"""向量转换器"""
vectorizer = TfidfVectorizer(tokenizer=cut, stop_words=set('的在了是和也有为就都说等与才这,'))
X = vectorizer.fit_transform(texts)

"""分类模型"""
clf = LogisticRegression()
clf.fit(X, y)
print(clf.score(X, y))

多元文本分类

场景:文本包含标题和正文,将两者合并输入则为一元,分开输入则为多元

from jieba import cut
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from warnings import filterwarnings
filterwarnings('ignore')


def get_data():
    y, x, xh, xb = [], [], [], []
    with open('policy.txt', encoding='utf-8') as f:
        for rows in f.read().strip().split('\n\n'):
            label, head, body = rows.split('\n', 2)
            y.append(label)
            x.append(head + '\n' + body)
            xh.append(head)
            xb.append(body)
    return y, x, xh, xb


def cut1(text):
    """cut1"""
    for word in cut(text):
        if word.strip():
            yield word.strip()


def cut2(line):
    """cut2"""
    head, body = line.split('\n', 1)
    for word in cut1(head):
        yield word + 'H'
    for word in cut1(body):
        yield word + 'B'


def clf_text(name, x, y, tokenizer=cut1):
    # 数据切分
    x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=7)
    # 向量化
    vectorizer = TfidfVectorizer(tokenizer=tokenizer, min_df=2)
    x_train = vectorizer.fit_transform(x_train)
    x_test = vectorizer.transform(x_test)
    # 建模
    clf = LogisticRegression()
    clf.fit(x_train, y_train)
    print(name, tokenizer.__doc__, clf.score(x_test, y_test))


_y, _x, _xh, _xb = get_data()
clf_text('head', _xh, _y)
clf_text('body', _xb, _y)
clf_text('h++b', _x, _y)
clf_text('h++b', _x, _y, cut2)

head cut1 0.8768472906403941
body cut1 0.8866995073891626
h++b cut1 0.8916256157635468
h++b cut2 0.8866995073891626

文本编码

sklearn文本向量化

parameterexplanationdefault
lowercase是否转小写True
stop_words停词过滤None
tokenizer文本切分(默认正则表达式)None
token_pattern文本切分的正则表达式r"(?u)\b\w\w+\b"
min_df低频词过滤(保留>=min_df)1
max_features最大特征数(按词频降序前max_features个词)None
ngram_range语言模型(1, 1)
vocabulary词表(只保留词表中存在的)None

CountVectorizer

from sklearn.feature_extraction.text import CountVectorizer
corpus = ['air air ball call', 'air ball ball', 'air air air']
vectorizer = CountVectorizer()  # 创建文本向量转换器
vectorizer.fit(corpus)  # 训练
X = vectorizer.transform(corpus)  # 转换
print(X, type(X), X[0], type(X[0]), sep='\n')
  (0, 0)	2
  (0, 1)	1
  (1, 0)	1
  (1, 1)	2
  (2, 0)	3
<class 'scipy.sparse.csr.csr_matrix'>
  (0, 0)	2
  (0, 1)	1
<class 'scipy.sparse.csr.csr_matrix'>

TfidfVectorizer(继承CountVectorizer)

import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
# 语料
texts = ['小米苹果华为小米', '苹果小米苹果', '小米小米']
# 向量化
vectorizer = TfidfVectorizer(tokenizer=jieba.cut)
X = vectorizer.fit_transform(texts)
print(X)
print(X.toarray())

引入中文分词器

默认分词器是正则表达式分词,参数是tokenizer和token_pattern
stop_words过滤不需要的词
max_features限制最大词汇量,过滤低频词

import jieba
from sklearn.feature_extraction.text import CountVectorizer
# 语料
texts = ['小米、小米、苹果、华为', '小米和苹果、1+和苹果', '华为和小米']
# 分词器
jieba.add_word('1+', 2, 'nz')
tokenizer = lambda s: jieba.cut(s, HMM=False)
# 停词
stop_words = {'、', '和', '的'}
# 向量化
vectorizer = CountVectorizer(tokenizer=tokenizer, stop_words=stop_words, max_features=3)
X = vectorizer.fit_transform(texts)
print(X)
print(list(tokenizer('小米华为苹果1+')))
print(vectorizer.transform(['小米、华为、苹果和1+']))

知识补充:压缩稀疏矩阵

  • Compressed Sparse Row Matrix
  • Compressed Sparse Column Matrix
from numpy import array
from scipy.sparse import csr_matrix, csc_matrix
a = array([[0, 0, -2, 0],
           [-1, 0, 3, 0],
           [0, 0, 0, -9]])
csr = csr_matrix(a)
csc = csc_matrix(a)
print(a, csr, type(csr), csc, type(csc), csc.toarray(), sep='\n\n')

word2id

from collections import Counter
from jieba import cut
texts = ['酸奶蛋糕', '酸奶芝士', '芝士酸奶']
counter = Counter(word for text in texts for word in cut(text))
print(counter)
word2id = {c[0]: i for i, c in enumerate(counter.most_common())}
print(word2id)
print
Counter({‘酸奶’: 3, ‘芝士’: 2, ‘蛋糕’: 1})
{‘酸奶’: 0, ‘芝士’: 1, ‘蛋糕’: 2}

one hot representation

length = len(word2id)
for word, wid in word2id.items():
    vector = [0] * length
    vector[wid] = 1
    print(word, vector)
print
酸奶 [1, 0, 0]
芝士 [0, 1, 0]
蛋糕 [0, 0, 1]

共现矩阵

语言模型+共现矩阵

共现矩阵+SVD

# 编造文本、分词
from jieba import lcut
sentences = ['我吴彦祖', '我张学友', '吴彦祖我', '张学友我刘德华吴彦祖',
             '酸奶芝士', '芝士酸奶', '芝士蛋糕', '酸奶芝士蛋糕']
ls_of_words = [lcut(sentence) for sentence in sentences]

# 生成字典和词ID
from gensim.corpora import Dictionary
dt = Dictionary(ls_of_words).token2id
ls_of_wids = [[dt[word] for word in words] for words in ls_of_words]

# 共现矩阵
import numpy as np
dimension = len(dt)  # 维数
matrix = np.matrix([[0] * dimension] * dimension)
def co_occurrence_matrix(ls):
    length = len(ls)
    for i in range(length):
        for j in range(length):
            if i != j:
                matrix[[ls[i]], [ls[j]]] += 1
for ls in ls_of_wids:
    co_occurrence_matrix(ls)
print(matrix)

# 奇异值分解(Singular Value Decomposition)
U, s, Vh = np.linalg.svd(matrix, full_matrices=False)

# 聚类
X = -U[:, 0:2]
from sklearn.cluster import KMeans
labels = KMeans(n_clusters=2).fit(X).labels_
colors = ('y', 'g')

# 可视化
import matplotlib.pyplot as mp
mp.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
for word in dt.keys():
    i = dt[word]
    mp.scatter(X[i, 1], X[i, 0], c=colors[labels[i]], s=400, alpha=0.4)
    mp.text(X[i, 1], X[i, 0], word, ha='center', va='center')
mp.show()

在这里插入图片描述

如果所示,经过共现矩阵、降维和聚类,成功地把美食归为一类,把我和吴彦祖、刘德华、张学友归为一类

附录

encn
feature特征
extraction提取
SVDSingular Value Decomposition
occurrencen. 发生、出现
dimension维数
scatternv 分散
文本分类(LSTM+PyTorch) PyTorch实战项目,基于LSTM的文本分类,数据集选用Kaggle上的Twitter数据集,用于评估评论是positive还是negative。 阅读详情

相关推荐

Python 中的文本分类

介绍 在上一章中,我们已经推导出了计算文档d属于类别c的概率的公式,记为P(c|d)。 我们已将 P(c|d) 的标准公式(如许多论文1 中使用的那样)转换为数值稳定的形式。 我们使用朴素贝叶斯分类器在 Python 中实现。朴素贝叶斯方法的正式介绍可以在我们的前一章中找到。 Python 是文本分类的理想选择,因为它是强大的字符串类和强大的方法。此外,Python 的正则表达式模块 re 为用户提供了超越其他编程语言的工具。 唯一的缺点可能是这个 Python 实现没有针对效率进行调整。

pythonandaiot的博客 2599

python import——高效编程第一步

任何一门成熟的语言,背后都有无数的开发者贡献各种函数库/包,这些函数包/库让后来的开发者工作更简单高效。python语言就是一门函数库丰富的语言。那么我们怎么才能使用外部函数库/包呢?这时候就离不开import了!(当然前提是你安装了该函数库,可以使用pip install 或者conda install,这点在之前的文章中已经介绍 https://www.jianshu.com/p/8ac804efecea) 下面我们介绍import 函数库的各种姿势 (在脚本最开始的地方申明) a)可以简单点:impo

饮冰学徒的日记 352

Dify极简部署手册

本文介绍了如何通过docker-compose快速部署Dify 1.5.1生产版本,包含优化配置和实用技巧。主要内容包括:1)配置域名和HTTPS证书;2)调整上传文件大小限制至100M;3)使用unstructured.io提升文档内容提取兼容性;4)优化Python插件配置;5)实现主系统与Dify智能体的用户ID打通方案,通过URL参数传递sys.user_id而不需修改源码。文中提供了.env和docker-compose.yaml配置文件,以及用户ID编码函数代码下载链接,帮助开发者快速部署并实现

launch2020的博客 2556

Python从入门到入魔第五天——jieba库的使用

jieba库的安装 jieba库是Python中第三方中文分词函数库,需要用户联网自定义安装, win+r调出命令行:输入cmd 命令行安装方式:pip install jieba; pycharm环境安装方式: 1.打开pycharm页面后鼠标移到左上角File处点击setting进入 2.点击Project:untitled,再点击projecr interprter 3.双击页面内的pip或者显示栏有色绿色“+” 4.输入搜索jieba,搜索后点击下方install Package jieba库的使用

偷偷学python的博客 2617

fasttext进行文本分类

https://github.com/facebookresearch/fastText python版本 https://github.com/salestock/fastText.py 这个是非官方的版本 现在已经不在使用了 官方提供了Python版本  https://github.com/facebookresearch/fastText/tree/master/python 现在用的...

光英的记忆博客 736

Python使用循环神经网络解决文本分类问题的方法详解

本文实例讲述了Python使用循环神经网络解决文本分类问题的方法。分享给大家供大家参考,具体如下: 1、概念 1.1、循环神经网络 循环神经网络(Recurrent Neural Network, RNN)是一类以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接的递归神经网络。 卷积网络的输入只有输入数据X,而循环神经网络除了输入数据X之外,每一步的输出会作为下一步的输入,...

python基础编程开发教程 2534

Python 中文分词:jieba库的使用

Python jieba库的使用,pip install jieba即可。

tiaowudexiaoyu的博客 666

手把手教你:基于python的文本分类(sklearn-决策树和随机森林实现)

本文主要介绍如何使用python的sk-learn机器学习框架搭建一个或多个:文本分类的机器学习模型,如果有毕业设计或者课程设计需求的同学可以参考本文。本项目使用了决策树和随机森林2种机器学习方法进行实验,完整代码在最下方,想要先看源码的同学可以移步本文最下方进行下载。 博主也参考过文本分类相关模型的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个可视化系统即可。

大雾的小屋的博客 1万+

python笔记——jieba库

文章目录一.概述二.jieba库使用 一.概述 1.jieba库概述 jieba库是一个重要的第三方中文分词函数库,不是安装包自带的,需要通过pip指令安装 pip3 install jieba 二.jieba库使用 1.库函数 jieba.cut(s)——精确模式,返回一个可迭代数据类型 jieba.cut(s,cut_all=True)——全模式,输出文本s中可能的单词 jieba.cut_for_search(s)——搜索引擎模式,适合搜索引擎建立索引的分词结果 jieba.lcut(s,cut_a

azrealq的博客 1万+

基于Python的文本分类实战项目完整实现

文本分类是自然语言处理(NLP)中的核心任务,广泛应用于情感分析、垃圾邮件识别、新闻 categorization 等场景。Python凭借其丰富的NLP库(如jieba、NLTK、scikit-learn、transformers)和简洁的语法,成为实现文本分类的首选语言。其强大的数据处理能力(pandas、numpy)与机器学习框架集成性,支持从预处理到模型部署的全流程开发,显著提升研发效率与系统可维护性。尽管jieba。

weixin_35649491的博客 1070

IAR9.30以上版本安装、注册、新建工程和配置过程详细介绍

IAR 一般是指一款嵌入式软件的集成开发环境,类似于 MDK-Keil 这款软件。IAR 对于不同的内核处理器,是对应不同的 IAR 软件的,IAR 到目前为止支持大部分的MCU,比如8051系列、ARM架构系列、MSP430系列、AVR系列等等这些常用的芯片架构。对于 ARM 架构的芯片,有对应的 IAR Embedded Workbench for ARM 软件平台,因为我主要是使用 ARM 架构芯片,下面安装、注册和使用都是基于这个版本进行介绍的。

luobeihai的博客 6万+

自然语言处理系列五十一》文本分类算法》Python快速文本分类器FastText

【配套新书教材】《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】新书特色:本书从自然语言处理基础开始,逐步深入各种NLP热点前沿技术,使用了Java和Python两门语言精心编排了大量代码实例,契合公司实际工作场景技能,侧重实战。

weixin_52610848的博客 1956

利用Arcgis提取nc数据并计算区域年均温

1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。

什么都学亿点点的博客 7995

5分钟上手SNAC:Python实现音频编码解码的极简示例

SNAC(Multi-Scale Neural Audio Codec)是一款基于Python的低比特率音频压缩工具,能高效将音频信号转换为离散编码。本文将带你快速掌握SNAC的安装与基础使用,只需5分钟即可完成音频的编码与解码全过程。 ## 📦 一键安装:3行命令完成环境配置 ### 1. 克隆项目代码库 ```bash git clone https://gitcode.com/gh_m

gitblog_00958的博客 751

手机拍照背后的隐形功臣:一文读懂高通ISP三兄弟(IFE/BPS/IPE)如何协同工作

本文深入解析了高通ISP三兄弟(IFE/BPS/IPE)在手机拍照中的协同工作机制。通过拟人化比喻,详细介绍了IFE作为图像前端引擎的分流预处理、BPS作为RAW格式修图师的专业处理,以及IPE作为全能后期制作人的多面功能,揭示了三者在图像处理pipeline中的高效配合与技术创新。

weixin_27032989的博客 530

西门子PLC1200 1214C DC/DC/DC 驱动步进电机

控制电机旋转的指令在“指令”中的“工艺”下的“Motion Control”(若出现程序块无法调用情况,则看备注3的第4条),本篇只介绍常用指令(若想学习详细与更多指令,请参考指令手册)。

2301_79553921的博客 1万+

基于Python的极简知识库工具:文本检索与索引的设计实践

信息检索是个人知识管理中的核心需求,面对大量Markdown笔记、日志和配置文件,如何在不引入重型系统的情况下实现快速查找?一种可行方案是采用纯文本存储与内存索引相结合的方式,既保留原始文件的自由度,又获得秒级响应。通过先扫描文件、构建索引,再进行关键词打分排序的简单架构,即可实现精准检索、内容标记和统计画像等功能。这种极简设计非常适合个人笔记库、技术文档目录及团队共享文件夹等场景。文章以tkbSimplest为例,介绍一个仅数百行Python脚本的知识库工具,剖析其扫描、检索、标记与统计四大模块的实现思路

weixin_29722783的博客 178

加速度积分得到速度的Omega算法

在工程中,有时候很难直接测量机械设备部件的速度或位移,特别是在运动着的设备上。即使在一般的场景下可以布置速度传感器,但是有时候需要同时监测速度和加速度,为了节约成本,往往通过将加速度信号直接进行积分得到速度信号。 将加速度信号积分得到速度信号有两种方法,一是直接在时域进行积分,这往往会产生趋势项,积分的结果需要进行去趋势处理。二是在频域进行积分,典型的频域积分算法是omega算法,这里做一下简单的介绍: 如果我们已经获得了加速度信号x''(t) , 其傅里叶变...

D344896224的博客 1万+

PatchPal:极简AI编码代理实现

通过可执行的Python函数扩展了代理的功能,这些函数按需运行。将一个.py文件放到。

新缸中之脑 897

【行为决策模块项目实战】解耦控制--多控制器管理与切换的方法(附C++代码)

[请添加图片描述](https://img-blog.csdnimg.cn/c11300d9e4fe421e9070f474a468d1db.jpeg)本文先对多控制器管理与切换的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容VERTICAL_VEL, //垂直速度PID控制器VERTICAL_POS, //垂直位置PID控制器HORIZONTAL, //水平速度PID控制器YAW, //航向角yaw位置逻辑控制器。

qq_35635374的博客 1212

【教程4>第6章>第15节】 基于I+jQ复数信号的LS信道估计和均衡实现1——matlab仿真分析,QPSK为例

在基于QPSK调制的通信系统中,LS信道估计和均衡是用于补偿信道失真、提高信号传输质量的重要技术。以下将详细介绍基于I+jQ复数信号的 LS 信道估计和均衡的实现原理与过程。可以看到,通过线性插值之后,QPSK信号的星座图可以模糊的看到四个星座点(图2),通过非线性插值之后,可以清晰的看到QPSK的四个星座点(图3)。可以看到,信道均衡显著提高了通信系统的可靠性和有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 657

Python裸奔编码:极简开发的艺术与实践

在软件开发中,极简主义编程强调用最精简的代码和最少的外部依赖实现功能,这种理念在Python生态中尤为珍贵。通过深度挖掘Python标准库、合理利用内置数据类型以及克制使用高级特性,开发者可以大幅减少项目依赖,提升代码透明度和可维护性。裸奔编码不仅适用于脚本和小工具开发,也能通过组合标准库模块应对Web服务等复杂场景。这种实践特别适合追求快速启动、轻量部署和深入理解语言本质的开发者。文章通过具体案例展示了如何用urllib替代requests、用csv模块处理数据,以及实现轻量级Web服务,为Python开

weixin_32864847的博客 250

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2306

python文本分类_手把手教你在Python中实现文本分类.pdf

手把手教你在Python 中实现文本分类(附代码、数据集)引言文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个或多个已定义好的类别中。文本分类的一些例子如下:• 分析社交媒体中的大众情感• 鉴别垃圾邮件和非垃圾邮件• 自动标注客户问询• 将新闻文章按主题分类目录本文将详细介绍文本分类问题并用Python 实现这个过程:文本分类是有监督学习的一个例子,它使用包...

weixin_39924329的博客 407

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python文本分类框架_手把手教你在Python中实现文本分类(附代码、数据集)

本文约2300字,建议阅读8分钟。本文将详细介绍文本分类问题并用Python实现这个过程。引言文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个或多个已定义好的类别中。文本分类的一些例子如下:分析社交媒体中的大众情感鉴别垃圾邮件和非垃圾邮件自动标注客户问询将新闻文章按主题分类目录本文将详细介绍文本分类问题并用Python实现这个过程:文本分类是有监督学习的一个例子,它使用包含...

weixin_39562234的博客 907

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python中实现文本分类(附代码、数据集)

本文将详细介绍文本分类问题并用Python实现这个过程。引言文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个或多个已定义好的类别中。文本分类的一些例子如下:分析社交媒体中的大众情感鉴别垃圾邮件和非垃圾邮件自动标注客户问询将新闻文章按主题分类目录本文将详细介绍文本分类问题并用Python...

Sevieryang/FinTech/Statistics/Quant 8589

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: PyTorch学习
下一篇: 【极简】实体识别和消歧
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值