当前位置: 首页 > article >正文

探索智能仓颉!Cangjie Magic:码字之间,意境自生

仓颉输入法,对于许多老牌中文使用者来说,不仅仅是一种输入工具,更是一种情怀,一种文化符号。它以拆字为核心,将汉字结构还原成最原始的构件,再通过特定的编码规则进行输入。然而,随着拼音输入法的普及,以及新生代对拆字规则的陌生,仓颉输入法一度面临着被边缘化的危机。但是,科技的进步带来了新的机遇,智能时代的到来让仓颉输入法焕发了新的生命力。"Cangjie Magic",这个并非官方定义,而是为了方便表达的概念,旨在探索如何将人工智能技术与仓颉输入法结合,创造出更加智能、更加便捷、更富乐趣的输入体验。

本文将从以下几个方面深入探讨"Cangjie Magic":

一、仓颉输入法的历史与困境:回顾经典,直面挑战

仓颉输入法由朱邦复先生发明,于1978年正式发布。它的设计理念是“知字识码,见字打码”,强调对汉字结构的理解。用户需要熟悉特定的字根及其对应的编码,才能流畅地使用仓颉输入法进行输入。这种方式学习曲线陡峭,需要投入大量的时间和精力进行记忆和练习。

曾经,仓颉输入法凭借其高效、准确的特点,深受专业人士和对中文有较高要求的用户的喜爱。然而,随着智能拼音输入法的兴起,仓颉输入法的劣势也逐渐显现:

  • 学习成本高昂: 字根繁多,拆字规则复杂,对初学者来说难以入门。
  • 容错率低: 即使只错一个码,也无法打出目标字。
  • 效率瓶颈: 熟练掌握者虽然输入速度很快,但与拼音输入法的智能联想功能相比,效率提升空间有限。
  • 兼容性问题: 不同操作系统和平台对仓颉输入法的支持程度不一,可能出现乱码或无法使用的情况。

这些问题导致仓颉输入法的使用者越来越少,尤其是在年轻一代中,几乎无人问津。

二、人工智能赋能:Cangjie Magic的可能性

人工智能技术的飞速发展为仓颉输入法带来了新的希望。通过将人工智能技术融入仓颉输入法的核心机制,我们可以创造出以下可能性:

  • 智能拆字引擎: 利用深度学习技术,构建一个能够自动分析汉字结构的智能拆字引擎。用户只需输入汉字的部分笔画或部首,引擎就能自动推断出其完整的仓颉码。
  • 模糊输入: 允许用户在输入仓颉码时出现一定的错误,例如输入了相似的字根或笔画顺序颠倒。智能算法能够根据上下文和用户习惯,自动纠正错误并给出候选字。
  • 联想输入: 基于大量的语料库和语言模型,实现智能联想输入功能。当用户输入几个仓颉码后,输入法能够预测用户接下来想要输入的词语或句子,并给出相应的候选结果。
  • 个性化学习: 智能输入法能够记录用户的输入习惯和常犯错误,并根据这些数据进行个性化学习。例如,针对用户经常输错的字根或拆字规则,进行针对性的提示和纠正。
  • 语音输入辅助: 将语音输入与仓颉输入结合起来,用户可以通过语音输入汉字,然后由智能系统自动转换为仓颉码,方便用户学习和记忆。

三、技术实现:Cangjie Magic的代码构想

以下是一个基于Python的简单示例,展示如何利用机器学习技术构建一个简易的仓颉输入法。这仅是一个简单验证,并不具备完整的智能拆字和联想功能,但可以作为一个起点,激发更多的思考和实践。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score# 1. 数据准备:假设我们有一个包含汉字和对应仓颉码的数据集
#   数据格式:{"汉字": "仓颉码"}
#   例如:{"我": "竹手戈", "你": "人弓火"}
#   这里我们用一个小的示例数据集代替
data = {"我": "竹手戈","你": "人弓火","他": "人山也","她": "女山也","好": "女弓木","的": "竹日戈","是": "日人卜女","爱": "月月弓水","家": "十尸人","国": "田戈一土",
}df = pd.DataFrame(list(data.items()), columns=['汉字', '仓颉码'])# 2. 特征工程:将仓颉码转换为数值特征
#   由于这是一个简单的示例,我们将每个仓颉码的字母转换为对应的ASCII码
def encode_cangjie(code):return [ord(c) for c in code]df['编码'] = df['仓颉码'].apply(encode_cangjie)# 确保所有编码长度一致,这里直接截断或填充
max_len = df['编码'].apply(len).max()
df['编码'] = df['编码'].apply(lambda x: x + [0] * (max_len - len(x)) if len(x) < max_len else x[:max_len])# 将编码列展开成单独的特征列
X = pd.DataFrame(df['编码'].tolist(), columns=['码_{}'.format(i) for i in range(max_len)])
y = df['汉字']# 3. 模型训练:使用朴素贝叶斯模型进行训练
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)model = GaussianNB()
model.fit(X_train, y_train)# 4. 模型评估
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy}")  # 输出模型准确率# 5. 预测函数:根据输入的仓颉码预测汉字
def predict_hanzi(code, model, max_len):# 将输入的仓颉码转换为数值特征encoded_code = encode_cangjie(code)encoded_code = encoded_code + [0] * (max_len - len(encoded_code)) if len(encoded_code) < max_len else encoded_code[:max_len]input_data = pd.DataFrame([encoded_code], columns=['码_{}'.format(i) for i in range(max_len)])# 使用模型进行预测prediction = model.predict(input_data)return prediction[0]# 示例:输入仓颉码 "竹手戈",预测汉字
input_cangjie_code = "竹手戈"
predicted_hanzi = predict_hanzi(input_cangjie_code, model, max_len)
print(f"输入的仓颉码: {input_cangjie_code}, 预测的汉字: {predicted_hanzi}")# 附加功能:提供近似编码提示
def suggest_alternatives(code, max_len, data):encoded_code = encode_cangjie(code)encoded_code = encoded_code + [0] * (max_len - len(encoded_code)) if len(encoded_code) < max_len else encoded_code[:max_len]alternatives = []for hanzi, cangjie_code in data.items():encoded_cangjie = encode_cangjie(cangjie_code)encoded_cangjie = encoded_cangjie + [0] * (max_len - len(encoded_cangjie)) if len(encoded_cangjie) < max_len else encoded_cangjie[:max_len]# 计算编码的相似度(这里简单使用相同位置编码相同的数量作为相似度)similarity = sum([1 for i in range(max_len) if encoded_code[i] == encoded_cangjie[i]])# 如果相似度较高,则认为是可能的替代选项if similarity > 1:  # 可以调整阈值alternatives.append((hanzi, cangjie_code, similarity))# 按相似度排序alternatives = sorted(alternatives, key=lambda x: x[2], reverse=True)return alternatives# 示例:输入一个不完整的仓颉码,获取可能的提示
partial_cangjie_code = "竹手"
suggestions = suggest_alternatives(partial_cangjie_code, max_len, data)print(f"\n对于不完整的仓颉码: {partial_cangjie_code}, 可能的提示是:")
for hanzi, cangjie_code, similarity in suggestions:print(f"汉字: {hanzi}, 仓颉码: {cangjie_code}, 相似度: {similarity}")

代码解释:

  1. 数据准备: 为了训练模型,我们需要一个包含汉字和对应仓颉码的数据集。在实际应用中,这个数据集应该尽可能的大,以提高模型的准确率。
  2. 特征工程: 机器学习模型只能处理数值数据,因此我们需要将仓颉码转换成数值特征。这里我们简单地将每个仓颉码的字母转换为对应的ASCII码。
  3. 模型训练: 我们使用朴素贝叶斯模型进行训练。朴素贝叶斯模型是一种简单而有效的分类算法,适用于处理文本数据。
  4. 模型评估: 我们使用准确率来评估模型的性能。
  5. 预测函数: 预测函数根据输入的仓颉码预测汉字。
  6. 附加功能: 提供近似编码提示,帮助用户纠正错误的输入。

局限性:

  • 数据集小: 示例代码使用的数据集非常小,模型的准确率很低。
  • 特征工程简单: 特征工程方法过于简单,没有充分利用仓颉码的结构信息。
  • 模型选择简单: 朴素贝叶斯模型可能不是最优的选择。可以尝试使用更复杂的模型,例如深度神经网络。
  • 缺乏模糊输入: 没有实现模糊输入功能,用户必须输入完整的且正确的仓颉码才能得到预测结果。

改进方向:

  • 扩充数据集: 收集更大的汉字和仓颉码数据集。
  • 改进特征工程: 设计更有效的特征工程方法,例如将仓颉码的字根进行 One-Hot 编码,或者使用 Word Embedding 技术。
  • 选择更合适的模型: 尝试使用深度神经网络或其他更复杂的模型。
  • 实现模糊输入: 引入模糊匹配算法,允许用户输入错误的仓颉码。
  • 加入语言模型: 结合语言模型,实现智能联想输入功能。

四、Cangjie Magic的功能畅想:超越传统,展望未来

除了上述技术实现的可能性之外,我们可以进一步畅想"Cangjie Magic"的未来功能,使其更加智能、便捷和有趣:

  • AI 辅助学习: 开发一个仓颉输入法学习App,提供丰富的学习资源和互动练习。App可以根据用户的学习进度和水平,进行个性化的指导和评估。
  • 游戏化学习: 将仓颉输入法学习融入到游戏中,例如通过拆字解谜、编码闯关等方式,提高学习的趣味性和吸引力。
  • 自定义字根: 允许用户自定义字根,将一些常用的偏旁部首定义为特殊的字根,方便输入。
  • 手写输入支持: 结合手写识别技术,用户可以通过手写输入汉字,然后由智能系统自动转换为仓颉码。
  • 多平台同步: 实现跨平台同步功能,用户可以在不同的设备上使用相同的仓颉输入法设置和学习记录。
  • 云端词库: 将词库存储在云端,用户可以随时更新词库,获取最新的词汇和表达方式。
  • 主题定制: 提供丰富的主题定制选项,用户可以根据自己的喜好,自定义输入法的界面风格。

五、人文价值:传承与创新,文化自信的体现

"Cangjie Magic"不仅仅是一个技术项目,更是一种对传统文化的传承和创新。它试图将古老的仓颉输入法与现代人工智能技术相结合,让更多的人了解和使用仓颉输入法,从而传承和弘扬中华文化。

在当今全球化的时代,保护和传承民族文化显得尤为重要。通过"Cangjie Magic",我们可以让更多的人感受到汉字的魅力和仓颉输入法的价值,从而增强民族文化自信心。

六、面临的挑战与解决方案

尽管"Cangjie Magic"拥有广阔的前景,但在实现过程中也面临着一些挑战:

  • 数据收集困难: 构建一个高质量的汉字和仓颉码数据集需要耗费大量的人力和时间。
    • 解决方案: 可以与专业的语言学机构合作,共同构建数据集。同时,可以利用众包的方式,鼓励用户参与数据收集和标注工作。
  • 算法复杂度高: 实现智能拆字、模糊输入和联想输入等功能需要复杂的算法和模型。
    • 解决方案: 加大对人工智能技术的投入,引入最新的研究成果。可以与高校和科研机构合作,共同开发新的算法和模型。
  • 用户体验优化: 如何设计一个用户友好的界面和交互方式,让用户能够轻松上手并喜欢使用仓颉输入法,是一个重要的挑战。
    • 解决方案: 进行大量的用户调研和测试,了解用户的使用习惯和需求。不断改进产品的设计和功能,提升用户体验。
  • 推广难度大: 在拼音输入法已经占据主导地位的情况下,如何推广"Cangjie Magic",吸引更多的用户,是一个重要的课题.
    • 解决方案: 通过各种渠道进行宣传和推广,例如社交媒体、论坛、博客等。可以举办一些线上或线下的活动,吸引用户的参与。

七、结语:码字之间,意境自生

"Cangjie Magic"并非仅仅是为了让仓颉输入法“复兴”,更重要的是展现一种对传统文化的尊重和创新,一种对技术可能性的探索。它不仅仅是一个智能输入法,更是一个承载着文化记忆和未来想象的载体。

正如仓颉造字,记录天地万物,传递思想和情感一样, "Cangjie Magic" 也希望能够通过智能化的方式,让用户在码字之间,感受到汉字的魅力,体会到中华文化的博大精深,最终达到"意境自生"的境界。

愿"Cangjie Magic"能够点燃更多人对仓颉输入法的热情,让这一古老的输入法在智能时代焕发出新的光彩,继续传承和弘扬中华文化。希望未来的某一天,我们能够看到一个真正智能的、便捷的、有趣的仓颉输入法,它不仅仅是输入工具,更是连接我们与传统文化的一座桥梁。

未来的路还很长,让我们携手探索,共同创造Cangjie Magic的无限可能!

相关文章:

探索智能仓颉!Cangjie Magic:码字之间,意境自生

仓颉输入法&#xff0c;对于许多老牌中文使用者来说&#xff0c;不仅仅是一种输入工具&#xff0c;更是一种情怀&#xff0c;一种文化符号。它以拆字为核心&#xff0c;将汉字结构还原成最原始的构件&#xff0c;再通过特定的编码规则进行输入。然而&#xff0c;随着拼音输入法…...

py默认框架和代码

py默认框架 平常工作日常需要频繁写python脚本&#xff0c;留下一个常用的模板 # template.py import logging import json import time import functools import os from typing import Any, Dict, Optional, Union from pathlib import Path from logging.handlers import …...

通过 Samba 服务实现 Ubuntu 和 Windows 之间互传文件

在 Ubuntu 上进行配置 1. 安装 Samba 服务 打开终端&#xff0c;输入以下命令来安装 Samba&#xff1a; sudo apt update sudo apt install samba2. 创建共享目录 可以使用以下命令创建一个新的共享目录&#xff0c;例如创建名为 shared_folder 的目录&#xff1a; sudo m…...

k8s-1.28.10 安装metrics-server

1.简介 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标&#xff0c;通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 2.下载yaml文件 wget https:/…...

基于外部中中断机制,实现以下功能: 1.按键1,按下和释放后,点亮LED 2.按键2,按下和释放后,熄灭LED 3.按键3,按下和释放后,使得LED闪烁

题目&#xff1a; 参照外部中断的原理和代码示例,再结合之前已经实现的按键切换LED状态的实验&#xff0c;用外部中断改进其实现。 请自行参考文档《中断》当中&#xff0c;有关按键切换LED状态的内容, 自行连接电路图&#xff0c;基于外部中断机制&#xff0c;实现以下功能&am…...

【我的创作纪念日】 --- 与CSDN走过的第365天

个人主页&#xff1a;夜晚中的人海 不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。-《荀子》 文章目录 &#x1f389;一、机缘&#x1f680;二、收获&#x1f3a1;三、 日常⭐四、成就&#x1f3e0;五、憧憬 &#x1f389;一、机缘 光阴似箭&am…...

学习笔记——《Java面向对象程序设计》-继承

参考教材&#xff1a; Java面向对象程序设计&#xff08;第3版&#xff09;微课视频版 清华大学出版社 1、定义子类 class 子类名 extends 父类名{...... }如&#xff1a; class Student extends People{...... } &#xff08;1&#xff09;如果一个类的声明中没有extends关…...

鸿蒙生态新利器:华为ArkUI-X混合开发框架深度解析

鸿蒙生态新利器&#xff1a;华为ArkUI-X混合开发框架深度解析 作者&#xff1a;王老汉 | 鸿蒙生态开发者 | 2025年4月 &#x1f4e2; 前言&#xff1a;开发者们的新机遇 各位鸿蒙开发者朋友们&#xff0c;是否还在为多平台开发重复造轮子而苦恼&#xff1f;今天给大家介绍一位…...

如何收集用户白屏/长时间无响应/接口超时问题

想象一下这样的场景:一位用户在午休时间打开某电商应用,准备购买一件心仪已久的商品。然而,页面加载了数秒后依然是一片空白,或者点击“加入购物车”按钮后没有任何反馈,甚至在结算时接口超时导致订单失败。用户的耐心被迅速消耗殆尽,关闭应用,转而选择了竞争对手的产品…...

‌信号调制与解调技术基础解析

调制解调技术是通信系统中实现基带信号与高频载波信号相互转换的主要技术&#xff0c;通过调整信号特性使其适应不同信道环境&#xff0c;保障信息传输的效率和可靠性。 调制与解调的基本概念 调制&#xff08;Modulation&#xff09;‌ 将低频基带信号&#xff08;如语音或数…...

[PTA]2025 CCCC-GPLT天梯赛 胖达的山头

来源&#xff1a;L2-055 胖达的山头-Pintia题意&#xff1a;给定 n n n 个事件的起始和终止时刻(以hh:mm:ss给出)&#xff0c;求最多并行事件数。关键词&#xff1a;差分(签到,模板题)题解&#xff1a;将所有时刻转换为秒&#xff0c;当某事件开始1&#xff0c;结束则-1。按时…...

‌基于Spring Cloud 2023.0.x + Micrometer Tracing的分布式链路追踪详细解析

前言 在微服务架构中,复杂的调用链路常让问题排查如大海捞针。Spring Cloud 2023.0.x整合Micrometer Tracing,深度支持OpenTelemetry标准,为开发者提供了轻量、高效的分布式链路追踪能力。本文将深入解析从‌TraceID透传‌到‌可视化分析‌的全流程实现,结合最新技术栈代码…...

【扫描件批量改名】批量识别扫描件PDF指定区域内容,用识别的内容修改PDF文件名,基于C++和腾讯OCR的实现方案,超详细

批量识别扫描件PDF指定区域内容并重命名文件方案 应用场景 本方案适用于以下场景: 企业档案数字化管理:批量处理扫描的合同、发票等文件,按内容自动分类命名财务票据处理:自动识别票据上的关键信息(如发票号码、日期)用于归档医疗记录管理:从扫描的检查报告中提取患者I…...

LOH 怎么进行深度标准化?

The panel of normals is applied by replacing the germline read depth of the sample with the median read depth of samples with the same genotype in our panel. 1.解释: panel of normal 正常组织&#xff0c;用于识别技术噪音 germline read depth: 胚系测序深度。根…...

【Python Web开发】01-Socket网络编程01

文章目录 1.套接字(Socket)1.1 概念1.2 类型1.3 使用步骤 Python 的网络编程主要用于让不同的计算机或者程序之间进行数据交换和通信&#xff0c;就好像人与人之间打电话、发消息一样。 下面从几个关键方面通俗易懂地介绍一下&#xff1a; 1.套接字(Socket) 在 Python 网络编…...

序列决策问题(Sequential Decision-Making Problem)

序列决策问题&#xff08;Sequential Decision-Making Problem&#xff09;是强化学习&#xff08;Reinforcement Learning, RL&#xff09;的核心研究内容&#xff0c;其核心思想是&#xff1a;​​智能体&#xff08;Agent&#xff09;需要在连续的时间步骤中&#xff0c;通过…...

L2-1、打造稳定可控的 AI 输出 —— Prompt 模板与格式控制

一、为什么需要 Prompt 模板&#xff1f; 在与 AI 模型交互时&#xff0c;我们经常会遇到输出不稳定、格式混乱的问题。Prompt 模板帮助我们解决这些问题&#xff0c;通过结构化的输入指令来获得可预测且一致的输出结果。 模板的作用主要体现在&#xff1a; 固定输出格式&am…...

ClickHouse进行LEFT JOIN 关联查询时, 关联键的数据类型不一致,导致报错 的解决方案详解

一.场景 使用golang语言操作ClickHouse数据库进行LEFT JOIN关联查询查询计算: 关联键在不同数据表中的数据类型不一致, 这样SQL语句就会报错, 二.问题 通过上面场景描述, 下面贴出具体的sql语句相关: 表user_phone_bind: 字段UserId(用户id): 类型Int64字段Phone(手机号): 类型…...

LLM中什么是模板定义、提示工程和文档处理链

LLM中什么是模板定义、提示工程和文档处理链 定义提示模板(prompt_template):prompt_template = """Use the following pieces of context to answer the question at the end. If you dont know the answer, just say that you dont know, dont try to make…...

密码学(二)流密码

2.1流密码的基本概念 流密码的基本思想是利用密钥 k 产生一个密钥流...&#xff0c;并使用如下规则对明文串 ... 加密&#xff1a;。密钥流由密钥流发生器产生&#xff1a; &#xff0c;这里是加密器中的记忆元件&#xff08;存储器&#xff09;在时刻 i 的状态&#xff0c…...

深度学习与总结JVM专辑(七):垃圾回收器—CMS(图文+代码)

CMS垃圾收集器深度解析教程 1. 前言&#xff1a;为什么需要CMS&#xff1f;2. CMS 工作原理&#xff1a;一场与时间的赛跑2.1. 初始标记&#xff08;Initial Mark&#xff09;2.2. 并发标记&#xff08;Concurrent Mark&#xff09;2.3. 重新标记&#xff08;Remark&#xff09…...

力扣第446场周赛

有事没赶上, 赛后模拟了一下, 分享一下我的解题思路和做题感受 1.执行指令后的得分 题目链接如下&#xff1a;力扣 给你两个数组&#xff1a;instructions 和 values&#xff0c;数组的长度均为 n。 你需要根据以下规则模拟一个过程&#xff1a; 从下标 i 0 的第一个指令开…...

OpenCV中的透视变换方法详解

文章目录 引言1. 什么是透视变换2. 透视变换的数学原理3. OpenCV中的透视变换代码实现3.1 首先定义四个函数 3.1.1 cv_show() 函数 3.1.2 def resize() 函数 3.1.3 order_points() 函数 3.1.4 four_point_transform() 函数 3.2 读取图片并做预处理3.3 轮廓检测3.4 获取最大…...

并发设计模式实战系列(3):工作队列

&#x1f31f; ​大家好&#xff0c;我是摘星&#xff01;​ &#x1f31f; 今天为大家带来的是并发设计模式实战系列&#xff0c;第三章工作队列&#xff08;Work Queue&#xff09;​​&#xff0c;废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 生产者-消费者架构 …...

如何理解抽象且不易理解的华为云 API?

API的概念在华为云的使用中非常抽象&#xff0c;且不容易理解&#xff0c;用通俗的语言 形象的比喻来讲清楚——什么是华为云 API&#xff0c;怎么用&#xff0c;背后原理&#xff0c;以及主要元素有哪些&#xff0c;尽量让新手也能明白。 &#x1f9e0; 一句话先理解&#xf…...

10分钟二叉树的非递归排序完成

import java.util.Stack;public class test_04_23 {//二叉树的三种遍历static class TreeNode{int data;TreeNode left;TreeNode right;public TreeNode(int data){this.data data;}}//先序遍历public static void test1(TreeNode root){Stack<TreeNode> stack new Sta…...

[特殊字符]fsutil命令用法详解

&#x1f527;fsutil命令用法详解 以下是 fsutil 命令的常见用法及功能详解&#xff1a; 1. 基础语法 fsutil [子命令] [参数]2. 核心功能与用法 &#xff08;1&#xff09;管理硬链接 fsutil hardlink create <新硬链接路径> <原文件路径>作用&#xff1a;为文…...

GPIO(通用输入输出端口)详细介绍

一、基本概念 GPIO&#xff08;General - Purpose Input/Output&#xff09;即通用输入输出端口&#xff0c;是微控制器&#xff08;如 STM32 系列&#xff09;中非常重要的一个外设。它是一种软件可编程的引脚&#xff0c;用户能够通过编程来控制这些引脚的输入或输出状态。在…...

深度学习-全连接神经网络(过拟合,欠拟合。批量标准化)

七、过拟合与欠拟合 在训练深层神经网络时&#xff0c;由于模型参数较多&#xff0c;在数据量不足时很容易过拟合。而正则化技术主要就是用于防止过拟合&#xff0c;提升模型的泛化能力(对新数据表现良好)和鲁棒性&#xff08;对异常数据表现良好&#xff09;。 1. 概念认知 …...

Java面向对象的三大特性

## 1. 封装&#xff08;Encapsulation&#xff09; 封装是将数据和操作数据的方法绑定在一起&#xff0c;对外部隐藏对象的具体实现细节。通过访问修饰符来实现封装。 示例代码&#xff1a; java public class Student { // 私有属性 private String name; private int age; …...