当前位置: 首页 > news >正文

TextBlob:简单高效的自然语言处理工具

TextBlob:简单高效的自然语言处理工具

TextBlob 是一个基于 NLTKPattern 的自然语言处理库,以简单易用著称。它提供了直观的 API,支持文本分析、情感分析、拼写纠正等常见任务,非常适合快速原型开发和学习。


为什么选择 TextBlob?

1. 简单易用

只需几行代码即可完成复杂的 NLP 任务,适合初学者快速上手。

2. 功能丰富

从分词、词性标注到情感分析、翻译,TextBlob 提供了一整套文本处理工具。

3. 基于强大的底层库

TextBlob 构建于 NLTKPattern 之上,集成了它们的强大功能。

4. 开箱即用

无需复杂配置,直接加载语言资源即可运行。


安装与入门

安装 TextBlob

使用 pip 安装:

pip install textblob

下载语言资源

某些功能需要额外的语言资源:

python -m textblob.download_corpora

快速体验

from textblob import TextBlob# 创建 TextBlob 对象
text = "TextBlob is a simple library for natural language processing."
blob = TextBlob(text)# 情感分析
print(blob.sentiment)# 分词与词性标注
print(blob.words)
print(blob.tags)

输出示例:

Sentiment(polarity=0.35, subjectivity=0.75)
['TextBlob', 'is', 'a', 'simple', 'library', 'for', 'natural', 'language', 'processing']
[('TextBlob', 'NNP'), ('is', 'VBZ'), ('a', 'DT'), ...]

TextBlob 的核心功能

1. 基本文本处理

分词与句子分割

TextBlob 提供了简单的分词和句子分割工具:

print(blob.words)  # 分词
print(blob.sentences)  # 句子分割

词性标注

每个单词都可以附带词性标签:

print(blob.tags)  # [('TextBlob', 'NNP'), ('is', 'VBZ'), ...]

名词短语提取

TextBlob 能识别句子中的名词短语:

print(blob.noun_phrases)  # ['textblob', 'simple library', 'natural language processing']

2. 情感分析

TextBlob 内置情感分析功能,返回极性polarity)和主观性subjectivity):

text = "I love TextBlob. It's such an amazing library!"
blob = TextBlob(text)print(blob.sentiment)  # Sentiment(polarity=0.625, subjectivity=0.75)
  • Polarity:范围为 -1.0 到 1.0,表示负面到正面情感。
  • Subjectivity:范围为 0.0 到 1.0,表示客观到主观程度。

3. 拼写纠正与单词建议

拼写纠正

自动修复拼写错误:

blob = TextBlob("I havv goood speling!")
print(blob.correct())  # "I have good spelling!"
单词建议

为拼写错误的单词提供建议:

word = TextBlob("speling")
print(word.spellcheck())  # [('spelling', 1.0)]

4. 翻译与语言检测

TextBlob 支持基于 Google Translate 的翻译功能:

翻译文本
blob = TextBlob("TextBlob is amazing!")
print(blob.translate(to="es"))  # "TextBlob es increíble!"
检测语言
print(blob.detect_language())  # "en"

5. 词和短语的操作

词干提取和词形还原
print(blob.words[3].lemmatize())  # "simple"
自定义 Token 操作

TextBlobWord 类允许对单词进行更多操作:

from textblob import Wordword = Word("octopuses")
print(word.pluralize())  # "octopuses"
print(word.singularize())  # "octopus"

6. 自定义分析器

TextBlob 允许使用自定义分析器(如 SpaCy)替代默认分析器,以适应更复杂的任务:

from textblob import Blobber
from textblob.tokenizers import SentenceTokenizercustom_blobber = Blobber(tokenizer=SentenceTokenizer())
blob = custom_blobber("This is a test. TextBlob is customizable!")
print(blob.sentences)

实战案例:情感分析与自动化回复

以下示例展示如何结合 TextBlob 进行情感分析并自动生成回复:

实现代码

from textblob import TextBlob# 自动回复生成
def generate_reply(text):blob = TextBlob(text)sentiment = blob.sentiment.polarityif sentiment > 0.5:return "Thank you! We're glad you feel this way!"elif sentiment < -0.5:return "We're sorry to hear that. How can we improve?"else:return "Thank you for your feedback!"# 示例输入
feedback = "The product is amazing! I love it so much!"
reply = generate_reply(feedback)
print(reply)

输出结果

Thank you! We're glad you feel this way!

TextBlob 的局限性

  1. 性能瓶颈:适合中小规模任务,不建议处理超大规模语料库。
  2. 依赖底层库:基于 NLTKPattern,某些功能可能不够灵活或高效。
  3. 翻译功能依赖外部服务:翻译和语言检测依赖 Google Translate API,可能受限于网络和服务可用性。

总结与展望

TextBlob 是一个简单但功能强大的 NLP 库,非常适合快速原型开发和基础文本分析任务。它的直观 API 和开箱即用的功能让 NLP 任务变得轻松易行。

适合场景

  • 教育和学习:入门 NLP 的绝佳选择。
  • 快速开发:适用于情感分析、文本预处理等轻量级任务。
  • 跨语言应用:简单的翻译和语言检测支持多语言处理。

相关文章:

TextBlob:简单高效的自然语言处理工具

TextBlob&#xff1a;简单高效的自然语言处理工具 TextBlob 是一个基于 NLTK 和 Pattern 的自然语言处理库&#xff0c;以简单易用著称。它提供了直观的 API&#xff0c;支持文本分析、情感分析、拼写纠正等常见任务&#xff0c;非常适合快速原型开发和学习。 为什么选择 Text…...

QT:将QTableWidget内容写入txt文件中

文章详请&#xff1a;最近在做手在眼上的标定&#xff0c;首先要采集机械臂数据和图像数据&#xff0c;我使用tablewidget进行机械臂数据的显示&#xff0c;最后的计算需要将机械臂位姿数据存储在txt文件中。 引用&#xff1a;Qt如何保存tableWidget数据&#xff1f;_qt table…...

每日十题八股-2024年12月2日

1.你知道有哪个框架用到NIO了吗&#xff1f; 2.有一个学生类&#xff0c;想按照分数排序&#xff0c;再按学号排序&#xff0c;应该怎么做&#xff1f; 3.Native方法解释一下 4.数组与集合区别&#xff0c;用过哪些&#xff1f; 5.说说Java中的集合&#xff1f; 6.Java中的线程…...

R语言森林生态系统结构、功能与稳定性分析与可视化实践高级应用

在生态学研究中&#xff0c;森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性&#xff0c;还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…...

RDMA驱动学习(三)- cq的创建

用户通过ibv_create_cq接口创建完成队列&#xff0c;函数原型和常见用法如下&#xff0c;本节以该用法为例看下cq的创建过程。 struct ibv_cq *ibv_create_cq(struct ibv_context *context, int cqe,void *cq_context,struct ibv_comp_channel *channel,int comp_vector); cq …...

Python-使用类和实例-Sun-Mon

9.2.1 Car类 class Car():"""概述车辆信息"""def __init__(self,make,model,year):"""初始化参数"""self.makemakeself.modelmodelself.yearyear //__init__方法会把依据Car类创建的实例传入的实参的值&#xff…...

【MIT-OS6.S081笔记0.5】xv6 gdb调试环境搭建

补充一下xv6 gdb调试环境的搭建&#xff0c;我这里装的是最新的15.2的gdb的版本。我下载的是下面的第二个xz后缀的文件&#xff1a; 配置最详细的步骤可以参考下面的文章&#xff1a; [MIT 6.S081] Lab 0: 实验配置, 调试及测试 这里记录一下踩过的一些报错&#xff1a; 文…...

vmware虚拟机移植

最近发现虚拟机的系统非常适合移植&#xff0c;接下来看一下具体的过程 复制vmdk 第一个重要的文件是保存vmdk&#xff0c;如果磁盘使用的是多个文件则最好进行合并一下&#xff08;用着用着会发现vmdk文件特别大&#xff0c;这是正常的&#xff0c;不要想着能压缩了&#xf…...

最大子数组和

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff…...

活着就好20241202

亲爱的朋友们&#xff0c;大家早上好&#xff01;今天是2024年12月2日&#xff0c;第49周的第一天&#xff0c;也是十二月的第二天&#xff0c;农历甲辰[龙]年十月三十。在这个全新月份的开始、阳光初升的清晨&#xff0c;愿第一缕阳光悄悄探进你的房间&#xff0c;带给你满满的…...

Scala的练习题(成绩计算)

//1.迭代器&#xff0c;跳过第一个元素 //2.把字符串转成数字 //3.如何判断一个正整数是否可以被三整除&#xff1f; &#xff08;123&#xff09; % 3 0 import wyyyy.Studentimport scala.collection.mutable.ListBuffer import scala.io.Sourcecase class Student(name: St…...

Docker中配置Mysql主从备份

Mysql配置主从备份 一、Docker中实现跨服务器主从备份二、配置步骤1.配置主库2.配置从库3.遇到问题3.其它使用到的命令 一、Docker中实现跨服务器主从备份 在 Docker 中配置 MySQL 主从备份主要通过 MySQL 主从复制实现 二、配置步骤 1.配置主库 # 进入mysql主库容器 docke…...

分布式通用计算——MapReduce(重点在shuffle 阶段)

图片均来源于B站&#xff1a;哈喽鹏程 面向批处理的分布式计算框架——MapReduce 1、Mapreduce 起源2、适用场景3、MapReduce 词频统计原理 1、Mapreduce 起源 2、适用场景 3、MapReduce 词频统计原理 map 阶段到reduce阶段&#xff0c;通过hash取模来实现reduce 。比如&…...

VMware三种网络模式(桥接、NAT模式、仅主机)模式说明

VMware三种网络模式&#xff08;桥接、NAT模式、仅主机&#xff09;模式说明 VMware 提供了三种主要的网络连接模式&#xff1a;桥接模式&#xff08;Bridged Mode&#xff09;、NAT模式&#xff08;Network Address Translation Mode&#xff09;和仅主机模式&#xff08;Hos…...

实习冲刺第三十八天

236.二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff0…...

[Linux] 信号(singal)详解(一)

标题&#xff1a;[Linux] 信号(singal)详解 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、认识信号 1、认识信号 2、信号特点 3、基本概念 二、信号的产生&#xff08;5种方式&#xff09; 三、信号的保存 正文开始&#xff1a; 一、认识信号 1、认识信…...

【设计模式系列】备忘录模式(十九)

目录 一、什么是备忘录模式 二、备忘录模式的角色 三、备忘录模式的典型应用场景 四、备忘录模式在Calendar中的应用 一、什么是备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许在不暴露对象内部状态的情况下保存和恢…...

书生大模型实战营第4期——3.3 LMDeploy 量化部署实践

文章目录 1 基础任务2 配置LMDeploy环境2.1 环境搭建2.2 模型配置2.3 LMDeploy验证启动模型文件 3 LMDeploy与InternLM2.53.1 LMDeploy API部署InternLM2.53.1.1 启动API服务器3.1.2 以命令行形式连接API服务器3.1.3 以Gradio网页形式连接API服务器 3.2 LMDeploy Lite3.2.1 设置…...

11.28深度学习_bp算法

七、BP算法 多层神经网络的学习能力比单层网络强得多。想要训练多层网络&#xff0c;需要更强大的学习算法。误差反向传播算法&#xff08;Back Propagation&#xff09;是其中最杰出的代表&#xff0c;它是目前最成功的神经网络学习算法。现实任务使用神经网络时&#xff0c;…...

U盘文件夹变打不开的文件:深度解析、恢复策略与预防之道

一、U盘文件夹变打不开的文件现象解析 在日常使用U盘的过程中&#xff0c;我们时常会遇到这样的困扰&#xff1a;原本存储有序、可以轻松访问的文件夹&#xff0c;突然之间变成了无法打开的文件。这些文件通常以未知图标或乱码形式显示&#xff0c;双击或右键尝试打开时&#…...

软件工程中的需求分析流程详解

一、需求分析的定义 需求分析&#xff08;Requirements Analysis&#xff09;是指在软件开发过程中&#xff0c;通过与用户、相关人员的沟通与讨论&#xff0c;全面理解和确定软件需求的过程。需求分析的最终目标是清晰、准确地定义软件系统应具备的功能、性能、用户界面、约束…...

springboot369高校教师教研信息填报系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;高校教师教研信息填报系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c…...

Docker Buildx 与 CNB 多平台构建实践

一、Docker Buildx 功能介绍 docker buildx 是 Docker 提供的一个增强版构建工具&#xff0c;支持更强大的构建功能&#xff0c;特别是在构建多平台镜像和高效处理复杂 Docker 镜像方面。 1.1 主要功能 多平台构建支持 使用 docker buildx&#xff0c;可以在单台设备上构建…...

VBA字典与数组第二十一讲:文本转换为数组函数Split

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…...

开源项目 - 人脸关键点检测 facial landmark 人脸关键点 (98个关键点)

开源项目 - 人脸关键点检测 facial landmark 人脸关键点 &#xff08;98个关键点&#xff09; 示例&#xff1a; ​​​​ 助力快速掌握数据集的信息和使用方式。 数据可以如此美好&#xff01;...

【Postgres_Python】使用python脚本批量导出PG数据库

示例代码说明&#xff1a; 有多个数据库需要导出为.sql格式&#xff0c;数据库名与sql文件名一致,读取的数据库名需要根据文件名进行拼接 import psycopg2 import subprocess import os folder_path D:/HQ/chongqing_20241112 # 获取文件夹下所有文件和文件夹的名称 filename…...

嵌入式Linux(SOC带GPU树莓派)无窗口系统下搭建 OpenGL ES + Qt 开发环境,并绘制旋转金字塔

树莓派无窗口系统下搭建 OpenGL ES Qt 开发环境&#xff0c;并绘制旋转金字塔 1. 安装 OpenGL ES 开发环境 运行以下命令安装所需的 OpenGL ES 开发工具和库&#xff1a; sudo apt install cmake mesa-utils libegl1-mesa-dev libgles2-mesa-dev libdrm-dev libgbm-dev2. 安…...

MySQL事物

目录 何谓事物&#xff1f; 何谓数据库事务? 并发事务带来了哪些问题? 脏读(Dirty read) 丢失修改(Lostto modify) 不可重复读(Unrepeatable read) 幻读(Phantom read) 不可重复读和幻读有什么区别? 并发事务的控制方式有哪些? SQL 标准定义了哪些事务隔离级别?…...

在 CentOS 上安装 Docker:构建容器化环境全攻略

一、引言 在当今的软件开发与运维领域&#xff0c;Docker 无疑是一颗璀璨的明星。它以轻量级虚拟化的卓越特性&#xff0c;为应用程序的打包、分发和管理开辟了崭新的高效便捷之路。无论是开发环境的快速搭建&#xff0c;还是生产环境的稳定部署&#xff0c;Docker 都展现出了…...

基于Spring Boot的宠物咖啡馆平台的设计与实现

私信我获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 基于Spring Boot的宠物咖啡馆平台的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于Spring Boot的宠物咖啡馆平台的设…...

JAVAWeb之javascript学习

1.js引入方式 1. 内嵌式&#xff1a;在head中&#xff0c;通过一对script标签引入JS代码&#xff1b;cript代码放置位置有一定的随意性&#xff0c;一般放在head标签中&#xff1b;2.引入外部js文件 在head中&#xff0c;通过一对script标签引入外部JS代码&#xff1b;注意&…...

电脑与优傲协作机器人(实体)的TCP通讯(操作记录)

目录 一、UR通信端口 二、电脑&#xff08;客户端&#xff09;连接协作机器人&#xff08;服务端&#xff09; 1.设置网络方法 2.检查设置 3.示教器切换远程控制&#xff08;注&#xff09; 4.客户端与协作机器人建立连接 5.连接测试 三、电脑&#xff08;服务端&#…...

C++初阶——动态内存管理

目录 1、C/C内存区域划分 2、C动态内存管理&#xff1a;malloc/calloc/realloc/free 3、C动态内存管理&#xff1a;new/delete 3.1 new/delete内置类型 3.2 new/delete自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 5.1 内置类型 5.2 自定…...

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo)

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 目录 Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 一、简单介绍 二、PyTorch 三、CNN 1、神经网络 2、卷…...

Attention显存统计与分析

Attention显存估计 简单的Attention函数 import torch import torch.nn as nn import einops class Attention(nn.Module):def __init__(self, dim, num_heads8, qkv_biasFalse, qk_scaleNone, attn_drop0., proj_drop0.):super().__init__()self.num_heads num_headshead_d…...

java反射

反射 Java 反射是 Java 提供的一种强大特性&#xff0c;它允许程序在运行时动态地获取类的信息&#xff0c;并操作类的属性和方法。这为编写灵活、可扩展的 Java 应用程序提供了强有力的支持 获取Class对象 package ref;public class Person {private String name ;private …...

Spring Boot入门

1、Spring Boot是什么 Spring Boot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用&#xff08;说明&#xff1a;Spring Boot底层是Spring&#xff09; 大多数 Spring Boot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术 特性&#xff1a; 快速…...

Spring Web:深度解析与实战应用

概述 大家好&#xff0c;欢迎来到今天的技术分享。我是你们的老朋友&#xff0c;今天&#xff0c;我们要深入探讨的是Spring Web模块&#xff0c;这个模块为Java Web应用程序提供了全面的支持&#xff0c;不仅具备基本的面向Web的综合特性&#xff0c;还能与常见框架如Struts2无…...

学习日志019--初识PyQt

使用pyqt创建一个登录界面 from PyQt6.QtCore import Qt # 引入pyqt6包 from PyQt6.QtGui import QIcon, QMovie from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit import sysclass MyWidget(QWidget):# 构造函数&#xff0c;继承父类的构造…...

Swift 宏(Macro)入门趣谈(五)

概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏&#xff08;Swift Macro&#xff09;。为此&#xff0c;苹果特地用 2 段视频&#xff08;入门和进阶&#xff09;颇为隆重的介绍了它。 那么到底 Swift 宏是什么&#xff1f;有什么用&…...

Linux 35.6 + JetPack v5.1.4@DeepStream安装

Linux 35.6 JetPack v5.1.4DeepStream安装 1. 源由2. 步骤Step 1 安装Jetpack 5.1.4 L4T 35.6Step 2 安装依赖组件Step 3 安装librdkafkaStep 4 安装 DeepStream SDKStep 5 测试 deepstream-appStep 6 运行 deepstream-app 3. 总结3.1 版本问题3.2 二进制help 4. 参考资料 1. …...

C++基础:list的底层实现

文章目录 1.基本结构2.迭代器的实现2.1 尾插的实现2.2 迭代器的实现 3.打印函数(模版复用实例化)4.任意位置的插入删除1. 插入2. 删除 5.析构与拷贝构造5.1 析构函数5.2 拷贝构造5.3 赋值重载 1.基本结构 与vector和string不同list需要: 一个类来放入数据和指针也就是节点 一…...

Spring中@Transactional注解与事务传播机制

文章目录 事务传播机制事务失效的场景 事务传播机制 事务的传播特性指的是 当一个事务方法调用另一个事务方法时&#xff0c;事务方法应该如何执行。 事务传播行为类型外部不存在事务外部存在事务使用方式REQUIRED(默认)开启新的事务融合到外部事务中Transactional(propagati…...

实验七 用 MATLAB 设计 FIR 数字滤波器

实验目的 加深对窗函数法设计 FIR 数字滤波器的基本原理的理解。 学习用 Matlab 语言的窗函数法编写设计 FIR 数字滤波器的程序。 了解 Matlab 语言有关窗函数法设计 FIR 数字滤波器的常用函数用法。 掌握 FIR 滤波器的快速卷积实现原理。 不同滤波器的设计方法具有不同的优…...

Linux - selinux

七、selinux 1、说明 SELinux是Security-Enhanced Linux的缩写&#xff0c;意思是安全强化的linux。 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序&#xff0c;因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 传统的文件权…...

【STL】C++ vector类模板

文章目录 基本概念vector的使用定义和初始化构造函数赋值操作容量和大小插入和删除数据存取 互换容器vector的迭代器vector储存自定义数据类型 基本概念 vector是类型相同的对象的容器&#xff0c;vector的大小可以变化&#xff0c;可以向数组中增加元素。因此&#xff0c;vec…...

物联网——WatchDog(监听器)

看门狗简介 独立看门狗框图 看门狗原理&#xff1a;定时器溢出&#xff0c;产生系统复位信号&#xff1b;若定时‘喂狗’则不产生系统复位信号 定时中断基本结构&#xff08;对比&#xff09; IWDG键寄存器 独立看门狗超时时间 WWDG(窗口看门狗) WWDG特性 WWDG超时时间 由于…...

从零开始写游戏之斗地主-网络通信

在确定了数据结构后&#xff0c;原本是打算直接开始写斗地主的游戏运行逻辑的。但是突然想到我本地写出来之后&#xff0c;也测试不了啊&#xff0c;所以还是先写通信模块了。 基本框架 在Java语言中搞网络通信&#xff0c;那么就得请出Netty这个老演员了。 主要分为两个端&…...

【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...

Vega Editor 基于 Web 的图形编辑器

Vega Editor 是一个强大的基于 Web 的图形编辑器&#xff0c;专为 Vega 和 Vega-Lite 可视化语法设计。它提供了一个交互式的环境&#xff0c;用户可以在其中编写、预览和分享他们的 Vega 和 Vega-Lite 可视化作品。Vega 和 Vega-Lite 是用于声明性可视化的开源语法&#xff0c…...