Typed Japanese
使用 TypeScript 进行类型化的日语学习 (Typed Japanese)
typedgrammar/ typed-japanese Public
学习日语语法,用 TypeScript。
License
MIT license 757 stars 6 forks Branches Tags Activity
typedgrammar/typed-japanese
main
文件夹和文件
| Name | Name | Last commit message | Last commit date | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------ | :--------------- | | .github/workflows | .github/workflows | | | | images | images | | | | src | src | | | | .eslintignore | .eslintignore | | | | .gitignore | .gitignore | | | | LICENSE | LICENSE | | | | README.md | README.md | | | | blog.md | blog.md | | | | eslint.config.js | eslint.config.js | | | | package.json | package.json | | | | pnpm-lock.yaml | pnpm-lock.yaml | | | | tsconfig.json | tsconfig.json | | |
最新提交
历史
🌸 Typed Japanese
如果你会写 TypeScript,你就能理解日语!
Typed Japanese 是一个 TypeScript 类型级别的库,它允许通过类型系统表达完整的日语句子。它创建了一个基于日语语法规则的领域特定语言 (DSL),允许使用 TypeScript 的编译器编写和验证语法上正确的自然语言子集。
该项目还探索了一种用于 AI 语言学习的中间格式。例如,LLM 可以使用这种格式返回日语句子的语法分析,而不是 JSON,从而可以通过 TypeScript 的类型检查器进行验证,以提高正确性。
📖 想了解更多? 查看我们的详细博客文章,其中解释了如何从头开始使用 TypeScript 类型系统来学习日语语法。本文从基本的编程概念开始,逐步构建到复杂的日语语法结构,如条件句和疑问短语。
// 定义专有名词 "ヒンメル" (辛美尔)
type ヒンメル = ProperNoun<"ヒンメル">;
// 定义 する 动词
type する = IrregularVerb & { dictionary: "する" };
// 创建 そうした 模式 (过去时的 そうする)
type そうした = DemonstrativeAction<Demonstrative & "そう", する, "た形">;
// 创建条件短语 "ヒンメルならそうした"
type ヒンメルならそうした = ConditionalPhrase<ヒンメル, "なら", そうした>;
// 类型检查示例
const properExample: ヒンメルならそうした = "ヒンメルならそうした"; // "如果是辛美尔的话,他也会这么做的"
// 如果是辛美尔的话,他也会这么做的
🤖 动词系统
动词分类
日语动词分为三个主要类别:
- Godan Verbs (五段动词) - 也称为 “Group 1” 或 “u-verbs”
- 词尾:う, く, ぐ, す, つ, ぬ, ぶ, む, る
- 例子: 話す (hanasu - 说话), 書く (kaku - 写字)
- Ichidan Verbs (一段动词) - 也称为 “Group 2” 或 “ru-verbs”
- 总是以 る 结尾
- 例子: 食べる (taberu - 吃), 見る (miru - 看)
- Irregular Verbs (不规则动词) - 只有两个主要动词
- する (suru - 做)
- 来る (kuru - 来)
动词活用形式
该系统支持以下活用形式:
- 辞書形 (Dictionary form - 辞书形)
- ます形 (Polite form - 敬体形)
- て形 (Te form - て形)
- た形 (Past form - 过去形)
- ない形 (Negative form - 否定形)
- 可能形 (Potential form - 可能形)
- 受身形 (Passive form - 被动形)
- 使役形 (Causative form - 使役形)
- 意向形 (Volitional form - 推量形)
- 命令形 (Imperative form - 命令形)
- 条件形 (Conditional form - 条件形)
- 仮定形 (Hypothetical form - 假定形)
type 買う = GodanVerb & { stem: "買"; ending: "う" };
type 買うて形 = ConjugateVerb<買う, "て形">; // 買って
type 買うた形 = ConjugateVerb<買う, "た形">; // 買った
type 食べる = IchidanVerb & { stem: "食べ"; ending: "る" };
type 食べるて形 = ConjugateVerb<食べる, "て形">; // 食べて
type 食べるた形 = ConjugateVerb<食べる, "た形">; // 食べた
🎨 形容词系统
日语形容词分为两个主要类别:
- I-Adjectives (い形容词) - 以 い 结尾
- 例子: いい (good - 好), 楽しい (fun - 愉快), 高い (expensive - 贵)
- Na-Adjectives (な形容词) - 修饰名词时需要 な
- 例子: 綺麗 (pretty - 美丽), 静か (quiet - 安静), 好き (liked - 喜欢)
形容词活用形式
该系统支持以下形容词活用形式:
- 基本形 (Basic form - 基本形)
- 丁寧形 (Polite form - 敬体形)
- 過去形 (Past form - 过去形)
- 否定形 (Negative form - 否定形)
type いい = IAdjective & { stem: "い"; ending: "い"; irregular: true };
type 綺麗 = NaAdjective & { stem: "綺麗" };
📚 短语和句子构成
该系统现在支持:
- 带有助词的形容词和动词
- 用日语标点符号连接短语
- 基本句子结构
- 带有像 なら 这样的助词的条件表达式
- 带有动作的指示形式
示例:连接简单的形容词和命令动词短语
// I-adjective "ii" (good) with irregular conjugation
// Then add particle "yo" to basic form of "ii" -> "ii yo"
type いい = IAdjective & { stem: "い"; ending: "い"; irregular: true };
type いいよ = PhraseWithParticle<ConjugateAdjective<いい, "基本形">, "よ">;
// Irregular verb "kuru" (to come)
// Then add particle "yo" to imperative form of "kuru" -> "koi yo"
type 来る = IrregularVerb & { dictionary: "来る" };
type 来いよ = PhraseWithParticle<ConjugateVerb<来る, "命令形">, "よ">;
// Connect both phrases -> "ii yo, koi yo"
type いいよ来いよ = ConnectedPhrases<いいよ, 来いよ>;
// Type checking examples
const correctPhrase1: いいよ = "いいよ"; // "It's good!" (114)
const correctPhrase2: 来いよ = "来いよ"; // "Come here!" (514)
const correctFullPhrase: いいよ来いよ = "いいよ、来いよ"; // "It's good, come here!"
示例:更灵活的基于组件的句子构建
type SentenceParts = [
AdverbPart<"なんで">, // "Why" - question adverb
IntensifierPart<"そんなに">, // "So much" - intensifier
VerbPart<慣れる, "て形">, // "Get used to" in te-form
ContractedPart<"ん">, // Contraction of "の" - colloquial nominalizer
ParticlePart<"だ">, // Copula "is"
ParticlePart<"よ"> // Emphatic sentence-ending particle
];
// Combines all parts into a single string
type JoinedSentence = JoinPhrasePartsValue<SentenceParts>;
const joinedSentence: JoinedSentence = "なんでそんなに慣れてんだよ"; // "Why are you so used to it?!"
// 你为什么这么熟练啊?
⚙️ 技术实现
该系统使用 TypeScript 的模板字面量类型、条件类型和映射类型来创建日语语法规则的纯类型级别表示。
关键组成部分:
- 语法元素的类型定义
- 通过条件类型进行规则映射
- 用于形式生成的字符串字面量操作
- 用于语法验证的类型推断
💡 为什么选择 Typed Japanese?
- 教育工具 - 通过代码学习日语语法
- AI 辅助学习 - 为语言分析提供结构化格式
- 语法验证 - 在代码中表达和验证日语语法
- 集成潜力 - 类型化日语工具的基础
⚠️ 局限性
- 这只是一个类型级别的系统 - 它不提供运行时功能
- 该系统处理标准形式,但不考虑语言细微之处
- 一些罕见或古老的语言模式可能无法准确表示
该项目仍处于非常早期的阶段,并且严重依赖 LLM 生成的语法规则,这些规则有时可能包含幻觉或不准确之处。如果在实际使用过程中发现任何问题,请通过确认并提供反馈来提供帮助。
🛠️ 开发
如果您有兴趣贡献或试验 Typed Japanese:
测试验证类型系统是否正常运行,以及是否正确实施了所有语法规则。
欢迎大家做出贡献!请随意打开 issue 提出 bug 或功能请求,或提交 pull request 进行改进。
📬 联系方式
对于赞助机会、研究合作或商业咨询,请通过 contact@typedgrammar.com 联系。
⚖️ 许可证
Copyright (c) 2025-present, Yifeng Wang
关于
使用 TypeScript 学习日语语法
话题
nlp typescript dsl japanese grammar language-learning computational-linguistics type-system type-level-programming language-verification typescript-types japanese-grammar
资源
许可证
Stars
757 stars
Watchers
1 watching
Forks
6 forks
语言
- TypeScript 92.3%
- JavaScript 7.7%
