尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
k-skill 项目 korean-character-count 技能深度解析:基于 Intl.Segmenter 的确定性韩文计数合同与 NEIS 兼容字节计算
k-skill 项目 korean-character-count 技能深度解析基于 Intl.Segmenter 的确定性韩文计数合同与 NEIS 兼容字节计算【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skillkorean-character-count 是 k-skill 技能集한국인을 위한 스킬 모음집中面向写作场景category: writing的核心技能用于对自我陈述书자기소개서、申请书、自由叙述型表单等对字数极为敏感的韩文文本进行确定性计数彻底告别 LLM 目测估算带来的结果漂移。读完本文你将掌握其default与neis两套计数合同的精确语义、CLI 的完整参数体系与三种输入方式以及基于Intl.Segmenter的 grapheme 分割、UTF-8 字节计算与行数计算的底层实现原理并能够直接复制命令用于实战验证。技能定位为什么数韩文需要专门技能在 korean-character-count/SKILL.md 的技能描述中本技能的目标被精确定义为Count Korean text deterministically with exact grapheme, line, and byte contracts for self-intros and form limits.以精确的 grapheme、行和字节合同对自我陈述与表单字数限制场景下的韩文文本进行确定性计数。这一定位背后有三个现实痛点字数限制对 1 个字符的差异都极其敏感自我陈述书、志愿书表单往往有严格的字数上限如 1000 字以内多 1 字或少 1 字都可能导致提交失败。LLM 目测估算不可复现同一个文本让模型数一数不同轮次可能得到不同结果而表单校验是按确定规则执行的模型估算结果无法与其对齐。合同contract必须显式化本技能不对输入做任何随意的 trim 或规范化只按照文档化、固定的合同来计数——即怎么定义字符、怎么定义行、怎么定义字节在合同中写死保证任何人在任何环境下得到一致结果。从技能元数据看skill.json该技能使用 MIT 协议、面向ko-KR区域、属于writing类别、运行配置为local即无需网络、无需 API Key 的本地确定性计算是 k-skill 中典型的零依赖外部服务型技能。两套计数合同default 与 neis技能的核心是两套可以切换的计数合同它们对characters字符数和lines行数的语义完全相同唯一差异在于bytes字节数的计算规则。default 合同grapheme UTF-8 实际长度default合同定义如下见 korean-character-count/instruction.md 的 Contracts 章节characters字符数基于Intl.Segmenter(ko, { granularity: grapheme })的Unicode extended grapheme cluster计数。这是用户感知的字符数——把组合型韩文字符如한由初声、中声、终声三个码点组成、emoji可能由多个码点组成各视为 1 个字符。bytes字节数Buffer.byteLength(text, utf8)即文本在 UTF-8 编码下的实际字节长度不靠人工估算字符种类。lines行数空字符串 0非空 换行序列数 1其中CRLF\r\n按1 次换行计而不是 2 次neis 合同仅字节规则变化的兼容层neis是面向 NEIS한국 교육행정정보시스템韩国教育行政信息系统/ 学校生活记录簿학교생활기록부等提交场景的兼容 profile。其characters 与 lines 与 default 完全一致只改变 bytes 规则韩文 grapheme含韩文 组合标记3BASCII grapheme 1BEnter / 换行序列 2B其他字符 按 UTF-8 字节长度 fallback也就是说neis是一个仅替换字节计算的 compatibility layer这从源码的 scripts/korean_character_count.js 中可以得到印证countNeisBytes只作用于字节路径而 characters/lines 始终走segmentGraphemes与countLines同一套实现。三种字符单位与输出中的完整指标值得一提的细节是虽然合同中的characters以 grapheme 为准但 JSON 输出createReport同时给出了四种粒度的指标方便与不同系统的计数口径对齐输出字段含义计算方式characters合同字符数grapheme cluster 数量characters_without_whitespace去空白字符数过滤纯空白 grapheme 后的数量code_pointsUnicode 码点数Array.from(text).lengthutf16_code_unitsUTF-16 编码单元数text.lengthJavaScript 字符串默认口径这一设计非常实用当提交系统使用码点数或UTF-16 单元数作为限制口径时可以从同一份输出中直接取对应字段无需二次猜测。环境要求与零外部依赖使用本技能的前提条件非常轻量见 instruction.md 的 Prerequisites 章节Node.js 18因为Intl.Segmenter需要 Node 18 及以上版本。源码中的ensureSegmenter()会做显式运行时检查scripts/korean_character_count.js在不支持的环境下抛出明确错误Intl.Segmenter is required. Use Node.js 18 or newer.helper 脚本scripts/korean_character_count.js随nomadamas/k-skillCLI 捆绑分发仓库根目录下另有 scripts/korean_character_count.js 薄封装入口直接require技能目录内的实现并转发参数。不需要任何 API Key纯本地计算无网络请求。完整工作流与 CLI 参数体系标准工作流按 instruction.md 的 Workflow 章节Agent 使用本技能的流程为直接接收文本或从文件 / STDIN 读取。通过npx -y nomadamas/k-skill0 exec korean-character-count scripts/korean_character_count.js -- ...执行确定性计数。选择所需 profiledefault/neis与输出格式json/text。原样返回 helper 结果并注明是按哪个合同计算的。参数解析细节源码级parseArgs实现了严格的参数校验scripts/korean_character_count.js输入源三选一且只能有一个--text text、--file path、--stdin。源码中setInputMode会在已设置输入模式时抛出Provide exactly one input source with --text, --file, or --stdin.。输入源自动推断当没有任何输入参数且 stdin 非 TTY即管道输入时自动回退为--stdin若 stdin 是 TTY 却未提供输入则报错。--profile仅接受default/neis否则抛出Unknown profile: ${value}。--format仅接受json/text默认jsontext格式输出profile:、characters:、lines:、bytes:等易读行formatTextReport。--help/-h打印完整用法说明。任何未知选项都会以Unknown option: ${arg}报错并以退出码 1 结束。官方 CLI 示例可直接复制运行以下命令全部来自 korean-character-count/SKILL.md 与 instruction.md 的 CLI examples 章节可直接在 Node 18 环境执行# 1. 直接传文本默认 JSON 输出 npx -y nomadamas/k-skill0 exec korean-character-count scripts/korean_character_count.js -- --text 가나다 # 2. CRLF 换行 emoji 混合文本注意 \r\n 只算 1 次换行 npx -y nomadamas/k-skill0 exec korean-character-count scripts/korean_character_count.js -- --text $첫 줄\r\n둘째 줄 # 3. neis 兼容字节 text 易读格式 npx -y nomadamas/k-skill0 exec korean-character-count scripts/korean_character_count.js -- --text $첫 줄\n둘째 줄 --profile neis --format text # 4. 文件输入 npx -y nomadamas/k-skill0 exec korean-character-count scripts/korean_character_count.js -- --file ./essay.txt --profile default # 5. stdin 管道输入 cat essay.txt | npx -y nomadamas/k-skill0 exec korean-character-count scripts/korean_character_count.js -- --stdin --profile neis # 6. 查看帮助 npx -y nomadamas/k-skill0 exec korean-character-count scripts/korean_character_count.js -- --helpJSON 输出示例对--text 가나다的完整 JSON 输出见 docs/features/korean-character-count.md为{ profile: default, contract: { characters: Unicode extended grapheme clusters via Intl.Segmenter, bytes: Actual UTF-8 encoded byte length, lines: Empty string 0 lines; otherwise count CRLF, LF, CR, U2028, U2029 as one line break each and add 1 }, counts: { characters: 3, characters_without_whitespace: 3, code_points: 3, utf16_code_units: 3, lines: 1, bytes: 9, bytes_utf8: 9, bytes_neis: 9 } }注意输出中的contract对象会显式声明本次计数所用的合同文本这是技能把合同写进结果的设计使用者无需翻文档即可确认口径。底层实现原理源码级拆解行数计算5 种换行序列统一计 1 次核心正则定义于源码顶部scripts/korean_character_count.jsconst LINE_BREAK_PATTERN /\r\n|[\n\r\u2028\u2029]/gu;countLines先对空串返回0否则用matchAll统计换行序列数量再加1。由于\r\n作为整体匹配CRLF天然只算 1 次换行U2028行分隔符与U2029段分隔符也被纳入覆盖 Unicode 中所有常见行边界。NEIS 字节计算分块 逐 grapheme 判定countNeisBytes的实现策略是先把文本按换行序列切块对每个换行固定记2B再对块内文本按 grapheme 逐字判定scripts/korean_character_count.jsif (ASCII_ONLY_PATTERN.test(grapheme)) return 1; // 纯 ASCII 1B if (HANGUL_OR_MARK_PATTERN.test(grapheme) HAS_HANGUL_PATTERN.test(grapheme)) return 3; // 含韩文标记 3B return countUtf8Bytes(grapheme); // 其余 UTF-8 fallback关键点是HANGUL_OR_MARK_PATTERN^[\p{ScriptHangul}\p{Mark}]$与HAS_HANGUL_PATTERN\p{ScriptHangul}两个条件同时满足才记 3 字节一个 grapheme 只有全部由韩文脚本/组合标记构成且至少包含一个韩文字符时才按 NEIS 的 3 字节规则处理其余如 emoji、中文、其他 Unicode 字符一律回退到真实 UTF-8 字节数。这样既保证纯韩文文本符合 NEIS 口径又不会对混合文本产生错误的字节估计。测试用例对合同的验证仓库的 scripts/test_korean_character_count.js 用node:test对每一条合同做了精确断言可以直接对照理解语义default 合同对한\r\n둘째 줄断言characters7组合型韩文与 emoji 各算 1、characters_without_whitespace5、lines2、bytes等于Buffer.byteLength。行边界countLines(가\r\n나\r다\u2028라\u2029마) 5验证CRLF、CR、U2028、U2029各自只计 1 次换行。NEIS 字节countNeisBytes(가A 1\n나) 15가3B A1B 空格 1B 11B 换行 2B 나3B fallback 4B 15、countNeisBytes(한글) 6、countNeisBytes(ABC) 3。fallback 路径组合重音符号\u0301的 UTF-8 长度与 NEIS 结果一致均为 2Bemoji同样回退为 UTF-8 的 4 字节。参数校验--text与--file同时给出、--text重复出现都会触发exactly one input source错误非法 profile 触发unknown profile错误。CLI 端到端分别以--text、--file、--stdin三种方式启动子进程验证输出并验证重复--text时进程以非 0 状态退出。响应策略与完成标准Agent 使用约束instruction.md 对 Agent 的行为做了明确约束Response policy响应策略不估算直接原样采用 helper 结果。同时告知使用哪个 profile 计算的。需要默认值时用defaultprofile。仅当提交方如 NEIS / 学校生活记录簿明确要求独立合同时才使用neis。Done when完成标准字符数、行数、字节数三者一起返回。default与neis的合同差异在文档中显式说明。npx ... exec korean-character-count ... -- --help可正常工作。存在针对韩/英/空白/换行/emoji 混合输入的测试即 scripts/test_korean_character_count.js 所覆盖的场景。实战参考数据与边界提醒docs/features/korean-character-count.md 记录了 2026-04-08 的本地 smoke run 验证结果可作为理解口径的锚点--text 가\r\n나返回characters3、lines2、bytes8가3B \r\n2B 나3B。--text $첫 줄\n둘째 줄 --profile neis --format text返回bytes23。通过 stdin 管道的 JSON 输出路径工作正常。最后需要强调两个使用边界其一neis只是本仓库实现并文档化的compatibility profile其 3B/1B/2B 规则以技能内文档为准具体提交系统是否采用该口径仍需以官方要求为准其二本文所有命令都基于nomadamas/k-skill0CLI 的exec通道执行技能目录内的 scripts/korean_character_count.js若在仓库根目录直接运行该脚本node scripts/korean_character_count.js --text 가나다也能得到相同结果适合无 npx 环境的本地验证。【免费下载链接】k-skill한국인을 위한 스킬 모음집 - 에이전트를 한국인으로项目地址: https://gitcode.com/GitHub_Trending/ks/k-skill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

CAN-LIN网关刷写升级:协议转换与实时调度设计

CAN-LIN网关刷写升级:协议转换与实时调度设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/17 7:25:58
Airbnb数据集全解析:获取、清洗、价格预测与自建数据实践

Airbnb数据集全解析:获取、清洗、价格预测与自建数据实践

Airbnb数据集是我做了这么多年数据分析后,依然觉得最值得反复拿出来讲的公开数据之一。如果你搜过“Airbnb 数据集”,八成会先碰到Kaggle上的New York、Seattle、Boston这几个经典版本,但很多人下载完就懵了,因为里面是一堆带“$”…

📅 2026/9/17 7:25:58
FS40-Y4HR落地扇维修全攻略:电容、电机、主板故障排查

FS40-Y4HR落地扇维修全攻略:电容、电机、主板故障排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/17 7:25:58
MORE NEWS

更多资讯

📰

Spring Boot配置文件全指南:从YAML语法到多环境实战

1. 场景化理解:为什么要花力气死磕 application.yml用了这么久的 Spring Boot,如果说哪个文件让我又爱又恨,application.yml 绝对排得上号。爱它,是因为一个配置写对了,整个项目的环境切换、参数管理立刻顺滑到起飞&am…

📰

鸿蒙Flex布局详解:响应式界面开发实战

1. 鸿蒙Flex布局基础概念在鸿蒙应用开发中,Flex布局是构建响应式界面的核心工具之一。这种布局方式借鉴了CSS3的Flexbox模型,通过灵活的容器和项目属性设置,能够轻松实现各种复杂布局效果。Flex布局的核心在于"容器-项目"的层级关系…

📰

比Elasticsearch快5倍?Meilisearch轻量级全文搜索方案实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

6Valley 14.2多商户跨境电商PHP源码部署与二次开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

基于.NET的Microsoft Agent Framework开发多技能AI代理

1. 项目背景与核心价值去年微软Build开发者大会上公布的Microsoft Agent Framework,正在悄然改变我们构建AI代理的方式。作为一个长期深耕.NET生态的开发者,我第一时间就对这个框架进行了深度探索。不同于传统的单任务AI模型,Agent Framework…

📰

React Native在OpenHarmony中的列表性能优化实践

1. 项目背景与核心挑战在React Native与OpenHarmony的跨平台开发实践中,列表滚动性能一直是影响用户体验的关键指标。removeClippedSubviews作为React Native中优化长列表渲染性能的重要属性,其原理是通过移除屏幕外子组件来减少内存占用和渲染负担。但在…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬