dedash 是一个专注于文本清理的技能,用于从用户指定的范围内移除破折号(em-dash)以及那些实际承担破折号功能的替代符号。它的核心目标是:对于每一个不应保留的破折号,根据其所在从句的实际需要,替换为合适的标点或措辞。
用途
dedash 用于处理文本中充当破折号角色的各种符号。无论具体字符是什么,只要它在页面上读起来像破折号,就属于处理对象。用户拥有范围的决定权,范围可以是一段文字、一个字段、一个文件、一个选区或一棵目录树。未经询问,不得擅自扩大范围。
主要能力
该技能能够识别并处理多种破折号变体,包括常见的 em-dash(U+2014)、水平线(U+2015)以及双倍和三倍 em-dash(U+2E3A、U+2E3B)。对于 en-dash(U+2013),它作为边界情况处理:当它连接从句且 em-dash 也适用时,会被计入;但当它用于表示范围端点时(如 1990–2020、London–Paris 路线),则保留不动。执行非破折号功能的符号(如连字符、减号、范围符号)会保持原样。对于真正模糊的情况,会作为判断项提出,而不是盲目修改。
使用方式
工作流程分为五个步骤:
-
FIND:从用户处获取确切范围,定位其中每一个承担破折号功能的符号。判断依据是它在句子中扮演的角色,而非其码点。任何用于引出插入语、同位语、突然转折或缺失连词的符号都会被识别。
-
REPLACE per role:根据语法角色逐处选择替换方案。
- 插入语:当破折号内容可以从句子中移除时,使用逗号或括号。
- 同位语:当破折号内容用于重命名、定义或扩展前面的名词时,使用冒号或逗号。
- 突然转折:当破折号表示转折、中断或重新开始时,使用句号、分号或逗号。
- 虚假连词断裂:当破折号代替缺失的 "and"、"but"、"because"、"so" 或其他真实连接词时,重写句子。
-
LEAVE-ALONE:除非用户明确要求包含且上下文证明其有误,否则保持以下内容不变:连字符复合词、减号和负数;范围如 1-10、1–10 或 London–Paris;代码、差异、命令输出、标识符、序列化数据、URL、路径、锚点和查询字符串;引用或明显有意使用的破折号。这些情况会作为判断项提出,而非盲目修改。
-
RE-READ:就地阅读每个修改后的句子,修复替换后可能出现的节奏不畅、标点悬空、双空格和连接词丢失等问题。如果句子需要的是措辞而非标点,则重写最小的从句来解决问题。
-
REPORT:说明检查的范围、发现和修改的破折号数量、按角色使用的替换方式,以及任何保留或作为判断项提出的内容。
适用场景
dedash 适用于需要清理文本中破折号使用的场景,例如编辑文章、整理文档、统一写作风格等。它特别适合那些希望逐处判断而非批量替换的用户,能够保留作者的原始声音和风格。
限制
该技能不进行批量替换,同一个符号在不同从句中可能需要不同的标点。不得用连字符替换 em-dash 作为清理手段。修改时需保证编辑安全:使用 unicode 安全编辑(PYTHONUTF8=1),逐处替换每个破折号,绝不批量清扫。如果范围内没有此类破折号,应报告 MISS,而不是修改附近的标点。该技能只在用户指定的范围内移除符号,不会在范围之外压平风格。
验证
完成前需确认:范围完全属于用户指定;每个替换都是根据语法角色逐处选择的;保留情况未被改动或已作为判断项报告;报告包含计数和任何判断项。