SuperAPI AI 工具集

bengali-nlp

写作与研究

查看项目

更新于 10-15 08:34

技能介绍

用途

本技能面向在软件应用和 AI 系统中处理、存储与显示孟加拉语(Bangla)文本的开发者,提供一套可复用的处理模式与最佳实践。当需要处理孟加拉语文本数据、构建面向孟加拉语用户的应用、处理 NCTB(国家课程与教科书委员会)教育内容、实现孟加拉语搜索/自动补全/文本输入、训练或微调孟加拉语 LLM、构建孟加拉语聊天机器人或对话式 AI,以及处理孟加拉语与英语混排(Banglish)文本时,可启用本技能。

主要能力

Unicode 与文字脚本处理

孟加拉文字位于 U+0980–U+09FF 区间,资料列出了关键字符类,包括独立元音、辅音、附加辅音(ড়、ঢ়、য়)、Nukta、依赖元音符号(কার)、Hasanta(virama,用于构成连字)、Khanda Ta(ৎ)、孟加拉数字(০–৯)、阿萨姆字母、卢比符号以及历史货币分子分母等。

规范化方面,要求在比较、存储或搜索前始终将孟加拉语文本规范化为 NFC。资料给出了 Python 与 JavaScript 的规范化函数示例,并说明 NFC 会将基字符与组合标记组合为预组合形式,且该操作是幂等的。

连字(যুক্তবর্ণ)处理

孟加拉语连字通过辅音之间的 Hasanta(্)构成,例如 ক + ্ + ষ = ক্ষ。资料强调绝不能在连字中间拆分字符串,而应使用字素簇(grapheme cluster)边界。示例展示了用 Python 的 regex 模块(\X)和 JavaScript 的 Intl.Segmenter 来按字素计数,并指出“ক্ষ”是 1 个字素但由 3 个码点组成。

孟加拉数字

资料提供了孟加拉数字(০-৯)与 ASCII 数字(0-9)之间的双向转换函数示例。

分词

孟加拉语词间使用空格,但复合词和后置词会使分词复杂化。资料给出了基于空白与标点的基本分词器示例,并建议生产环境使用训练好的分词器,如 bnlp、带孟加拉语模型的 stanza、带孟加拉语管道的 spaCy。同时展示了 bnlp 工具包中 NLTKTokenizer 的用法,并提醒分词器应识别常见后缀,如 -এর(属格)、-তে(方位格)、-কে(宾格)、-র、-য়。

文本处理模式

包括脚本检测(判断文本是否含孟加拉字符、计算孟加拉字符占比)、停用词表(并特别提醒不要将否定词 না、নয়、নেই 放入通用停用词表,因为它们会改变意图和情感)、排序与排序规则(推荐使用 PyICU 或 JavaScript 的 Intl.Collator 进行区域感知排序),以及带规范化的搜索函数示例(并提醒空查询应返回空结果而非整个语料库)。

AI/LLM 应用

资料强调孟加拉语文本、Banglish 输入和网页抓取内容应视为不可信用户数据,必须用清晰分隔符将系统指令与用户提供的内容分开,并在执行工具调用或破坏性操作前进行验证。给出了孟加拉语系统提示词示例、混合语言场景的提示词示例,以及构建结构化消息(system/user 角色分离)的推荐做法。同时说明若 API 强制使用单一字符串,转义分隔符并标注为数据块可减少混淆,但仍不构成信任边界,工具调用与破坏性操作应在模型之外授权。

Banglish 处理

Banglish 是用拉丁字母书写的孟加拉语,常见于非正式数字交流。资料给出了基于常见 Banglish 模式的启发式检测函数示例。

数据集准备

提供了清理和规范化孟加拉语文本用于 ML 训练的函数示例,包括 NFC 规范化、移除不需要的零宽字符但保留 ZWNJ/ZWJ、规范化空白等。

数据库与存储

MySQL 方面建议使用 utf8mb4 字符集和 utf8mb4_unicode_ci 排序规则。PostgreSQL 方面给出了详细的检查步骤:先确认数据库为 UTF-8,再确认目标排序规则存在且 provider 与 locale 正确(并说明 ICU locale 列在不同版本间有变化,建议通过 to_jsonb() 读取),并提醒仅用名称的 CREATE COLLATION IF NOT EXISTS 不够,可能静默保留绑定到不同 provider 或 locale 的现有排序规则。

使用方式

资料以代码示例形式给出各处理环节的实现方式,涵盖 Python 与 JavaScript 两种语言,涉及 unicodedata、regex、bnlp、PyICU、Intl.Segmenter、Intl.Collator 等库与 API。开发者可按需引用对应片段。

适用场景

面向孟加拉语用户的应用程序、孟加拉语搜索与自动补全、孟加拉语聊天机器人与对话式 AI、孟加拉语 LLM 训练与微调、NCTB 教育内容处理、Banglish 混排文本处理,以及孟加拉语文本的数据库存储与排序。

限制与注意事项

资料列出了常见反模式:不要按码点拆分来计算显示长度(会破坏连字);不要在比较前跳过规范化;不要假设 isdigit() 仅指 ASCII(它接受所有 Unicode 数字,且 int() 会拒绝其中大部分);在有 Unicode 可用时不要使用 ASCII 音译;不要忽略网页抓取文本中的零宽字符。最佳实践包括:在每个边界规范化为 NFC、按字素簇而非码点计数、将 isdigit() 视为“某个 Unicode 数字”并在仅允许 ASCII 与孟加拉数字时使用显式白名单、保留 ZWNJ 与 ZWJ 而仅移除 ZWSP 与 BOM、使用 ICU 孟加拉语排序器并验证其 provider 与 locale、将用户提供的孟加拉语文本保留在独立消息角色中、在匹配前拒绝空或仅含空白的搜索查询、在 MySQL 使用 utf8mb4 并在 PostgreSQL 使用 UTF-8 数据库。

本技能还列出了相关技能:prompt-optimizer、regex-vs-llm-structured-text、database-migrations。