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

按句子切分文本、保留 token 对齐信息、**适配 tokenizer(如 BERT)**这种需求

在之前的文章中我解释了 把长文本切分成一句一句的小段(chunk),每一段尽量是一个完整的句子,而不是强行按字数截断。 但是这个方法自己写会比较复杂,有很多处理这种场景的工具可以直接拿来用。

下面就 处理按句子切分文本保留 token 对齐信息、**适配 tokenizer(如 BERT)**这种需求,有好用的工具库省去复杂的手动处理工作。下面我列出几个常用的工具库,并说明它们适合什么场景:


🔧 1. NLTK(自然语言工具包)

✅ 特点:

  • 提供强大的句子切分工具(sent_tokenize
  • 适合英文,中文用起来需要配合其它工具

🔍 示例代码(英文):

from nltk.tokenize import sent_tokenizetext = "Today is a good day. Let's go for a walk."
sentences = sent_tokenize(text)
print(sentences)
# 输出: ['Today is a good day.', "Let's go for a walk."]

🚫 局限:

  • 中文切句不准确
  • 不提供 token offset 信息(和 tokenizer 无法对齐)

🔧 2. spaCy

✅ 特点:

  • 句子分割(Sentence Segmentation)精准
  • 多语言支持
  • 可获取 token 的位置信息(offset)

🔍 示例(英文):

import spacynlp = spacy.load("en_core_web_sm")
doc = nlp("This is the first sentence. Here's the second.")for sent in doc.sents:print(sent.text, sent.start_char, sent.end_char)

🚫 局限:

  • 中文支持一般(可用 spacy-zhpkuseg 插件)
  • transformers 的 tokenizer 不一定对齐(除非特殊处理)

🔧 3. Stanza(Stanford NLP)

✅ 特点:

  • 多语言支持,包括中文
  • 分词、句子切分、词性、NER一站式搞定
  • 可拿到每个 token 的原始文本位置

安装:

pip install stanza

示例:

import stanza
stanza.download('zh')  # 下载中文模型
nlp = stanza.Pipeline(lang='zh', processors='tokenize')
doc = nlp("今天天气很好。我们一起去公园吧!")for sentence in doc.sentences:print(sentence.text)

👍 优势:

  • 中文分句表现好
  • 保留原始 token 位置

🔧 4. transformers + jieba(中文分词)

当你用的是 HuggingFace 的 transformers 模型(如 BERT、LLaMA),推荐做法是结合中文分词器(如 jieba)先切句,再送 tokenizer。

import jieba
import redef cut_sent(text):return re.split('(?<=[。!?])', text)  # 保留句号text = "今天天气不错。我们一起去公园玩吧!好不好?"
sentences = cut_sent(text)
print(sentences)

🚫 局限:

  • 只按标点切句,不如 NLP 库智能
  • 没有 token 对齐位置信息(unless 自己配合 tokenizer 来计算)

🔧 5. textsplit / split_into_sentences(轻量工具)

一些轻量的工具库也可用,比如 textsplit,或者你可以使用 GitHub 上流行的 Python 函数(如 split_into_sentences)直接复制到项目中。


✅ 如果你想处理中文、对 tokenizer 精准对齐,还要用于 embedding、RAG,我推荐:

方案说明
Stanza适合中文语料,支持 offset 提取
spaCy + zh_core_web_trf中文大模型句子切分(可调插件)
✅ 自己封装 tokenizer + offset_mapping(这段代码)最精准,适配 HuggingFace 模型,推荐用于高质量任务
🔄 jieba + re.split()简单好用,适合轻量应用场景

🔚 小结:选哪种工具取决于你的需求

场景推荐工具
英文、快速开发nltk / spaCy
中文、需要高质量切句Stanza / spaCy + zh plugin
transformers tokenizer 结果严格对齐自定义 tokenizer + offset 方案(这段代码)
不要求 offset,只想快速切句jieba + 正则

相关文章:

按句子切分文本、保留 token 对齐信息、**适配 tokenizer(如 BERT)**这种需求

在之前的文章中我解释了 把长文本切分成一句一句的小段&#xff08;chunk&#xff09;&#xff0c;每一段尽量是一个完整的句子&#xff0c;而不是强行按字数截断。 但是这个方法自己写会比较复杂&#xff0c;有很多处理这种场景的工具可以直接拿来用。 下面就 处理按句子切分…...

缓存(1):三级缓存

三级缓存是指什么 我们常说的三级缓存如下&#xff1a; CPU三级缓存Spring三级缓存应用架构&#xff08;JVM、分布式缓存、db&#xff09;三级缓存 CPU 基本概念 CPU 的访问速度每 18 个月就会翻 倍&#xff0c;相当于每年增⻓ 60% 左右&#xff0c;内存的速度当然也会不断…...

Kubernetes client-go 客户端类型与初始化指南

Kubernetes client-go 客户端类型与初始化指南 在 Kubernetes 的 client-go 库中&#xff0c;存在多种客户端用于与 API 服务器交互。以下介绍主要客户端类型&#xff0c;包括用途、初始化方式及 Demo。 1. RESTClient 用途 RESTClient 是底层 REST 客户端&#xff0c;直接…...

【金仓数据库征文】金仓数据库:创新驱动,引领数据库行业新未来

一、引言 在数字化转型的时代洪流中&#xff0c;数据已跃升为企业的核心资产&#xff0c;宛如企业运营与发展的 “数字命脉”。从企业日常运营的精细化管理&#xff0c;到战略决策的高瞻远瞩制定&#xff1b;从客户关系管理的深度耕耘&#xff0c;到供应链优化的全面协同&…...

图漾相机——Sample_V2示例程序(待补充)

文章目录 1.SDK支持的平台类型1.1 Windows 平台1.2 Linux平台 2.Sample_V2编译流程2.1 Windows环境2.2 Linux环境编译 3.Sample_V2示例程序测试3.1 ListDevice_v23.2 DepthStream_v23.3 ExposureTimeSetting_v23.4 ForceDeviceIP_v23.5 GetCalibData_v23.6 NetStatistic_v23.7 …...

手写 vue 源码 ===:自定义调度器、递归调用规避与深度代理

目录 引言 自定义调度器&#xff08;Scheduler&#xff09; 什么是调度器&#xff1f; 调度器的实现原理 自定义调度器的实际应用 切面编程&#xff08;AOP&#xff09;思想在调度器中的应用 递归调用规避 递归调用的问题 Vue 如何规避递归调用 深度代理&#xff08;D…...

WPF实时调试的一种实现方法

在WPF程序中&#xff0c;如果我们需要对程序进行调试&#xff0c;一般是使用断点/单步或输出日志之类的调试方法。 如果我们需要实时查看程序输出&#xff0c;可以将程序的输出类型修改为控制台应用程序 这样我们在程序运行后&#xff0c;就可以得到一个控制台窗口。 然后再配…...

数据库操作

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…...

学习笔记:数据库——事务

1.内容&#xff1a; 基于现有数据库设计检查点实验&#xff0c;观察比较提交前后执行结果并分析。 2.实现 源码 -- 开启事务 START TRANSACTION;-- 插入一条订单记录&#xff08;客户ID为10002&#xff09; INSERT INTO orders (o_date, c_id) VALUES (NOW(), 10002);-- 获…...

企业级可观测性实现:OpenObserve云原生平台的本地化部署与远程访问解析

文章目录 前言1. 安装Docker2. 创建并启动OpenObserve容器3. 本地访问测试4. 公网访问本地部署的OpenObserve4.1 内网穿透工具安装4.2 创建公网地址 5. 配置固定公网地址 前言 嘿&#xff0c;各位小伙伴们&#xff0c;今天要给大家揭秘一个在云原生领域里横扫千军的秘密法宝—…...

【Linux系统】第三节—权限

Hello&#xff0c;好久不见—— 云边有个稻草人-CSDN个人博客主页 Linux-本节文章所属专栏-欢迎订阅-持续更新中~~~ 目录 hi&#xff01;在这里—本节课重要知识点详解 一、Shell命令以及运行原理 二、Linux权限 2.1 Linux权限的概念 2.2 Linux权限管理 2.3 ⽂件权限值的…...

@Data和 @NoArgsConstructor注解详解

Data 和 NoArgsConstructor 注解详解 1. Data 注解 作用&#xff1a;Data 是 Lombok 提供的一个复合注解&#xff0c;用于自动生成 Java 类的常用方法&#xff0c;减少样板代码。生成的内容&#xff1a; Getter 和 Setter&#xff1a;为所有非静态、非 final 字段生成 getter…...

《云计算》第三版总结

《云计算》第三版总结 云计算体系结构 云计算成本优势 开源云计算架构Hadoop2.0 Hadoop体系架构 Hadoop访问接口Hadoop编程接口 Hadoop大家族 分布式组件概述ZooKeeperHbasePigHiveOozieFlumeMahout 虚拟化技术 服务器虚拟化存储虚拟化网络虚拟化桌面虚拟化OpenStack开源虚…...

滚珠导轨:电子制造领域精密运动的核心支撑

电子制造正朝着高精度、高效率方向飞速发展&#xff0c;滚珠导轨在这一进程中扮演着重要角色。滚珠导轨在电子制造领域中具有广泛且重要的应用&#xff0c;主要体现在以下几个方面&#xff1a; 1、印刷电路板&#xff08;PCB&#xff09;制造设备&#xff1a;滚珠导轨在PCB制造…...

Spark缓存--cache方法

在Spark 中&#xff0c;cache() 是用于优化计算性能的核心方法之一&#xff0c;但它有许多细节需要深入理解。以下是关于 cache() 的详细技术解析&#xff1a; 1. cache() 的本质 简化的 persist()&#xff1a;cache() 是 persist(StorageLevel.MEMORY_ONLY) 的快捷方式&#x…...

kafka logs storage

Kafka 会将日志文件按段&#xff08;Segment&#xff09;存储。 Segment是Kafka的最小存储单元&#xff0c;它是一个可追加的文件&#xff0c;用于存储Kafka分区中的一部分消息。 在文件系统中&#xff0c;Partition 是目录名&#xff0c;而Segment 是文件名。 Segment可以通过…...

数据分析平台选型与最佳实践:如何打造高效、灵活的数据生态?

数据分析平台选型与最佳实践:如何打造高效、灵活的数据生态? 在大数据时代,数据分析平台已经成为企业决策的核心支撑。从传统 BI(商业智能)到现代 AI 驱动的数据分析,选择合适的平台不仅影响数据处理效率,也决定了企业的数字化竞争力。面对市场上的众多解决方案(如 Ap…...

MYSQL之索引结构,为何要用B+树

索引的目的就是为了提高查询效率 索引的结构是B树&#xff0c;那么说到B树&#xff0c;必须提一下其他三种结构&#xff0c;分别是&#xff1a;二叉查找树、平衡二叉树、B树 我们来看看各自的结构特征 二叉查找树 特点:任何节点的左子节点的值都小于当前节点的值&#xff0c;右…...

OpenCV 中用于背景分割的一个类cv::bgsegm::BackgroundSubtractorLSBP

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::bgsegm::BackgroundSubtractorLSBP 是 OpenCV 中用于背景分割的一个类&#xff0c;它基于局部样本二进制模式&#xff08;Local Sample Bina…...

【PmHub后端篇】PmHub Gateway全局过滤器:接口调用耗时统计及黑白名单配置技术深度解析

在微服务架构日益成为现代应用开发主流模式的背景下&#xff0c;网关作为微服务架构前端的关键组件&#xff0c;肩负着路由请求、负载均衡、安全认证、流量控制、监控和日志记录等多项重要任务。本文将围绕PmHub项目中Gateway全局过滤器实现接口调用耗时统计的相关技术进行深入…...

国产激光二极管厂家

中国在激光二极管&#xff08;Laser Diode&#xff09;领域已有多家厂商布局&#xff0c;涵盖从低功率到高功率、不同波长的产品&#xff0c;应用于工业、医疗、通信、消费电子等领域。以下是部分国产激光二极管厂家及相关信息&#xff0c;供参考&#xff1a; 1. 武汉锐科光纤…...

安卓基础(XML)

123 属性​​​​行为​​​​适用场景​​​​注意事项​​match_parent填满父容器可用空间全屏视图、占满剩余空间父容器需有固定尺寸wrap_content根据内容自适应尺寸动态文本、图标、浮动按钮内容过长时可能超出父容器需处理 123 ​​属性​​​​作用​​​​常用值​​…...

uniapp|获取当前用户定位、与系统设定位置计算相隔米数、实现打卡签到(可自定义设定位置、位置有效范围米数)

基于UniApp阐述移动应用开发中定位功能的实现全流程,涵盖实时定位获取、动态距离计算与自定义位置、有效范围设定等功能。文章提供完整的代码示例与适配方案,适用于社交签到、课堂教室打卡等场景。 目录 引言定位功能在移动应用中的价值(社交、导航、O2O等场景)UniApp跨平台…...

matlab稳定求解高精度二维对流扩散方程

利用MATLAB稳定求解高精度二维对流扩散方程 Diffusion_1D.m , 2310 Diffusion_2D.m , 3813 license.txt , 1334...

【最新版】likeshop连锁点餐系统-PHP版+uniapp前端全开源

一.系统介绍 likeshop外卖点餐系统适用于茶饮类的外卖点餐场景&#xff0c;搭建自己的一点点、奈雪、喜茶点餐系统。 系统基于总部多门店的连锁模式&#xff0c;拥有门店独立管理后台&#xff0c;支持总部定价和门店定价LBS定位点餐&#xff0c;可堂食可外卖。无论运营还是二开…...

Redis 重回开源怀抱:开源精神的回归与未来展望

在开源软件的广袤天地里&#xff0c;Redis 一直是备受瞩目的明星项目。近期&#xff0c;Redis 宣布重新回归开源&#xff0c;这一消息犹如一颗石子投入平静的湖面&#xff0c;在技术社区激起层层涟漪。今天&#xff0c;就让我们深入了解 Redis 这一重大转变背后的故事、意义以及…...

mac运行java文件提示 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序

1、问题如上 双击java文件打不开&#xff0c;命令行报错。查找了下文章说java8之后&#xff0c;高版本jdk不自带javafx&#xff0c;需要自己下载 2、解决办法 首先查看自己的java版本&#xff0c;我是17.0.10 访问 JavaFX - Gluon 下载对应的版本&#xff0c;如果没有对应的 …...

pimpl与unique_ptr的问题

PImpl与std::unique_ptr组合 pimpl(Pointer to Implementation)是C程序开发中非常常用的技巧之一&#xff0c;它的好处有&#xff1a; 节省程序编译时间保持程序/库的二进制兼容性隐藏实现细节 举例一个常见的pimpl的使用示例&#xff1a; // a.h class Impl; //前置声明 c…...

Opencv进阶操作:图像拼接

文章目录 前言一、图像拼接的原理1. 特征提取与匹配2. 图像配准3. 图像变换与投影4. 图像融合5. 优化与后处理 二、图像拼接的简单实现&#xff08;案例实现&#xff09;1.引入库2.定义cv_show()函数3.创建特征检测函数detectAndDescribe()4.读取拼接图片5.计算图片特征点及描述…...

记录Token反序列化OAuth2Authentication(主要是直接存储用户信息的UserDetails )

项目场景&#xff1a; 本地开发环境部署了多套系统&#xff0c;并且使用了同一套登入鉴权组件&#xff0c;存入的TokenStore也是相同的Redis库&#xff1b; 问题描述&原因分析 由于是做的不同项目&#xff0c;group等组织机构不同&#xff0c;导致多系统若是有存储相同用…...

【QT】深入理解 Qt 中的对象树:机制、用途与最佳实践

深入理解 Qt 中的对象树&#xff1a;机制、用途与最佳实践 在使用 Qt 编程时&#xff0c;你是否注意到很多对象可以设置“父对象”&#xff1f;比如&#xff1a; QPushButton* btn new QPushButton(parentWidget);这不是简单的层级结构&#xff0c;而是 Qt 强大而优雅的 对象…...

基于FPGA的血氧和心率蓝牙监测系统设计-max30102

文章目录 前言一、芯片手册分析二、串口接口的血氧模块使用讲解三、仿真时序分析四、代码分析1.蓝牙数据发送2.心率数据采集 总结 前言 本产品的核心是基于心率传感器的智能心率监测系统&#xff0c;通过硬件端的心率传感器获取人体的心率和血氧浓度等信息&#xff0c;并进行实…...

华为首款鸿蒙电脑正式亮相,开启国产操作系统新篇章

5 月 8 日&#xff0c;华为在深圳举办鸿蒙电脑技术与生态沟通会&#xff0c;正式推出了备受瞩目的首款鸿蒙电脑&#xff0c;这一重大举措标志着国产操作系统在个人电脑&#xff08;PC&#xff09;领域实现了关键突破&#xff0c;为行业发展注入了新的活力。​ 历经五年打磨&…...

Docker部署常见应用之Superset

文章目录 使用 Docker 部署使用 Docker Compose 部署参考文章 以下是使用 Docker 部署 Superset 并将存储配置为 MySQL 的详细步骤&#xff1a; 使用 Docker 部署 获取Superset镜像: 使用Docker从官方仓库拉取Superset镜像&#xff1a;docker pull apache/superset:4.0.0创建 …...

触想CX-3588工控主板应用于移动AI数字人,赋能新型智能交互

一、行业发展背景 随着AI智能、自主导航和透明屏显示等技术的不断进步&#xff0c;以及用户对“拟人化”、“沉浸式”交互体验的期待&#xff0c;一种新型交互终端——“移动AI数字人”正在加速实现规模化商用。 各大展厅展馆、零售导购、教学政务甚至家庭场景中&#xff0c;移…...

关系代数操作之复杂扩展操作

除&#xff08;Division&#xff09; 定义&#xff1a;关系R为n度关系&#xff0c;关系S为m度关系&#xff0c;m<n,记作RS&#xff0c;关系是K&#xff08;n-m&#xff09;度关系 数学描述&#xff1a; 相当于&#xff08;RS&#xff09;*S在R中的元组 外连接&#xff08…...

STM32G070xx将Flash页分块方式存储,固定数据块存储,实现一次擦除多次写入

STM32G070xx将Flash页分块方式存储&#xff0c;固定数据块存储&#xff0c;实现一次擦除多次写入 参考例程例程说明一、存储区数据结构二、读取存储区数据三、写入存储区数据四、测试函数五、测试结果 参考例程 STM32G0xx使用LL库将Flash页分块方式存储数据实现一次擦除可多次…...

V4L2应用程序开发-- 控制流程

使用摄像头时&#xff0c;我们可以调整很多参数&#xff0c;比如&#xff1a; 对于视频流本身&#xff1a; 设置格式&#xff1a;比如V4L2_PIX_FMT_YUYV、V4L2_PIX_FMT_MJPEG、V4L2_PIX_FMT_RGB565 设置分辨率&#xff1a;1024*768等 对于控制部分&#xff1a; 调节亮度 调…...

《大数据技术之Scala》

这是一篇关于大数据技术中Scala语言的基础教程文章&#xff0c;主要介绍了Scala语言的发展历史、与Java的关系、语言特点、环境搭建、插件安装、编程基础、变量和数据类型、运算符、流程控制、函数式编程、面向对象编程、集合操作、模式匹配、异常处理、隐式转换和泛型等核心内…...

使用thymeleaf模版导出swagger3的word格式接口文档

1.pom配置 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.8.RELEASE</version></parent><properties><skipTests>true</skipTests&g…...

Android RecyclerView自带的OnFlingListener,Kotlin

Android RecyclerView自带的OnFlingListener&#xff0c;Kotlin Android启动应用时屏蔽RecyclerView滑动&#xff0c;延时后再允许滑动&#xff0c;Kotlin-CSDN博客 使用了GestureDetectorRecyclerView的setOnTouchListener检测用户的快滑fling事件。发现RecyclerView也自带了监…...

STM32+安信可Ai-WB2-12F连接阿里云物联网平台

第一步&#xff1a;在阿里云物联网平台创建设备 具体操作流程如下 第二步&#xff1a;生成个人client_id,用户名和密码 打开该软件sign.html 将刚才复制的信息粘贴进去 生成自己的client_id,用户名和密码 第三步&#xff1a;打开MQTTfx软件 电机connect旁边的配置&#xff0…...

Python实现中文数字与阿拉伯数字映射生成器(支持0-9999)

文章目录 1. 引言2. 需求分析‌3. 核心实现思路‌4. 完整代码实现‌ 1. 引言 在中文文本处理和自然语言处理(NLP)应用中&#xff0c;经常需要将中文数字转换为阿拉伯数字。本文将介绍如何使用Python根据用户从控制台输入的数字范围&#xff0c;生成相应的中文数字到阿拉伯数字…...

链表的面试题4之合并有序链表

这篇文章我们继续来讲链表中很经典的面试题&#xff1a;合并有序链表。 目录 迭代 递归 我们首先来看一下这张图片里面的要求&#xff0c;给你两个链表&#xff0c;要求把他们按照从小到大的方式排列。 这里涉及到几个问题&#xff0c;首先&#xff0c;我们的头节点是不是要…...

CTF - PWN之ORW记录

CTF - Pwn之ORW记录https://mp.weixin.qq.com/s/uiRtqCSopn6U6NqyKJ8I7Q...

mission planner烧录ardupilot固件报错死机

问题 烧录自己编译的固件&#xff0c;upload done成功后&#xff0c;又跳出以下提示 &#xff0c;返回重新烧录仍然报错 解决 先烧录官方稳定的固件然后使用mission planner连接&#xff0c;此时可能会反复识别串口&#xff0c;因为会死机反复重启&#xff0c;导致灯闪烁又…...

单片机嵌入式滤波算法库

kw_ucFiltering库说明 本科针对常用的滤波算法进行汇总&#xff0c;主要包括&#xff1a; 一阶滤波算法 平滑滤波 中位值滤波 限幅 卡尔曼滤波 截至目前&#xff08;20250508&#xff09;滤波算法持续更新中。 本库开源连接地址&#xff1a;gitee连接 一阶滤波算法实现 原理…...

CAS、CAS自旋、CAS自旋锁、CLH锁与Java AQS:深入理解并发编程核心机制

CAS、CAS自旋、CAS自旋锁、CLH锁与Java AQS&#xff1a;深入理解并发编程核心机制 1. CAS&#xff08;Compare and Swap&#xff09; 什么是CAS&#xff1f; CAS&#xff08;Compare and Swap&#xff09;是一种无锁&#xff08;Lock-Free&#xff09;的原子操作&#xff0c;…...

《运维那些事儿》专栏总目录(持续更新)

《运维那些事儿》专栏以Linux系统为基础&#xff0c;分享作者十年运维生涯中运用到的关键技术要点。本专栏涵盖消息中间件、数据中间件、数据库、虚拟化、Web服务器、高可用架构等运维工作中涉及到的相关内容&#xff0c;每周持续交叉更新一篇高质量技术博文。学生可用于了解、…...

鸿蒙NEXT开发动画案例4

1.创建空白项目 2.Page文件夹下面新建Spin.ets文件&#xff0c;代码如下&#xff1a; /*** TODO SpinKit动画组件 - 双粒子旋转缩放动画* author: CSDN-鸿蒙布道师* since: 2025/05/08*/ ComponentV2 export struct SpinFour {// 参数定义Require Param spinSize: number 36…...