Skip to content

RizenYoung/marss

Repository files navigation

✦ 火星文生成器 · Mars Text Generator

一款新型火星文生成器 —— 多候选随机 + 拆字表达 + 装饰符号 + 可反向还原。 纯前端 / 零后端 / 离线可用 / 双击即开 / 一键部署到 Vercel。

🌐 在线试用https://marss-nine.vercel.app/


🎯 核心特性

特性 说明
🎲 多候选随机映射 每字多个火星文变体(异体 / 形近 / 同音 / 生僻 / 拼音),加权随机抽取,同输入每次结果都不同
🧩 拆字表达 如「你 → 亻尔」、「时 → 日寸」,按概率触发;偏好左右结构(易读),上下/包围结构 0.4 折扣概率
装饰符号系统 130+ 符号,包含 ASCII 框线 / 希腊字母 / 西里尔 / 日语假名 / 复杂前缀;3 种插入位置模式
🔄 反向还原 火星文 → 简体,自动剥离装饰,近似还原(有损,多对一映射)
🚀 零依赖 纯 vanilla JS,无构建步骤,引擎函数可移植到小程序
🎨 现代 UI 简约白底圆角卡片设计,响应式布局,移动端友好

🚀 快速开始

用户(只想用)

方式一:在线版(推荐)

访问部署后的 URL(详见 部署)。

方式二:本地双击

直接双击 index.html 即可在浏览器打开使用,无需任何服务器

方式三:本地服务器

# 进入项目目录
cd 火星文翻译器

# Python 3
python -m http.server 8000
# 访问 http://localhost:8000

# 或 Node.js
npx http-server -p 8000

键盘快捷键

  • Ctrl + Enter — 快速转换

📖 使用说明

基础流程

  1. 在左侧输入简体文本(已预填示例)
  2. 调节顶部参数(风格预设 / 拆字概率 / 装饰密度 / 拼音混排
  3. 点击 "转换" → 右侧输出火星文
  4. 点击 "再随一次" → 用相同输入生成不同结果
  5. 点击 "⇅ 互换" → 输入输出互换,并自动切换"反向模式"
  6. 反向模式(火星文 → 简体):自动剥离装饰,近似还原

预设风格

预设 拆字 装饰 拼音 适用场景
重度火星文 25% 30% 最大化火星文效果
纯净模式 0 0 仅做字库映射,无修饰

自定义参数

  • 拆字概率:0~100%,控制按"结构部件"拆字的频率
  • 装饰密度:0~100%,控制符号插入的概率
  • 拼音混排:✅ 启用会包含 χιǎηɡ、ɡuò、ьù、日语假名等混合形式

🛠 技术栈

  • HTML + CSS + 原生 JS(无任何框架、无外部依赖)
  • 单页面应用:所有样式、脚本、引擎内嵌于 index.html
  • 引擎分离:字库 / 装饰 / 预设外置到 data/dictionary.js
  • DOM 解耦:核心引擎 toMars / fromMars 为纯函数,可在 Node.js 单元测试

文件结构

火星文翻译器/
├─ index.html              # UI + 引擎(已精简,仅 ~10KB)
├─ data/
│  └─ dictionary.js        # 字库 / 装饰 / 预设(外置,便于贡献)
├─ vercel.json             # Vercel 部署配置
├─ .gitignore
├─ README.md               # 本文件
└─ CLAUDE.md               # 给 Claude Code 的项目上下文(开发用)

📐 数据 Schema(给贡献者)

// 字库:原字 → 变体 / 拆字
CHAR_LIB["我"] = {
  v:  ["莪","涐","峨","硪","皒","ωǒ"],   // 通用候选,加权随机
  s:  ["亻","戈"],                       // 左右结构(满概率拆字)
  s2: ["丿","扌","戈"]                   // 上下/包围结构(0.4×折扣概率,可选)
};

// 装饰:风格 → 位置 → 符号列表
DECOR["heavy"] = {
  lead: ["┌","◣","Φ","Д","...︻◣_"],    // 句首前缀
  mid:  ["の","の","τ","ηι","..."],      // 字间垫字
  tail: ["〓","◥","﹏",...]
};

// 预设:风格组合
PRESETS["重度火星文"] = {
  style: "heavy",          // 装饰风格名
  splitRate: 0.25,         // 拆字概率 0~1
  decorDensity: 0.30,      // 装饰密度 0~1
  decorMode: "random",     // 'random'|'sym'|'onlymid'|'classic'
  pinyin: true             // 是否混合拉丁/希腊/西里尔/假名
};

字库扩充指南

  1. 新增字符 —— 在 CHAR_LIB 中按分类(人称 / 助词 / 动词 / 情感 / 自然 …)添加
  2. 变体来源优先级:异体字 > 形近字 > 同音字 > 生僻字 > 拼音形式
  3. 首位变体 应为真实语料中出现频率最高的形式(决定"王者变体"加权)
  4. 拆字部件 须能拆为 2~3 个常见部件;左右结构填 s,上下/包围填 s2
  5. 提交 PR 时附带该字 3~5 条真实语料引用(标源出处)

🚀 部署到 Vercel

方式 A:一键脚本(3 分钟上手)

# 1. 在 https://github.com/settings/tokens  撤销对话中可能泄漏的 token,新建一个(public_repo 权限即可)
# 2. 在项目目录里:
export GH_TOKEN=ghp_你的新token
./deploy.sh

脚本会自动:创建 GitHub 仓库 RizenYoung/marss → 提交代码 → 推送。

脚本会告诉你最后两步手动操作(Vercel 网页端关联 + Deploy)。

方式 B:手动推送 + Vercel 自动部署

1. 推送到 GitHub(手动)

# 你拿到 GitHub token 后,本机:
export GH_TOKEN=ghp_你的token

cd /d "f:\火星文翻译器"
git remote add origin "https://x-access-token:${GH_TOKEN}@github.com/RizenYoung/marss.git"
git push -u origin master

推送前可先到 GitHub 上点 New repository → 名称填 marss → Public → 先别勾任何初始化选项

2. 在 Vercel 部署

  • vercel.com/new → 用 GitHub 登录
  • Import RizenYoung/marss 仓库
  • Framework Preset 选 "Other"(Vercel 会自动识别为静态站点)
  • Deploy —— 1 分钟后拿到 URL

3. (可选)接 GitHub Actions 全自动

  1. 关联项目到 Vercel 后,在 Vercel 项目 Settings 找 Project ID 和 Org ID
  2. https://vercel.com/account/tokens 创建 token(命名 marss-deploy
  3. GitHub 仓库 → Settings → Secrets and variables → Actions
    • 添加 VERCEL_TOKEN / VERCEL_PROJECT_ID / VERCEL_ORG_ID 三个 Repository secrets
  4. 此后 git push 即自动部署

.github/workflows/deploy.yml 已自动随仓库发布,无需额外配置。

部署检查清单

  • index.html 在仓库根目录(Vercel 自动识别)
  • data/dictionary.jsindex.html 同级
  • assets/effects.css/js 也能被访问到(HTML 中是相对路径)
  • vercel.json 中的缓存策略生效(data 24h / assets 7d)
  • 移动端浏览器测试:Chrome Safari Edge 均正常

自定义域名

Vercel 项目 → Settings → Domains → 添加你的域名,按提示配置 DNS 即可。

部署检查清单

  • index.html 可直接打开(无构建步骤)
  • data/dictionary.jsindex.html 同级(相对路径)
  • vercel.json 中的缓存策略生效(字库 24h 缓存)
  • 移动端浏览器测试:Chrome Safari Edge 均正常

🧪 在 Node.js 中验证引擎(无浏览器时)

node -e "
const fs=require('fs'),vm=require('vm');
// 加载字库 + 引擎
const dict=fs.readFileSync('data/dictionary.js','utf8');
const html=fs.readFileSync('index.html','utf8');
const engine=html.match(/<script>([\s\S]*?)<\/script>\s*<\/body>/)[1];
const sb={module:{exports:{}},console};
sb.window={};
vm.createContext(sb);
vm.runInContext(dict+'\n'+engine, sb);
const {toMars,fromMars}=sb.module.exports;

// 测试用例
console.log('=== 重度火星文 ===');
console.log(toMars('我爱你',{style:'heavy',splitRate:0.25,decorDensity:0.30,pinyin:true}));

console.log('\n=== 纯净模式(关拼音)===');
console.log(toMars('我爱你',{style:'pure',splitRate:0,decorDensity:0,pinyin:false}));

console.log('\n=== 反向还原 ===');
const result=toMars('我爱你',{style:'heavy',splitRate:0.1,decorDensity:0.1,pinyin:false});
console.log('火星文:', result);
console.log('还原:  ', fromMars(result));
"

🗺 路线图

  • Step 1(已完成):单文件核心 + 种子字库 + UI + 反向转换
  • Step 1.5(已完成):基于语料库"王者变体"优化 + 拼音混排开关 + 颜文字移除
  • Step 2(已完成):UI 美化(简约现代风) + 字库外置 + 部署文档
  • Step 3(后续):微信小程序,复用 toMars / fromMars 引擎(直接复制 index.html 中的内嵌脚本)
  • Step 4(远期):扩充字库至 3500 字(基于成语词典 / 现代汉语常用字表)

🔒 安全 & 合规说明

工具的本质

本站是字符变形工具,不是 AI 生成工具:

  • 🚫 不连接任何 AI 接口、不调用云服务
  • 🚫 不收集、不存储、不上传用户输入
  • ✅ 所有变换在浏览器本地完成(点击「转换」后立刻返回结果,网络请求 = 0

滥用风险

与 Emoji、Unicode 字体、字符画工具一样是"被动工具"。法律责任层面:

  • 用户输入什么是用户责任
  • 工具做什么只是字符替换,类似输入法

⚠️ 微信 / QQ 内打开提示的说明

微信对所有"未 ICP 备案 + 陌生域名"网页会显示红色提示,非针对本站

要在微信内正常打开(无拦截提示),两条路径:

  1. 做微信小程序 — 复用本仓库 index.html 中的纯函数引擎(toMars / fromMars
  2. ICP 备案 — 需要大陆服务器 + 备案域名 + 7-20 天审核,个人主体仅可非营利

折中方案:把 URL 用文件传输助手发给自己 / 用浏览器打开后分享给好友,都能正常使用。


⚖️ 已知限制

  • 字库覆盖 ~240 字,主要为常用字;冷僻字会原样保留。扩充至 3500 字是数据任务,非架构任务。
  • 反向有损:火星文 → 简体是 first-wins 还原,碰撞时优先高频字。例如 "他的她" 中 "祂" 只能还原为其中一个。
  • 装饰仅在 CJK token 间插入:标点 / 拉丁 / 数字之间不插入。
  • 是火星文核心符号,不属于拼音混排:即使关闭"拼音混排", 仍会出现(替代"的")。

📄 License

MIT License — 自由使用、修改、分发,欢迎 PR。


🙏 致谢

  • 字符变体数据来自网络公开语料(含更多语料.txt参考语录.txt
  • 设计灵感:QQ 火星文、贴吧火星文、B 站抽象话体系
  • UI 风格参考:Notion / 飞书 / Linear

💬 遇到问题

About

火星文生成器

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors