diff --git a/java-cli.zip b/java-cli.zip new file mode 100644 index 0000000..094c973 Binary files /dev/null and b/java-cli.zip differ diff --git a/project/java-cli/.gitignore b/project/java-cli/.gitignore new file mode 100644 index 0000000..0ebcf1a --- /dev/null +++ b/project/java-cli/.gitignore @@ -0,0 +1,4 @@ +*.jar +*.jar +*.class +*.log \ No newline at end of file diff --git a/project/java-cli/articles.txt b/project/java-cli/articles.txt new file mode 100644 index 0000000..98c7b3f --- /dev/null +++ b/project/java-cli/articles.txt @@ -0,0 +1,252 @@ +28 2026-05 我校汤素娥教授在中宣部召开的党的创新理论传播工程推进会上发言 5月26日,中宣部在北京召开党的创新理论传播工程推进会。我校汤素娥教授作为全国高校思政课教师代表,应邀出席会议,并以《努力讲好思政课,推动党的创新理论进学生头脑》为题发言。中央有关部门、各地区党委宣传部、重点理论工作平台负责同志和专家学者、媒体工作者、基层宣讲骨干代表等参会。会议强调,实施党的创新理论传播工程是党中央作出的重大决策部署,是推动党的创新理论大众化普及、精准化传播的战略安排,要把学习宣... https://news.hnu.edu.cninfo/1003/39613.htm +27 2026-05 “大文学观视域下的地方性写作”学术研讨会在我校举行 5月24日,由湖南大学和湖南省作家协会共同举办的“大文学观视域下的地方性写作”学术研讨会在校举行。校党委副书记唐珍名,湖南省作协党组书记、主持日常工作的副主席郭天保,湖南省作协党组成员、副主席蒋蒲英、谢宗玉等出席。《人民文学》、《收获》、《当代》、《十月》等名刊主编及20余位文学界专家学者齐聚岳麓山下,以谢宗玉的散文集《千年弦歌》、刘年的诗集《一生事,一捧雪》、卓今的文学理论评论专著《劳者歌其事——... https://news.hnu.edu.cninfo/1003/39615.htm +27 2026-05 学习弘扬袁隆平科技创新精神暨杂交水稻高质量发展座谈会召开 5月23日,学习弘扬袁隆平科技创新精神暨杂交水稻高质量发展座谈会在长沙召开。省委书记沈晓明出席并讲话,强调要深入学习贯彻习近平总书记关于向袁隆平同志学习的重要指示精神,学习弘扬袁隆平同志务实的科技创新精神,为实现高水平科技自立自强贡献力量。农业农村部党组成员、中国农业科学院院长黄三文出席并讲话。座谈会上,来自省内外的院士、高校和科研院所、企业、青年和学生代表发言,深切缅怀袁隆平同志的卓越贡献,感悟... https://news.hnu.edu.cninfo/1003/39611.htm +26 2026-05 2026年校庆教职工羽毛球团体赛举行 5月22日至24日,“羽竞风华·同心奋进”2026年校庆教职工羽毛球团体赛在南校区体育馆举行。全校32支工会代表队的500余名教职工齐聚一堂,以球会友、共庆华诞。赛场上,选手们精神饱满、配合默契,发球、扣杀、吊球、防守等精彩回合点燃现场,彰显出教职工团结协作、奋勇争先的良好风采。场下队友加油鼓劲、观众热情助威,体育馆内洋溢着紧张热烈、团结友爱的氛围。经过多轮角逐,体育学院代表队获第一名;资产经营公司、计算机学... https://news.hnu.edu.cninfo/1003/39606.htm +25 2026-05 “寻迹百年 定向未来” 湖南大学第十届定向运动大赛举行 5月24日,“2026年世界定向周·湖南大学第十届定向运动大赛”在南校区田径场举行。1604名师生、校友及其子女齐聚一堂,用奔跑的脚步丈量校园,以昂扬的姿态为母校献上祝福。2026年10月,湖南大学将迎来岳麓书院创建1050周年暨湖南大学定名100周年华诞,本次大赛正是校庆年系列活动的重要组成部分。本次比赛紧扣“寻迹百年 定向未来”主题,共设置6条特色线路:校友组“归雁寻根·步履百年线”、教工组“师道致远·麓山同行线”、研... https://news.hnu.edu.cninfo/1003/39601.htm +22 2026-05 学校举行“弦歌湖大,银龄芳华”老年大学文艺汇演 5月20日,由湖南大学党委离退休工作部主办、湖南大学老年大学承办的“弦歌湖大,银龄芳华”文艺汇演在教职工活动中心二楼多功能厅举行。校党委副书记唐珍名出席并致辞。退休校领导张强、王文沐、龚明金、王红悦等参加活动。二级单位离退休工作分管领导和干事、老年大学负责人及班长、协会负责人、参演演员等共同观看演出。文艺汇演上,老教工们精神矍铄、风采依旧,用舞蹈、太极、京剧、时装模特走秀、合唱等形式,在舞台上重温... https://news.hnu.edu.cninfo/1003/39587.htm +21 2026-05 校庆系列学术报告会丨汪寿阳:谈AI时代管理科学理论体系构建的几点思考 5月20日下午,发展中国家科学院院士、国际系统与控制科学院院士、中国科学院杰出研究员汪寿阳做客经世致用讲坛,在工商管理学院前进楼报告厅作“谈AI时代管理科学理论体系构建的几点思考”主题报告。本场报告会为“校庆系列学术报告”之一。汪寿阳围绕AI与中国管理实践的历史交汇、AI给传统管理理论带来的挑战、AI时代中国管理学理论框架构建、AI时代管理学研究方法革新等方面进行了系统阐述。他认为,中国管理实践已走在全球前... https://news.hnu.edu.cninfo/1004/39585.htm +21 2026-05 求是讲堂丨刘雁飞:从48V到0.6V/2000A:面向AI大算力芯片供电的范式革命与创新方向 5月18日下午,美国国家发明家科学院(NAI)院士、加拿大工程院(CAE)院士、加拿大女王大学(Queen's University)教授刘雁飞做客求是讲堂,以“从48V到0.6V/2000A:面向AI大算力芯片供电的范式革命与创新方向”为题作报告。副校长李肯立为刘雁飞颁发客座教授聘书。刘雁飞从对PhD身份的深度探讨巧妙切入,首先讲解了创新举措的模块,分享了提升科研创新思维的方法,鼓励同学们在日常生活中多读前沿文献、主动思考,发掘自身独到的见解... https://news.hnu.edu.cninfo/1004/39583.htm +20 2026-05 校庆系列学术报告会丨张益:展望电磁暂态仿真技术和现代电力系统数字孪生 5月15日上午,加拿大工程院院士、现任RTDS技术公司副总裁张益做客经世致用讲坛,在超算中心报告厅作“展望电磁暂态仿真技术和现代电力系统数字孪生”主题报告。本场报告会为“校庆系列学术报告”之一。张益系统梳理了电力系统实时仿真技术的演进脉络与核心算法,阐释了其在构建现代电力系统数字孪生体系中的基础性作用。他回顾了电磁暂态仿真的技术发展历程,分析了在高比例新能源、电力电子设备大规模接入背景下,宽频振荡、混... https://news.hnu.edu.cninfo/1004/39578.htm +19 2026-05 校庆系列学术报告会丨陈志宁:Antenna Technology Towards Metantennas and AntennAl 5月18日上午,新加坡工程院院士、新加坡国立大学教务长讲席教授陈志宁做客经世致用讲坛,在电气与信息工程学院作“Antenna Technology Towards Metantennas and AntennAl”主题报告。本场报告会为“校庆系列学术报告”之一。报告中,陈志宁教授系统梳理了天线技术从基础物理探索迈向人工智能赋能天线创新的演进脉络与实践路径。他强调,技术创新必须回归物理本源,突破传统材料与设计范式的束缚,打破“以真空为基准”的固有认... https://news.hnu.edu.cninfo/1004/39614.htm +13 2026-05 校庆系列学术报告会丨刘建亚:哥德巴赫猜想 4月27日上午,中国科学院院士、山东大学讲席教授刘建亚做客经世致用讲坛,在超算中心报告厅作“哥德巴赫猜想”主题报告。本场报告会为“校庆系列学术报告”之一。刘建亚系统剖析了数论领域中素数分布的核心规律,全面梳理了哥德巴赫猜想的百年研究历程。他回顾了中国数学学派在筛法领域的卓越成就,重点讲述了华罗庚、潘承洞、王元、陈景润等前辈学者的开拓性贡献,生动诠释了中国数学家在世界数论研究中的重要地位。同时,他还... https://news.hnu.edu.cninfo/1004/39549.htm +12 2026-05 岳麓讲坛丨刘闯:从幻觉问题看自然与人工智能之间的区别 5月7日晚,复旦大学特聘教授刘闯做客岳麓讲坛,在综合楼108报告厅作“从幻觉问题看自然与人工智能之间的区别”主题讲座。刘闯以大语言模型“AI 幻觉”为切入点,指出这并非单纯的技术漏洞,而是模型依托统计规律生成信息的固有特征。他表示,人工智能模型以统计最优为目标输出内容,缺乏对真实世界的因果认知,与人类的认知偏差存在本质差异。在梳理认知科学演进脉络时,刘闯重点阐释了贝叶斯大脑与预测加工模型。他指出,动物... https://news.hnu.edu.cninfo/1004/39541.htm +12 2026-05 王纲金教授获批教育部哲学社会科学研究重大课题攻关项目 近日,2025年度教育部哲学社会科学研究重大课题攻关项目立项结果正式公布,我校王纲金教授申报的课题“数字资产与数字货币的风险机理研究”(项目批准号:25JZD017)获批立项。“数字资产与数字货币的风险机理研究”课题聚焦数字金融发展前沿,面向金融强国建设和防范化解金融风险的重大战略需求,围绕数字资产与数字货币发展中的风险生成、传导扩散与治理机制等关键问题开展系统研究。课题立足中国数字金融发展实践,系统解析... https://news.hnu.edu.cninfo/1005/39539.htm +08 2026-05 教科院朱恬恬教授与博士生楚秋玉研究成果在高等教育学国际权威期刊发表 近日,教科院朱恬恬教授与博士生楚秋玉在高等教育研究领域取得进展。研究成果以“The double world-class policy and urban innovation capability in China: a spatial difference-in-differences approach”为题发表在国际高等教育权威期刊《Studies in Higher Education》。支撑经济高质量发展,是“世界一流大学和一流学科建设”政策(以下简称“双一流”政策)的重要目标。然而,现有评估多集中考察“双一流”政策对高校本... https://news.hnu.edu.cninfo/1005/39521.htm +07 2026-05 环工院黄彬彬教授团队在常温下清洁能源驱动乙炔高效转化产乙烯研究上取得进展 乙烯是世界第一大化学品,也是石油化工行业的核心原料。工业主要通过石脑油裂解生产乙烯,过程会生成微量乙炔杂质,易造成聚合催化剂中毒,严重影响下游产品品质,因此乙烯中乙炔脱除是石化与聚合物工业关键工序。目前工业主流为热催化加氢除炔,存在高温高压工况,还易发生过度加氢与低聚反应。煤制烯烃对我国极具战略意义,然而传统煤制烯烃技术存在短板,如工作条件苛刻、生产路线长且复杂、乙烯选择性低且含碳产物分布宽,... https://news.hnu.edu.cninfo/1005/39519.htm +24 2026-04 国家社科基金重大项目“马克思主义中国化时代化的文明根基、历史进程和基本经验研究”开题 4月19日,湖南大学马克思主义学院吴增礼教授主持的国家社会科学基金重大项目“马克思主义中国化时代化的文明根基、历史进程和基本经验研究”项目开题报告会举行。该项目以“马克思主义中国化时代化的文明根基、历史进程与基本经验”这一总问题为聚焦点,从学理基础、文明根基、历史进程、基本经验和实践指向五个方面展开。从“开辟马克思主义中国化时代化新境界”这个重大命题和战略任务出发,以中国共产党理论探索和创新为主线... https://news.hnu.edu.cninfo/1005/39432.htm +13 2026-04 物电院郭清华教授团队在“空间反演克拉默简并”研究方向取得进展 从简单的晶格到复杂的曲面,几何学原理为理解物理现象提供了重要基础。在光子学中,传统的光子晶体通常依赖于单一的空间域(如介电调制或金属共振的空间分布)来实现电磁波传播的拓扑操控,但额外空间域所能提供的自由度往往被忽视。另一方面,在无自旋的经典系统中,由于缺乏克拉默简并(Kramers degeneracy),时间反演拓扑绝缘体一直难以实现。因此,能否借助特定的空间几何构型造出类似克拉默的简并,成为科学界长期探索的... https://news.hnu.edu.cninfo/1005/39386.htm +08 2026-04 我校43项成果获湖南省第十六届社会科学优秀成果奖 近日,湖南省委、省政府公布了第十六届社会科学优秀成果奖和专家获奖名单。我校共43项成果获奖,其中一等奖11项、二等奖15项,优秀社会科学专家1项,优秀青年社会科学专家2项。湖南省社会科学优秀成果奖旨在表彰对哲学社会科学相关领域学术研究和学科建设有一定价值,对构建中国特色哲学社会科学学科体系、学术体系、话语体系有促进作用,对促进湖南经济社会发展有较大贡献的研究成果。来源:社科处通讯员:曹诗婷责任编辑:文亦 https://news.hnu.edu.cninfo/1005/39248.htm +18 2026-05 AI算力电源湖南大学·高斯宝联合研发中心揭牌 5月15日,湖南大学与深圳市高斯宝电气技术有限公司圆满举行高斯宝电气长沙研发中心暨AI算力电源湖南大学·高斯宝联合研发中心启动仪式举行。深圳市高斯宝电气技术有限公司董事长阮世良、湖南大学副校长蒋健晖为联合研发中心揭牌;湘江新区管委会副主任王先民、高斯宝电气董事长阮世良为高斯宝电气长沙研发中心揭牌。联合研发中心将重点围绕AI算力电源、电力电子技术等方向,开展联合攻关、技术转化与高层次人才培养。作为联合研... https://news.hnu.edu.cn/info/1003/39562.htm +18 2026-05 国家教育行政学院考察团来校调研 5月11日,国家教育行政学院第29期浙江省高校中青班、第6期广东省高校中青班、第13期山东省高校中青班来校考察调研。校党委常委、副校长张晓兵出席调研座谈会并致辞,校党委常委、党委组织部部长李久学主持会议。张晓兵对考察团一行表示热烈欢迎。他从学科建设、队伍建设、人才培养、服务国家战略等方面介绍了湖南大学发展建设的基本情况。他表示,希望以此次调研为契机,进一步深化合作、协同发展,推动学校高质量发展开创新局... https://news.hnu.edu.cninfo/1006/39560.htm +06 2026-05 湖南大学加纳研究中心揭牌成立 4月30日,湖南大学加纳研究中心正式揭牌成立。夸梅・恩克鲁玛泛非中心创始人兼主席萨米娅·亚巴·恩克鲁玛(Samia Yaba Nkrumah),湖南大学党委常委、校长助理、非洲研究院院长许和连为中心揭牌。许和连表示,加纳是撒哈拉以南非洲最早同中国建交的国家之一,在非洲发展及中非关系史上地位重要。学校长期深耕对非研究,拥有中非经贸合作研究院等国家级平台,成立加纳研究中心是完善对非研究布局、深化中加友好合作的具体实践。他... https://news.hnu.edu.cn/info/1003/39508.htm +29 2026-04 华为“难题揭榜”宣讲会在校举办 4月27日,华为公司“难题揭榜”宣讲会在前进教学楼报告厅举行。副校长李肯立与华为武汉研究所所长余海波、2012网站总编辑张桂贤一行进行会晤交流。宣讲会上,张桂贤详细介绍了“难题揭榜”的背景意义、发布机制、评审规则与参与路径,鼓励湖大师生积极参与“揭榜”攻关,以世界级难题牵引科研选题,以产业需求驱动前沿探索,推动产学研用深度融合协同创新。计算机学院谢鲲教授作为“火花奖”获奖代表,结合参与华为科研合作和难... https://news.hnu.edu.cn/info/1003/39469.htm +24 2026-04 湖南大学与小米集团合作框架协议签约举行 4月22日上午,湖南大学与小米集团合作框架协议签约暨智能终端人因工程联合研发中心揭牌仪式在校办公楼举行。签约仪式前,校长段献忠与小米集团副总裁、集团技术委员会主席屈恒一行进行会晤交流。小米集团产业标准研究部总经理、技术委员会秘书长周珏嘉,汽车部整车工程部副总经理兼北京整车工程部负责人廖平纬,校党委常委、副校长李肯立等出席相关活动。会上,屈恒与李肯立共同为“智能终端人因工程联合研发中心”揭牌,小米集... https://news.hnu.edu.cn/info/1003/39434.htm +28 2025-11 功率半导体与集成电路研发中心揭牌仪式举行 11月27日,湖南大学长沙半导体技术与应用创新研究院与广电计量检测集团股份有限公司签约暨揭牌仪式举行,双方共同组建“功率半导体与集成电路研发中心”。副校长李肯立,广电计量党委副书记、总经理明志茂为研发中心揭牌并见证签约。长沙半导体技术与应用创新研究院院长廖蕾、广电计量副总经理陆裕东代表双方签署合作协议。该研发中心将聚焦技术协同创新与资源共建共享,着力提升半导体领域的技术融合水平、质量管控能力和产业... https://news.hnu.edu.cninfo/1006/38945.htm +27 2026-05 电气院:首届“电启未来”科技文化节开幕式暨表彰大会召开 5月23日,电气与信息工程学院首届“电启未来”科技文化节开幕式暨表彰大会在天马小剧场举行。首届“电启未来”科技文化节聚焦产教融合、实践育人主题,活动期间,将陆续开展首届“电耀麓山,创享未来”选拔赛、“学途·职引”综合素养提升活动、电创先锋科创训练营等系列活动,涵盖创新选拔、职业发展、导学互动、科创实训、志愿服务、文艺展示等多个类别,引导青年学子在科技创新和专业实践中成长成才。会上对获得各级奖学金的... https://news.hnu.edu.cninfo/1007/39610.htm +27 2026-05 经贸院:学生获全国高校首届数字经济实践成果大赛总决赛一等奖 5月23日,全国高校首届数字经济实践成果大赛总决赛在北京举行。经济与贸易学院数字经济专业学子获全国一等奖1项、全国二等奖1项、优秀奖1项。滕霏、王如海、吴嘉俊、张鑫琪团队《安全与效率的平衡之道》项目(指导老师:李巍、吴进)获全国一等奖,许多、顾若鸿、秦文杰、邢艺薰、王静团队《数据要素驱动企业价值增值——基于可解释机器学习的建模与应用》项目(指导老师:刘征驰)获全国二等奖,贺琪淼、李佳彤、陈念、谢歆悦... https://news.hnu.edu.cninfo/1007/39609.htm +25 2026-05 科技园:被认定为湖南省标准型科技型企业孵化器 5月22日,湖南省科学技术厅公布了2026年科技型企业孵化器认定名单,湖南大学国家大学科技园被认定为标准型科技型企业孵化器。目前园区已建成超过10万平方米的科技研发、孵化及生产场地,搭建了“一站式”创业公共服务平台,涵盖创业辅导、管理咨询、项目申报等多项专业服务,满足入驻企业在不同发展阶段的多元化需求。截至2025年12月,园区累计孵化企业超1039家,成功培育3家上市公司及142家高新技术企业。未来,园区将继续发挥... https://news.hnu.edu.cninfo/1007/39591.htm +21 2026-05 科技成果转化中心:高校区域技术转移转化中心(福建)来校调研 5月20日,高校区域技术转移转化中心(福建)光电显示分中心、海洋氢能分中心一行来校调研,副校长李肯立出席座谈会。会上,双方重点就两个分中心的支持政策、我校科技成果转化、产学研融合、校地合作的具体合作模式进行了交流,并就共建概念验证中心、小试及中试平台等重点合作内容进行磋商,进一步明晰后续合作方向与落地路径。我校材料科学与工程学院、半导体学院、电气与信息工程学院、化学化工学院的4个科研团队参加座谈并... https://news.hnu.edu.cninfo/1007/39584.htm +18 2026-05 外语院:“AI时代对外话语译介与传播高端论坛”举行 5月16至17日,由中外语言文化比较学会话语译介与传播研究专业委员会主办、湖南大学外国语学院承办的“AI时代对外话语译介与传播高端论坛”在我校举行。北京外国语大学讲席教授、湖南大学兼职教授王克非,中外语言文化比较学会话语译介与传播研究专业委员会会长、北京外国语大学张威,湖南大学外国语学院院长莫再树分别致辞。复旦大学、中山大学、湖南大学等专家学者,围绕AI时代国家话语与国际传播能力建设、技术驱动下的对外传... https://news.hnu.edu.cninfo/1007/39603.htm +15 2026-05 新传院:2026“看中国・湖南行”启动仪式在我校举行 5月13日上午,2026“看中国·外国青年影像计划·湖南行”启动仪式在我校举行。湖南大学新闻与传播学院党委书记张坤,北京师范大学中国文化国际传播研究院副院长罗军,意大利马切拉塔大学教授、外方指导教师Francesco Cardinali,中外青年制片人、志愿者等参加活动。本次活动以“城韵·时尚·活力”为主题,来自5个国家的11位影视专业师与新闻与传播学院中方志愿者结对,深入长沙,用镜头展现湖湘文化底蕴与发展活力,向世界讲述湖南... https://news.hnu.edu.cninfo/1007/39561.htm +18 2026-05 77级校友周绪红院士获“桥梁大奖” 近日,2025年度“茅以升科学技术奖”评选结果公布,我院77级校友周绪红院士获“桥梁大奖”。周绪红,中国工程院院士、英国结构工程师学会Fellow、英国皇家特许结构工程师、中国钢结构行业领军人物、山区土木工程安全与韧性全国重点实验室主任。长期从事钢结构和钢-混凝土混合结构体系的教学与科研工作,开创性地发展了冷弯薄壁型钢结构体系、交错桁架结构体系,提出了钢管约束混凝土结构体系,发明了单向预应力双向配筋混凝土叠... https://news.hnu.edu.cninfo/1019/39563.htm +20 2026-04 学院校友和发展联络工作会议召开 4月17日,学校学院校友和发展联络工作会议在电能高效高质转化全国重点实验室108报告厅召开,会议就如何充分发挥学院力量、做好校友工作和发展联络工作进行部署研讨。党委宣传部、校友工作办公室、发展联络处、校庆工作办公室等职能部门及各学院校友和发展联络工作负责人及专干老师参加会议。会上,介绍了4-5月学校拟开展的校友和发展联络工作,并对各学院下一步工作提出建议和注意事项。化学化工学院、工商管理学院、经济与贸易... https://news.hnu.edu.cninfo/1019/39411.htm +15 2026-01 校友企业红星冷链在港交所上市 1月13日上午,由湖南大学EMBA2005级校友罗跃担当法定代表人、董事长的红星冷链(湖南)股份有限公司(简称“红星冷链”),正式登陆香港交易所主板。红星冷链是湖南长沙本土企业红星实业集团核心子公司,主营冷冻食品交易平台与冷冻仓储服务,是国家AAAA级仓储型物流企业、五星级冷链物流企业、冷链物流百强,日均吞吐量超4000吨,为湖南冻品仓储服务与交易市场运营龙头企业。红星实业集团党委书记、董事长罗跃毕业于湖南大学EM... https://news.hnu.edu.cninfo/1019/39122.htm +18 2025-12 湖南大学校友企业昂瑞微上市 12月16日,由我校1995级应用物理学专业校友钱永学创立并担任董事长的北京昂瑞微电子技术股份有限公司(股票简称“昂瑞微”,股票代码“688790”),成功登陆上海证券交易所科创板,为国产射频芯片产业发展注入新动能。钱永学表示:“公司将以合规为基石、以透明为准则、以创新为动力、以责任为担当,严格遵守资本市场规则。我们将借助资本市场的力量,持续加大研发投入,拓展产业布局,不断提升核心竞争力,以稳健的经营和持续... https://news.hnu.edu.cninfo/1019/39039.htm +12 2025-12 江西日报丨湖南大学江西校友会暖心救助重病校友 近日,湖南大学江西校友会发起的一场暖心救助行动,如同冬日里一束温暖的光,照亮了重病校友阿美(化名)的艰难求医路,彰显了校友间深厚的情谊和社会温情。阿美24岁,今年刚从湖南大学毕业。她父亲早亡,母亲因患精神疾病长期住院接受治疗。11月14日,在南昌工作的阿美突发狼疮性肾炎,被紧急送至南昌大学第一附属医院救治,后因病情危急转至华中科技大学同济医院治疗。在华中科技大学同济医院的病房里,阿美的身体状况极为虚... https://news.hnu.edu.cninfo/1019/39012.htm +03 2025-12 2025年度“校友回湘”工作成果榜单发布,四项全入选! 12月2日下午,2025年“校友回湘”大会在长沙召开。千余名湖湘校友齐聚湘水之畔,深入贯彻习近平总书记关于湖南工作的重要讲话和指示批示精神,共襄校友回湘盛举、携手绘就兴湘宏图。省委副书记、省长毛伟明致辞。会议发布了2025年度“校友回湘”工作成果榜单,我校入选“校友回湘”招商引资成果榜、招才引智成果榜、科研转化成果榜、捐赠成果榜等四个榜单,并居前列。本次大会还设立了“突出贡献人物”和“招引大使”两项荣誉,... https://news.hnu.edu.cninfo/1019/38964.htm +30 2026/05 新湖南 | 全力冲刺!湖南大学科创港即将交付 https://m.voc.com.cn/portal/news/show?id=32779750 +29 2026/05 人民网 | 从“匾、碑、训”的视角读懂实事求是的思想力量 http://theory.people.com.cn/n1/2026/0518/c40531-40721641.html +28 2026/05 湖南日报 | “大文学观视域下的地方性写作”学术研讨会举行 https://epaper.voc.com.cn/hnrb/html/2026-05/26/content_1787479.htm +27 2026/05 湖南日报 | 湖大科创港校区崭新亮相 https://epaper.voc.com.cn/hnrb/html/2026-05/26/content_1787460.htm +26 2026/05 新湖南 | 湖湘文化涵育实事求是思想路线的时代启示 https://m.voc.com.cn/xhn/news/202605/32748750.html +26 2026/05 湖南日报 | “金种子”破土! 从湘江新区看湖南创新创业生态 https://epaper.voc.com.cn/hnrb/html/2026-05/25/content_1787390.htm +25 2026/05 科学网 | 体育跨界生物读博,她用4年时间“拆盲盒”找到抗癌新策略 https://mp.weixin.qq.com/s/jc25Id2HqibbHFFfr_Bj7g +25 2026/05 光明日报 | 经世致用与实事求是 https://epaper.gmw.cn/gmrb/html/content/202605/24/content_14743.html +24 2026/05 三湘都市报 | 湖南大学MBA羽毛球团体赛收官,政企校三方同场交流 https://sxdsb.voc.com.cn/content/32693620 +23 2026/05 新湖南 | 千年书院对话国际社区——洋湖国际社区携手岳麓书院开启文化共建新篇章 https://m.voc.com.cn/xhn/news/202605/32697255.html +22 2026/05 人民政协报 | 为了守护好一江碧水——民建中央对口湖南省开展长江生态环境保护民主监督工作综述 https://share.rmzxw.net.cn/article/6600611/5.html?t=1778209379&sign=17fb62f171a61eaa875c6c8c5fde7120 +21 2026/05 新湖南 | 守网络安全之界 护数据安全之魂——以安全基石筑牢“十五五”高质量发展屏障 https://m.voc.com.cn/xhn/news/202605/32700300.html +20 2026/05 新湖南 | 湖大学子实力夺金!他说:“换了三次地方,从没离开过新区” https://m.voc.com.cn/xhn/news/202605/32691640.html +29 2026/05 学校举行校庆工作座谈会 https://news.hnu.edu.cninfo/1003/39617.htm +28 2026/05 我校汤素娥教授在中宣部召开的党的创新理论传播工程推进会上发言 https://news.hnu.edu.cninfo/1003/39613.htm +27 2026/05 “大文学观视域下的地方性写作”学术研讨会在我校举行 https://news.hnu.edu.cninfo/1003/39615.htm +27 2026/05 学习弘扬袁隆平科技创新精神暨杂交水稻高质量发展座谈会召开 https://news.hnu.edu.cninfo/1003/39611.htm +27 2026/05 电气院:首届“电启未来”科技文化节开幕式暨表彰大会召开 https://news.hnu.edu.cninfo/1007/39610.htm +27 2026/05 经贸院:学生获全国高校首届数字经济实践成果大赛总决赛一等奖 https://news.hnu.edu.cninfo/1007/39609.htm +26 2026/05 2026年校庆教职工羽毛球团体赛举行 https://news.hnu.edu.cninfo/1003/39606.htm +25 2026/05 “寻迹百年 定向未来” 湖南大学第十届定向运动大赛举行 https://news.hnu.edu.cninfo/1003/39601.htm +25 2026/05 科技园:被认定为湖南省标准型科技型企业孵化器 https://news.hnu.edu.cninfo/1007/39591.htm +22 2026/05 学校举行“弦歌湖大,银龄芳华”老年大学文艺汇演 https://news.hnu.edu.cninfo/1003/39587.htm +21 2026/05 校庆系列学术报告会丨汪寿阳:谈AI时代管理科学理论体系构建的几点思考 https://news.hnu.edu.cninfo/1004/39585.htm +21 2026/05 科技成果转化中心:高校区域技术转移转化中心(福建)来校调研 https://news.hnu.edu.cninfo/1007/39584.htm +21 2026/05 求是讲堂丨刘雁飞:从48V到0.6V/2000A:面向AI大算力芯片供电的范式革命与创新方向 https://news.hnu.edu.cninfo/1004/39583.htm +我国儿童福利兜底保障标准持续提高 https://news.cctv.com/2026/05/30/ARTIMyFUFP2jrQaWUUV11Mv3260530.shtml +商务部新闻发言人就欧委会开展对华关系讨论答记者问 https://news.cctv.com/2026/05/30/ARTIJQQ55dCkFV593hH1O7MU260530.shtml +多领域发布亮眼“成绩单” 经济发展积聚澎湃新动能 https://news.cctv.com/2026/05/30/ARTIjXm7AxuSthCd2kCrPi9j260530.shtml +未来五年城市更新如何推进?哪些产业面临新机会? https://news.cctv.com/2026/05/30/ARTIO2i3acP6uuDUKkQ58MPQ260530.shtml +这些行为涉嫌“数据犯罪” 国安最新提示 https://news.cctv.com/2026/05/30/ARTIWUt18wLwRiQGZkFVcbGU260530.shtml +树苗会“找水” AI听“鸟鸣” 生态修复技术“工具箱”上新 https://news.cctv.com/2026/05/30/ARTIZcTaJOXjE0BL18J5x0sR260530.shtml +多措并举保丰收 小麦主产区增强服务全力护航夏收 https://news.cctv.com/2026/05/30/ARTIH8FvtrPsx3apz8dEShR5260530.shtml +北京地铁开启双温车厢 多条线路站内空调将启动升级 https://news.cctv.com/2026/05/30/ARTI0ybw1kPtdK2IwiTMpcqx260530.shtml +多部新片陆续定档 业态创新激活电影消费 https://news.cctv.com/2026/05/30/ARTIT4dazAkkTroVVFcYomPo260530.shtml +呼和浩特一药店高价销售集采药 当地约谈主要负责人 https://news.cctv.com/2026/05/30/ARTIsDH8MafW83LNkAOGXmPX260530.shtml +AI使用方式进入智能体阶段 催生“词元经济”新产业链 https://tv.cctv.com/2026/05/30/VIDEkhbbyyqnn0q1dsyc4KHm260530.shtml +美军称将在霍尔木兹海峡附近开展军事行动 https://tv.cctv.com/2026/05/30/VIDEqx8agRpjJM8We6QR1Yy6260530.shtml +被判立即向俄央行赔偿约2000亿欧元 欧洲清算银行上诉 https://news.cctv.com/2026/05/30/ARTIemNb3OCiP3x8WXdq5V57260530.shtml +联合国:南苏丹阿科博地区数十万人面临灾难性饥饿 https://news.cctv.com/2026/05/30/ARTI95i4hp6YBO3swB2E84hJ260530.shtml +世界杯开幕在即 墨西哥三航司对非洲旅客实施限制措施 https://news.cctv.com/2026/05/30/ARTIBMD5sTV3oATKCorVfZvL260530.shtml +阿富汗卡车侧翻事故已致22人死亡 相关调查仍在进行 https://news.cctv.com/2026/05/30/ARTI0UwaJUJhd5NvOprSQSrb260530.shtml +小央视频 央视网原创视频子品牌,以更加贴近年轻人的视角,有趣、有料、有故事的方式解读时代。 https://v.cctv.com/xysp/index.shtml +全民健康 提高全民健康素养水平,助力“健康中国2030”战略。央视网《全民健康》,向所有人分享健康知识! https://edu.cctv.com/health/index.shtml +数字主播央视网小C 小C是总台央视网的一位数字主播,同时也是一位对世界充满好奇、开朗明媚、热爱国风的元气少女。 https://v.cctv.com/zixun/yswxc/index.shtml?spm=C90324.Pfdd0SYeqktv.Eri5TUDwaTXO.5 +超级工厂 深入挖掘中国品牌商业价值、探寻品牌数字化升级道路、为国货品牌装上快速成长的引擎。 https://business.cctv.com/special/cjgc/index.html +《比划》 原创短视频栏目,专注于解释热点,分享知识,阐述流行,让知识流动起来,回应年轻人的好奇心。 https://v.cctv.com/reping/bh/index.shtml +小央视频 央视网原创视频子品牌,以更加贴近年轻人的视角,有趣、有料、有故事的方式解读时代。 https://v.cctv.com/xysp/index.shtml +北京上空现飞机凌月景观 5月29日,北京,一架飞机从夜空中的月亮前飞过。 https://photo.cctv.com/2026/05/30/PHOAjh9P9cyIVQ1RQ7PzNLwZ260530.shtml +苏州北站改扩建工程夜以继日加紧建设5月29日,夜幕下的苏州高铁北站改扩建工地灯火通明,建设者挑灯攻坚、机械轮番作业。 https://photo.cctv.com/2026/05/30/PHOABwlapoi1ywg2459tnGsY260530.shtml +山西河津:麦田金黄绘就丰收图景5月30日,山西河津,黄汾百万亩粮食优质高产高效示范基地内,小麦陆续进入成熟收获期。 https://photo.cctv.com/2026/05/30/PHOAwyq0nmr1v444oHvRqT9E260530.shtml +雨后巫峡壮美如画夏日时节,长江巫峡一带雨后初霁,云海翻涌,奇峰林立,长江水道在云海中若隐若现,壮美如画。 https://photo.cctv.com/2026/05/30/PHOA3Rp3oPQqLOmraA2Rnriq260530.shtml +青岛港外贸集装箱码头繁忙5月29日,山东青岛港外贸集装箱码头一派繁忙景象,货轮在此装卸外贸集装箱。 https://photo.cctv.com/2026/05/30/PHOArnjFRvj2ZFOH3waKoTRv260530.shtml +新疆昌吉:牧场夏日绿意浓5月29日,新疆昌吉江布拉提草原绿意盎然,连绵雪峰与青青草甸相映成趣。 https://photo.cctv.com/2026/05/30/PHOAwdVrPtXf8sKVeMLa8ycR260530.shtml +湖北十堰:丹江口碧水映晴光5月30日,湖北十堰,初夏时节的丹江口,千岛错落,层峦凝黛。 https://photo.cctv.com/2026/05/30/PHOAUis4e828ICIutwIoBtq9260530.shtml +哈尔滨:夕照百年滨洲桥宛若电影胶片孟夏时节的傍晚,依偎在松花江臂弯里的百年滨洲桥,被落日晖光轻轻笼罩。 https://photo.cctv.com/2026/05/30/PHOAW75Hiq5qWQw7VN1nFDzX260530.shtml +光明日报社社长兼总编辑王慧敏:新闻现场就是记者的战场 https://about.gmw.cn/2026-03/31/content_38683175.htm +钻进沙漠半个月,《光明日报》报道组把"没啥好说"写成爆款 https://about.gmw.cn/2026-05/15/content_38767627.htm +“核心价值观百场讲坛”第169场在安徽桐城举办 http://about.gmw.cn/2026-05/29/content_38797210.htm +《法治新闻传播》介绍光明网新春报道AI特色创新实践 https://about.gmw.cn/2026-05/26/content_38790862.htm +2025中国非遗年度新闻人物30位提名候选人产生 http://about.gmw.cn/2026-05/16/content_38770658.htm +扩能提质 开创服务业高质量发展新局面 https://politics.gmw.cn/2026-05/30/content_38799976.htm +外交部:日菲所谓“划界谈判”完全非法无效 https://politics.gmw.cn/2026-05/30/content_38799935.htm +日本加速勾连菲律宾,有何图谋? https://world.gmw.cn/2026-05/30/content_38799930.htm +德国市长:让人们过上更好的生活是城市发展的终极追求 https://world.gmw.cn/2026-05/30/content_38799918.htm +漫话防范和纠治政绩观偏差:不打“小九九” https://politics.gmw.cn/2026-05/30/content_38800144.htm +圣马力诺市长点赞黄山:比风景更美的是家一般的温暖 https://world.gmw.cn/2026-05/30/content_38799913.htm +这种易被忽视的“隐形烟害”,可能在悄悄危害你的健康 https://politics.gmw.cn/2026-05/30/content_38800346.htm +日本万人集会抗议高市政府危险政策动向 https://world.gmw.cn/2026-05/30/content_38799939.htm +武契奇访华,中塞“铁杆友谊”增加了哪些新“成色” https://politics.gmw.cn/2026-05/30/content_38799955.htm +“铁杆友谊”再深化 中国外交底色鲜明 https://politics.gmw.cn/2026-05/30/content_38799959.htm +五部门发文促进互联网信息内容多渠道分发服务规范发展 https://politics.gmw.cn/2026-05/30/content_38799874.htm +从智博会“机器人军团”,看天津机器人产业强势崛起 https://digital.gmw.cn/2026-05/30/content_38800000.htm +塞尔维亚专家:期待塞中各领域合作迈向新高度 https://world.gmw.cn/2026-05/30/content_38799952.htm +打破“时尚”滤镜 别让电子烟误导青春 https://life.gmw.cn/2026-05/30/content_38800089.htm +南方降雨显著减弱 北方炎热持续多地或现高温 https://politics.gmw.cn/2026-05/30/content_38800067.htm +事关流动儿童与留守儿童保护 27部门联合印发通知 https://politics.gmw.cn/2026-05/30/content_38800063.htm +打破“时尚”滤镜 别让电子烟误导青春 https://life.gmw.cn/2026-05/30/content_38800089.htm +南方降雨显著减弱 北方炎热持续多地或现高温 https://politics.gmw.cn/2026-05/30/content_38800067.htm +事关流动儿童与留守儿童保护 27部门联合印发通知 https://politics.gmw.cn/2026-05/30/content_38800063.htm +体感更热是为何?一文分清气温、地表温度与体感温度 https://life.gmw.cn/2026-05/30/content_38800056.htm +抗生素超标38倍,只怪“上游养殖”? https://guancha.gmw.cn/2026-05/29/content_38799350.htm +600年古树死亡,“批示”能代替法律? https://guancha.gmw.cn/2026-05/29/content_38799333.htm +人形机器人有了身份证,更需握紧话语权 https://guancha.gmw.cn/2026-05/28/content_38796020.htm +[改进文风大家谈]提倡明白晓畅的文风 https://news.gmw.cn/2026-05/30/content_38799789.htm +“科学的道路上,永远有啃不完的硬骨头” https://news.gmw.cn/2026-05/30/content_38799792.htm +中韩深化进出口食品安全监管领域合作 https://news.gmw.cn/2026-05/30/content_38799748.htm +云南西双版纳:以特色产业赋能高质量发展 https://news.gmw.cn/2026-05/30/content_38799757.htm +第10届中国-南亚博览会将举行 以经贸合作促互利共赢 https://news.gmw.cn/2026-05/30/content_38799754.htm +[案例苑]外卖骑手送餐时撞伤行人,谁应担责? https://news.gmw.cn/2026-05/30/content_38799731.htm +健全公平竞争法律制度 推进全国统一大市场建设 https://news.gmw.cn/2026-05/30/content_38799733.htm +[健·真言]孩子正在长身体,胖一点不用管? https://news.gmw.cn/2026-05/30/content_38799795.htm +关注腺样体,不止为“颜值” https://news.gmw.cn/2026-05/30/content_38799796.htm +统筹扩大内需和深化供给侧结构性改革 http://theory.gmw.cn/2026-05/29/content_38797054.htm +树立以人民为中心的政绩观 http://theory.gmw.cn/2026-05/29/content_38797192.htm +把握新机遇加快建设数字中国 http://theory.gmw.cn/2026-05/29/content_38796967.htm +健全文化遗产保护传承体制机制 http://theory.gmw.cn/2026-05/29/content_38797247.htm +破解“人工智能+制造”融合瓶颈 http://theory.gmw.cn/2026-05/29/content_38797038.htm +以坚强党性筑牢正确政绩观坚实根基 http://theory.gmw.cn/2026-05/29/content_38797356.htm +中国创新能力跃迁的体制机理与经验启示 https://theory.gmw.cn/2026-05/29/content_38798111.htm +加强消费场景投资 促进投资消费良性循环 https://theory.gmw.cn/2026-05/21/content_38778488.htm +把握乡村发展规律 创造乡村优质生活空间 https://theory.gmw.cn/2026-05/21/content_38778476.htm +促进生活性服务业高品质多样化便利化发展 https://theory.gmw.cn/2026-05/20/content_38776935.htm +高校教育科技人才一体化发展的实践路径 https://theory.gmw.cn/2026-05/14/content_38765012.htm +作为世界重要公共文化产品的中文贡献 https://theory.gmw.cn/2026-05/14/content_38765024.htm +话剧《问瓷》:一份关于文化传承的千年问道 https://wenyi.gmw.cn/2026-05/29/content_38797053.htm +张钰童:“手搓”作品全网刷屏,真诚是关键 https://wenyi.gmw.cn/2026-05/29/content_38796954.htm +凭口碑发酵全网,《给阿嬷的情书》何以破圈 https://wenyi.gmw.cn/2026-05/29/content_38796886.htm +《家业》:将非遗制墨文化融入女性成长叙事 https://wenyi.gmw.cn/2026-05/29/content_38796907.htm +“出圈热”与“看不懂”的悖论,舞剧怎么破 https://wenyi.gmw.cn/2026-05/29/content_38797040.htm +《无边有界》:网络文艺文化图景的理论省思 https://wenyi.gmw.cn/2026-05/29/content_38796930.htm +“舞性的美感”并非杂技向舞蹈的让步 https://wenyi.gmw.cn/2026-05/25/content_38788555.htm +文学“破圈”,影视“加分” https://wenyi.gmw.cn/2026-04/28/content_38736698.htm +守护稀有剧种,筑牢戏曲生态根基 https://wenyi.gmw.cn/2026-04/02/content_38687146.htm +饶晓志:电影留白没有标准答案 https://wenyi.gmw.cn/2026-03/25/content_38668836.htm +谈及尊严和体面,打开生与死的话题 https://wenyi.gmw.cn/2026-03/25/content_38668837.htm +做IP需要坚持原创精神 https://wenyi.gmw.cn/2026-03/13/content_38646890.htm +第八届中华经典诵写讲大赛启幕 https://news.gmw.cn/2026-05/29/content_38796465.htm +一部含泪带笑的悲喜剧——评刘震云《咸的玩笑》 https://reader.gmw.cn/2026-05/29/content_38796755.htm +真意更在春山外——读诗集《一望满春山》 https://reader.gmw.cn/2026-05/29/content_38796689.htm +无障碍出版物,不只是格式转换 https://reader.gmw.cn/2026-05/29/content_38796642.htm +柳宗元笔下的“蝜蝂”是什么虫 https://news.gmw.cn/2026-05/25/content_38786598.htm +明清小说对传统文教的创新与拓展 https://news.gmw.cn/2026-05/25/content_38786596.htm +任继愈先生与《中华大藏经》 https://news.gmw.cn/2026-05/25/content_38786589.htm +【烟火人间】却顾所来径 https://news.gmw.cn/2026-05/25/content_38786545.htm +让中国原创绘本照亮世界 https://news.gmw.cn/2026-05/25/content_38786452.htm +中国原创绘本的美学进路与代际传承 https://news.gmw.cn/2026-05/25/content_38786453.htm +村里有了“农忙托管班” https://tech.gmw.cn/2026-05/29/content_38796895.htm +【我在现场】“科技便利店” https://tech.gmw.cn/2026-05/29/content_38796875.htm +全国“三夏”大规模小麦机收全面展开 https://tech.gmw.cn/2026-05/29/content_38796913.htm +我国海上最大规模浅层岩性油田一期开发项目全面投产 https://tech.gmw.cn/2026-05/29/content_38796906.htm +总体产值突破1.3万亿元 https://tech.gmw.cn/2026-05/29/content_38796862.htm +亟待定标准!勿让“测AI率”沦为“开盲盒 https://tech.gmw.cn/2026-05/29/content_38796847.htm +神舟二十一号和神舟二十三号航天员乘组完成在轨交接 https://tech.gmw.cn/2026-05/29/content_38796763.htm +鄂尔多斯合成生物项目加速推进 https://difang.gmw.cn/nmg/2026-05/07/content_38751206.htm +鄂托克旗春耕生产有序推进 https://difang.gmw.cn/2026-05/07/content_38751215.htm +“百姓名嘴”从凉亭“说书”到板凳“断案” https://difang.gmw.cn/nmg/2026-04/17/content_38715668.htm +内蒙古鄂托克旗打造基层监督新标杆 https://difang.gmw.cn/nmg/2026-04/17/content_38715670.htm +歌声送到家门口,温暖留在老人心 https://difang.gmw.cn/nmg/2026-04/08/content_38696375.htm +求职路上警惕“培训贷” https://edu.gmw.cn/2026-05/29/content_38796579.htm +爸爸的育儿责任无法“外包” https://edu.gmw.cn/2026-05/29/content_38796619.htm +用“主角”精神诠释每一个角色 https://e.gmw.cn/2026-05/29/content_38797052.htm +AI短剧崛起,也要保护真人影视空间 https://news.gmw.cn/2026-05/29/content_38796419.htm +一所村小的足球“六连冠” https://sports.gmw.cn/2026-05/29/content_38797310.htm +“整装”东北,何以超燃? https://sports.gmw.cn/2026-05/29/content_38797306.htm +南非男足国家队公布世界杯大名单 https://sports.gmw.cn/2026-05/29/content_38797282.htm +严禁用AI代为审核药方 http://health.gmw.cn/2026-05/29/content_38797163.htm +“校园餐”如何吃得更安心 http://health.gmw.cn/2026-05/29/content_38797179.htm +"伪心理学"如何制造焦虑?如何识破焦虑陷阱? http://health.gmw.cn/2026-05/29/content_38797160.htm +多地进入蚊媒活跃期 科学防蚊、灭蚊这样做 http://health.gmw.cn/2026-05/29/content_38797153.htm +医生评职称,何须“卷论文” http://health.gmw.cn/2026-05/29/content_38797193.htm +“干戒”成功率不足一成 这样戒烟更有效 http://health.gmw.cn/2026-05/29/content_38797229.htm +蛋白质,到底该怎么吃? https://jiankang.gmw.cn/2026-05/29/content_38776640.htm +决胜高考冲刺期,这些“开挂饮食”管用吗 https://jiankang.gmw.cn/2026-05/29/content_38797389.htm +当心这5个不起眼的习惯,让你的血脂飙升 https://jiankang.gmw.cn/2026-05/29/content_38797357.htm +临近大考如何科学护眼,医生来支招 https://jiankang.gmw.cn/2026-05/29/content_38797408.htm +“绑沙袋跑步瘦得更快”,是真的吗?医生提醒 https://jiankang.gmw.cn/2026-05/29/content_38797415.htm +喝汤比吃肉更有营养?“浓缩”的真不一定是精华 https://jiankang.gmw.cn/2026-05/29/content_38797380.htm +司法部:加快推进人工智能健康发展综合性立法 https://wlaq.gmw.cn/2026-05/28/content_38796032.htm +AI时代还需要“师傅”吗 https://wlaq.gmw.cn/2026-05/28/content_38796050.htm +中老铁路开行旅客列车超10万列 https://economy.gmw.cn/2026-05/29/content_38797257.htm +前4月电力市场交易电量同比增25.6% https://economy.gmw.cn/2026-05/29/content_38797262.htm +自行车产业多点突破提质增速 https://economy.gmw.cn/2026-05/29/content_38797374.htm +两部门发文布局人工智能计量能力建设 https://economy.gmw.cn/2026-05/29/content_38797419.htm +新场景催生电力市场更大活力 https://economy.gmw.cn/2026-05/29/content_38797390.htm +旅游调节社会情绪的作用愈加突出 https://travel.gmw.cn/2026-05/29/content_38797020.htm +“甜蜜经济”为微山湖文旅添活力 https://travel.gmw.cn/2026-05/29/content_38797067.htm +三个视角看入境游新变化 https://travel.gmw.cn/2026-05/29/content_38796935.htm +古桥新韵背后:科技,守护千年遗珍 https://digital.gmw.cn/2026-05/25/content_38787665.htm +一图速览2026世界智能产业博览会 https://digital.gmw.cn/2026-05/26/content_38790646.htm +稻城亚丁景区问题最新通报:甘孜州启动提级整治 https://legal.gmw.cn/2026-05/29/content_38797470.htm +央企副总经理随手放涉密文件致丢失 国家安全部最新提示 https://legal.gmw.cn/2026-05/29/content_38797260.htm +我国首个八段锦基础性团体标准出台 https://feiyi.gmw.cn/2026-05/29/content_38797355.htm +在人的参与中 千年窑火生生不息 https://feiyi.gmw.cn/2026-05/29/content_38797089.htm +博山琉璃:薪火相传 “琉”光溢彩 https://feiyi.gmw.cn/2026-05/29/content_38797121.htm +《给阿嬷的情书》何以破圈 https://whcy.gmw.cn/2026-05/29/content_38797058.htm +从影视作品到舞台戏剧 不是简单“缩写” https://whcy.gmw.cn/2026-05/29/content_38797016.htm +从正名到共创 中国戏剧探索国际化新路径 https://whcy.gmw.cn/2026-05/29/content_38797199.htm +第10届南博会6月11日至16日在昆明举行 亮点前瞻 http://news.china.com.cn/2026-05/30/content_118522002.shtml +华能集团有限公司原党组成员王益华接受审查调查 http://www.china.com.cn/txt/2026-05/30/content_118522882.shtml +这种“隐形烟害”,可能正在悄悄危害你的健康 http://www.china.com.cn/txt/2026-05/30/content_118522756.shtml +绍兴柯桥通报博物馆青铜剑“拼接痕”调查情况 http://news.china.com.cn/2026-05/30/content_118522876.shtml +水利部部署开展第二批母亲河复苏行动 http://news.china.com.cn/2026-05/30/content_118522766.shtml +中方敦促安理会及时调整或解除南苏丹制裁 http://news.china.com.cn/2026-05/30/content_118522762.shtml +今年前四个月我国物流需求保持韧性增长 http://news.china.com.cn/2026-05/30/content_118522674.shtml +中国引领金砖国家经济合作向智能制造转型 http://news.china.com.cn/2026-05/30/content_118522037.shtml +两部门:推进地方政府采购电子卖场高质量发展 http://news.china.com.cn/2026-05/30/content_118522045.shtml +财政部在香港成功发行60亿元人民币绿色主权债券 http://news.china.com.cn/2026-05/30/content_118522047.shtml +开局起步"十五五"|北京将更注重优化提升首都功能 http://news.china.com.cn/2026-05/30/content_118522048.shtml +金门旅游业期待更多陆客赴金 盼"小三通"增加船班 http://news.china.com.cn/2026-05/30/content_118522107.shtml +跨越八秩:东京审判的历史真相与时代意义 http://news.china.com.cn/2026-05/30/content_118522025.shtml +美国防长谈中美元首会晤,回应中方提问 http://news.china.com.cn/2026-05/30/content_118522771.shtml +法国热浪:超半数地区刷新月度气温纪录 http://news.china.com.cn/2026-05/30/content_118522770.shtml +美法官裁定将美总统特朗普名字从肯尼迪中心移除 http://news.china.com.cn/2026-05/30/content_118522267.shtml +“雨口夺粮”彰显“大国粮仓”责任与担当 http://www.china.com.cn/opinion2020/2026-05/29/content_118520518.shtml +31份省级规划共绘“十五五”发展新图景 http://www.china.com.cn/opinion2020/2026-05/29/content_118520865.shtml +当“默克尔再次出山”扰动欧洲心绪 http://www.china.com.cn/opinion2020/2026-05/29/content_118520562.shtml +恶意“碰瓷”中国,日本深陷战略歧途 http://www.china.com.cn/opinion2020/2026-05/29/content_118520232.shtml +“新掠食者”论下,欧洲可能走向何方 http://www.china.com.cn/opinion2020/2026-05/29/content_118520229.shtml +欧盟对华挑起经贸摩擦是代价高昂的战略误判 http://www.china.com.cn/txt/2026-05/28/content_118518192.shtml +AI治理为何成为中美元首会谈的核心议题? http://www.china.com.cn/opinion2020/2026-05/27/content_118514679.shtml +美国媒体文章:中企正改变拉美城市出行方式 http://www.china.com.cn/txt/2026-05/29/content_118521219.shtml +非媒文章:渲染“中国风险”不符合非洲利益 http://www.china.com.cn/txt/2026-05/28/content_118517907.shtml +澳学者:中国稳步迈向全球首个“电力国家” http://www.china.com.cn/txt/2026-05/28/content_118518362.shtml +澳大利亚媒体:中国海水淡化厂受中东青睐 http://www.china.com.cn/txt/2026-05/29/content_118521222.shtml +中国长期稳定的治理体系是快速发展关键密码 http://www.china.com.cn/txt/2026-05/28/content_118518360.shtml +德国作家:不理解长征精神,就无法理解中国 http://www.china.com.cn/txt/2026-05/28/content_118518359.shtml +访西班牙《辩论报》社长比埃托·鲁比多 http://www.china.com.cn/txt/2026-05/29/content_118521223.shtml +英媒:中国“银发科技”为东南亚提供借鉴 http://www.china.com.cn/txt/2026-05/28/content_118517906.shtml +外媒:“中国冲击论”背后的西方信心缺失 http://www.china.com.cn/txt/2026-05/27/content_118516536.shtml +辽宁:气象赋能海洋经济 解锁“知天而作” http://www.china.com.cn/txt/2026-05/29/content_118521089.shtml +给科技人才松绑!让“买酱油”的钱也可以“买醋” http://www.china.com.cn/txt/2026-05/29/content_118520777.shtml +蛙声一片!海南旅游公路双环线上设多处生态廊道 http://www.china.com.cn/txt/2026-05/29/content_118520768.shtml +四川稻城亚丁该如何重拾文旅初心? http://www.china.com.cn/txt/2026-05/29/content_118521091.shtml +找到努力方向!重庆“十万大学生职业体验行动” http://www.china.com.cn/txt/2026-05/29/content_118520543.shtml +黄土塬上崛起算力高地,加速向“词元工厂”转变 http://www.china.com.cn/txt/2026-05/29/content_118520470.shtml diff --git a/project/java-cli/myarticles.txt b/project/java-cli/myarticles.txt new file mode 100644 index 0000000..2bed586 --- /dev/null +++ b/project/java-cli/myarticles.txt @@ -0,0 +1,92 @@ +28 2026-05 我校汤素娥教授在中宣部召开的党的创新理论传播工程推进会上发言 5月26日,中宣部在北京召开党的创新理论传播工程推进会。我校汤素娥教授作为全国高校思政课教师代表,应邀出席会议,并以《努力讲好思政课,推动党的创新理论进学生头脑》为题发言。中央有关部门、各地区党委宣传部、重点理论工作平台负责同志和专家学者、媒体工作者、基层宣讲骨干代表等参会。会议强调,实施党的创新理论传播工程是党中央作出的重大决策部署,是推动党的创新理论大众化普及、精准化传播的战略安排,要把学习宣... https://news.hnu.edu.cninfo/1003/39613.htm +27 2026-05 “大文学观视域下的地方性写作”学术研讨会在我校举行 5月24日,由湖南大学和湖南省作家协会共同举办的“大文学观视域下的地方性写作”学术研讨会在校举行。校党委副书记唐珍名,湖南省作协党组书记、主持日常工作的副主席郭天保,湖南省作协党组成员、副主席蒋蒲英、谢宗玉等出席。《人民文学》、《收获》、《当代》、《十月》等名刊主编及20余位文学界专家学者齐聚岳麓山下,以谢宗玉的散文集《千年弦歌》、刘年的诗集《一生事,一捧雪》、卓今的文学理论评论专著《劳者歌其事——... https://news.hnu.edu.cninfo/1003/39615.htm +27 2026-05 学习弘扬袁隆平科技创新精神暨杂交水稻高质量发展座谈会召开 5月23日,学习弘扬袁隆平科技创新精神暨杂交水稻高质量发展座谈会在长沙召开。省委书记沈晓明出席并讲话,强调要深入学习贯彻习近平总书记关于向袁隆平同志学习的重要指示精神,学习弘扬袁隆平同志务实的科技创新精神,为实现高水平科技自立自强贡献力量。农业农村部党组成员、中国农业科学院院长黄三文出席并讲话。座谈会上,来自省内外的院士、高校和科研院所、企业、青年和学生代表发言,深切缅怀袁隆平同志的卓越贡献,感悟... https://news.hnu.edu.cninfo/1003/39611.htm +26 2026-05 2026年校庆教职工羽毛球团体赛举行 5月22日至24日,“羽竞风华·同心奋进”2026年校庆教职工羽毛球团体赛在南校区体育馆举行。全校32支工会代表队的500余名教职工齐聚一堂,以球会友、共庆华诞。赛场上,选手们精神饱满、配合默契,发球、扣杀、吊球、防守等精彩回合点燃现场,彰显出教职工团结协作、奋勇争先的良好风采。场下队友加油鼓劲、观众热情助威,体育馆内洋溢着紧张热烈、团结友爱的氛围。经过多轮角逐,体育学院代表队获第一名;资产经营公司、计算机学... https://news.hnu.edu.cninfo/1003/39606.htm +25 2026-05 “寻迹百年 定向未来” 湖南大学第十届定向运动大赛举行 5月24日,“2026年世界定向周·湖南大学第十届定向运动大赛”在南校区田径场举行。1604名师生、校友及其子女齐聚一堂,用奔跑的脚步丈量校园,以昂扬的姿态为母校献上祝福。2026年10月,湖南大学将迎来岳麓书院创建1050周年暨湖南大学定名100周年华诞,本次大赛正是校庆年系列活动的重要组成部分。本次比赛紧扣“寻迹百年 定向未来”主题,共设置6条特色线路:校友组“归雁寻根·步履百年线”、教工组“师道致远·麓山同行线”、研... https://news.hnu.edu.cninfo/1003/39601.htm +22 2026-05 学校举行“弦歌湖大,银龄芳华”老年大学文艺汇演 5月20日,由湖南大学党委离退休工作部主办、湖南大学老年大学承办的“弦歌湖大,银龄芳华”文艺汇演在教职工活动中心二楼多功能厅举行。校党委副书记唐珍名出席并致辞。退休校领导张强、王文沐、龚明金、王红悦等参加活动。二级单位离退休工作分管领导和干事、老年大学负责人及班长、协会负责人、参演演员等共同观看演出。文艺汇演上,老教工们精神矍铄、风采依旧,用舞蹈、太极、京剧、时装模特走秀、合唱等形式,在舞台上重温... https://news.hnu.edu.cninfo/1003/39587.htm +21 2026-05 校庆系列学术报告会丨汪寿阳:谈AI时代管理科学理论体系构建的几点思考 5月20日下午,发展中国家科学院院士、国际系统与控制科学院院士、中国科学院杰出研究员汪寿阳做客经世致用讲坛,在工商管理学院前进楼报告厅作“谈AI时代管理科学理论体系构建的几点思考”主题报告。本场报告会为“校庆系列学术报告”之一。汪寿阳围绕AI与中国管理实践的历史交汇、AI给传统管理理论带来的挑战、AI时代中国管理学理论框架构建、AI时代管理学研究方法革新等方面进行了系统阐述。他认为,中国管理实践已走在全球前... https://news.hnu.edu.cninfo/1004/39585.htm +21 2026-05 求是讲堂丨刘雁飞:从48V到0.6V/2000A:面向AI大算力芯片供电的范式革命与创新方向 5月18日下午,美国国家发明家科学院(NAI)院士、加拿大工程院(CAE)院士、加拿大女王大学(Queen's University)教授刘雁飞做客求是讲堂,以“从48V到0.6V/2000A:面向AI大算力芯片供电的范式革命与创新方向”为题作报告。副校长李肯立为刘雁飞颁发客座教授聘书。刘雁飞从对PhD身份的深度探讨巧妙切入,首先讲解了创新举措的模块,分享了提升科研创新思维的方法,鼓励同学们在日常生活中多读前沿文献、主动思考,发掘自身独到的见解... https://news.hnu.edu.cninfo/1004/39583.htm +20 2026-05 校庆系列学术报告会丨张益:展望电磁暂态仿真技术和现代电力系统数字孪生 5月15日上午,加拿大工程院院士、现任RTDS技术公司副总裁张益做客经世致用讲坛,在超算中心报告厅作“展望电磁暂态仿真技术和现代电力系统数字孪生”主题报告。本场报告会为“校庆系列学术报告”之一。张益系统梳理了电力系统实时仿真技术的演进脉络与核心算法,阐释了其在构建现代电力系统数字孪生体系中的基础性作用。他回顾了电磁暂态仿真的技术发展历程,分析了在高比例新能源、电力电子设备大规模接入背景下,宽频振荡、混... https://news.hnu.edu.cninfo/1004/39578.htm +19 2026-05 校庆系列学术报告会丨陈志宁:Antenna Technology Towards Metantennas and AntennAl 5月18日上午,新加坡工程院院士、新加坡国立大学教务长讲席教授陈志宁做客经世致用讲坛,在电气与信息工程学院作“Antenna Technology Towards Metantennas and AntennAl”主题报告。本场报告会为“校庆系列学术报告”之一。报告中,陈志宁教授系统梳理了天线技术从基础物理探索迈向人工智能赋能天线创新的演进脉络与实践路径。他强调,技术创新必须回归物理本源,突破传统材料与设计范式的束缚,打破“以真空为基准”的固有认... https://news.hnu.edu.cninfo/1004/39614.htm +13 2026-05 校庆系列学术报告会丨刘建亚:哥德巴赫猜想 4月27日上午,中国科学院院士、山东大学讲席教授刘建亚做客经世致用讲坛,在超算中心报告厅作“哥德巴赫猜想”主题报告。本场报告会为“校庆系列学术报告”之一。刘建亚系统剖析了数论领域中素数分布的核心规律,全面梳理了哥德巴赫猜想的百年研究历程。他回顾了中国数学学派在筛法领域的卓越成就,重点讲述了华罗庚、潘承洞、王元、陈景润等前辈学者的开拓性贡献,生动诠释了中国数学家在世界数论研究中的重要地位。同时,他还... https://news.hnu.edu.cninfo/1004/39549.htm +12 2026-05 岳麓讲坛丨刘闯:从幻觉问题看自然与人工智能之间的区别 5月7日晚,复旦大学特聘教授刘闯做客岳麓讲坛,在综合楼108报告厅作“从幻觉问题看自然与人工智能之间的区别”主题讲座。刘闯以大语言模型“AI 幻觉”为切入点,指出这并非单纯的技术漏洞,而是模型依托统计规律生成信息的固有特征。他表示,人工智能模型以统计最优为目标输出内容,缺乏对真实世界的因果认知,与人类的认知偏差存在本质差异。在梳理认知科学演进脉络时,刘闯重点阐释了贝叶斯大脑与预测加工模型。他指出,动物... https://news.hnu.edu.cninfo/1004/39541.htm +12 2026-05 王纲金教授获批教育部哲学社会科学研究重大课题攻关项目 近日,2025年度教育部哲学社会科学研究重大课题攻关项目立项结果正式公布,我校王纲金教授申报的课题“数字资产与数字货币的风险机理研究”(项目批准号:25JZD017)获批立项。“数字资产与数字货币的风险机理研究”课题聚焦数字金融发展前沿,面向金融强国建设和防范化解金融风险的重大战略需求,围绕数字资产与数字货币发展中的风险生成、传导扩散与治理机制等关键问题开展系统研究。课题立足中国数字金融发展实践,系统解析... https://news.hnu.edu.cninfo/1005/39539.htm +08 2026-05 教科院朱恬恬教授与博士生楚秋玉研究成果在高等教育学国际权威期刊发表 近日,教科院朱恬恬教授与博士生楚秋玉在高等教育研究领域取得进展。研究成果以“The double world-class policy and urban innovation capability in China: a spatial difference-in-differences approach”为题发表在国际高等教育权威期刊《Studies in Higher Education》。支撑经济高质量发展,是“世界一流大学和一流学科建设”政策(以下简称“双一流”政策)的重要目标。然而,现有评估多集中考察“双一流”政策对高校本... https://news.hnu.edu.cninfo/1005/39521.htm +07 2026-05 环工院黄彬彬教授团队在常温下清洁能源驱动乙炔高效转化产乙烯研究上取得进展 乙烯是世界第一大化学品,也是石油化工行业的核心原料。工业主要通过石脑油裂解生产乙烯,过程会生成微量乙炔杂质,易造成聚合催化剂中毒,严重影响下游产品品质,因此乙烯中乙炔脱除是石化与聚合物工业关键工序。目前工业主流为热催化加氢除炔,存在高温高压工况,还易发生过度加氢与低聚反应。煤制烯烃对我国极具战略意义,然而传统煤制烯烃技术存在短板,如工作条件苛刻、生产路线长且复杂、乙烯选择性低且含碳产物分布宽,... https://news.hnu.edu.cninfo/1005/39519.htm +24 2026-04 国家社科基金重大项目“马克思主义中国化时代化的文明根基、历史进程和基本经验研究”开题 4月19日,湖南大学马克思主义学院吴增礼教授主持的国家社会科学基金重大项目“马克思主义中国化时代化的文明根基、历史进程和基本经验研究”项目开题报告会举行。该项目以“马克思主义中国化时代化的文明根基、历史进程与基本经验”这一总问题为聚焦点,从学理基础、文明根基、历史进程、基本经验和实践指向五个方面展开。从“开辟马克思主义中国化时代化新境界”这个重大命题和战略任务出发,以中国共产党理论探索和创新为主线... https://news.hnu.edu.cninfo/1005/39432.htm +13 2026-04 物电院郭清华教授团队在“空间反演克拉默简并”研究方向取得进展 从简单的晶格到复杂的曲面,几何学原理为理解物理现象提供了重要基础。在光子学中,传统的光子晶体通常依赖于单一的空间域(如介电调制或金属共振的空间分布)来实现电磁波传播的拓扑操控,但额外空间域所能提供的自由度往往被忽视。另一方面,在无自旋的经典系统中,由于缺乏克拉默简并(Kramers degeneracy),时间反演拓扑绝缘体一直难以实现。因此,能否借助特定的空间几何构型造出类似克拉默的简并,成为科学界长期探索的... https://news.hnu.edu.cninfo/1005/39386.htm +08 2026-04 我校43项成果获湖南省第十六届社会科学优秀成果奖 近日,湖南省委、省政府公布了第十六届社会科学优秀成果奖和专家获奖名单。我校共43项成果获奖,其中一等奖11项、二等奖15项,优秀社会科学专家1项,优秀青年社会科学专家2项。湖南省社会科学优秀成果奖旨在表彰对哲学社会科学相关领域学术研究和学科建设有一定价值,对构建中国特色哲学社会科学学科体系、学术体系、话语体系有促进作用,对促进湖南经济社会发展有较大贡献的研究成果。来源:社科处通讯员:曹诗婷责任编辑:文亦 https://news.hnu.edu.cninfo/1005/39248.htm +18 2026-05 AI算力电源湖南大学·高斯宝联合研发中心揭牌 5月15日,湖南大学与深圳市高斯宝电气技术有限公司圆满举行高斯宝电气长沙研发中心暨AI算力电源湖南大学·高斯宝联合研发中心启动仪式举行。深圳市高斯宝电气技术有限公司董事长阮世良、湖南大学副校长蒋健晖为联合研发中心揭牌;湘江新区管委会副主任王先民、高斯宝电气董事长阮世良为高斯宝电气长沙研发中心揭牌。联合研发中心将重点围绕AI算力电源、电力电子技术等方向,开展联合攻关、技术转化与高层次人才培养。作为联合研... https://news.hnu.edu.cn/info/1003/39562.htm +18 2026-05 国家教育行政学院考察团来校调研 5月11日,国家教育行政学院第29期浙江省高校中青班、第6期广东省高校中青班、第13期山东省高校中青班来校考察调研。校党委常委、副校长张晓兵出席调研座谈会并致辞,校党委常委、党委组织部部长李久学主持会议。张晓兵对考察团一行表示热烈欢迎。他从学科建设、队伍建设、人才培养、服务国家战略等方面介绍了湖南大学发展建设的基本情况。他表示,希望以此次调研为契机,进一步深化合作、协同发展,推动学校高质量发展开创新局... https://news.hnu.edu.cninfo/1006/39560.htm +06 2026-05 湖南大学加纳研究中心揭牌成立 4月30日,湖南大学加纳研究中心正式揭牌成立。夸梅・恩克鲁玛泛非中心创始人兼主席萨米娅·亚巴·恩克鲁玛(Samia Yaba Nkrumah),湖南大学党委常委、校长助理、非洲研究院院长许和连为中心揭牌。许和连表示,加纳是撒哈拉以南非洲最早同中国建交的国家之一,在非洲发展及中非关系史上地位重要。学校长期深耕对非研究,拥有中非经贸合作研究院等国家级平台,成立加纳研究中心是完善对非研究布局、深化中加友好合作的具体实践。他... https://news.hnu.edu.cn/info/1003/39508.htm +29 2026-04 华为“难题揭榜”宣讲会在校举办 4月27日,华为公司“难题揭榜”宣讲会在前进教学楼报告厅举行。副校长李肯立与华为武汉研究所所长余海波、2012网站总编辑张桂贤一行进行会晤交流。宣讲会上,张桂贤详细介绍了“难题揭榜”的背景意义、发布机制、评审规则与参与路径,鼓励湖大师生积极参与“揭榜”攻关,以世界级难题牵引科研选题,以产业需求驱动前沿探索,推动产学研用深度融合协同创新。计算机学院谢鲲教授作为“火花奖”获奖代表,结合参与华为科研合作和难... https://news.hnu.edu.cn/info/1003/39469.htm +24 2026-04 湖南大学与小米集团合作框架协议签约举行 4月22日上午,湖南大学与小米集团合作框架协议签约暨智能终端人因工程联合研发中心揭牌仪式在校办公楼举行。签约仪式前,校长段献忠与小米集团副总裁、集团技术委员会主席屈恒一行进行会晤交流。小米集团产业标准研究部总经理、技术委员会秘书长周珏嘉,汽车部整车工程部副总经理兼北京整车工程部负责人廖平纬,校党委常委、副校长李肯立等出席相关活动。会上,屈恒与李肯立共同为“智能终端人因工程联合研发中心”揭牌,小米集... https://news.hnu.edu.cn/info/1003/39434.htm +28 2025-11 功率半导体与集成电路研发中心揭牌仪式举行 11月27日,湖南大学长沙半导体技术与应用创新研究院与广电计量检测集团股份有限公司签约暨揭牌仪式举行,双方共同组建“功率半导体与集成电路研发中心”。副校长李肯立,广电计量党委副书记、总经理明志茂为研发中心揭牌并见证签约。长沙半导体技术与应用创新研究院院长廖蕾、广电计量副总经理陆裕东代表双方签署合作协议。该研发中心将聚焦技术协同创新与资源共建共享,着力提升半导体领域的技术融合水平、质量管控能力和产业... https://news.hnu.edu.cninfo/1006/38945.htm +27 2026-05 电气院:首届“电启未来”科技文化节开幕式暨表彰大会召开 5月23日,电气与信息工程学院首届“电启未来”科技文化节开幕式暨表彰大会在天马小剧场举行。首届“电启未来”科技文化节聚焦产教融合、实践育人主题,活动期间,将陆续开展首届“电耀麓山,创享未来”选拔赛、“学途·职引”综合素养提升活动、电创先锋科创训练营等系列活动,涵盖创新选拔、职业发展、导学互动、科创实训、志愿服务、文艺展示等多个类别,引导青年学子在科技创新和专业实践中成长成才。会上对获得各级奖学金的... https://news.hnu.edu.cninfo/1007/39610.htm +27 2026-05 经贸院:学生获全国高校首届数字经济实践成果大赛总决赛一等奖 5月23日,全国高校首届数字经济实践成果大赛总决赛在北京举行。经济与贸易学院数字经济专业学子获全国一等奖1项、全国二等奖1项、优秀奖1项。滕霏、王如海、吴嘉俊、张鑫琪团队《安全与效率的平衡之道》项目(指导老师:李巍、吴进)获全国一等奖,许多、顾若鸿、秦文杰、邢艺薰、王静团队《数据要素驱动企业价值增值——基于可解释机器学习的建模与应用》项目(指导老师:刘征驰)获全国二等奖,贺琪淼、李佳彤、陈念、谢歆悦... https://news.hnu.edu.cninfo/1007/39609.htm +25 2026-05 科技园:被认定为湖南省标准型科技型企业孵化器 5月22日,湖南省科学技术厅公布了2026年科技型企业孵化器认定名单,湖南大学国家大学科技园被认定为标准型科技型企业孵化器。目前园区已建成超过10万平方米的科技研发、孵化及生产场地,搭建了“一站式”创业公共服务平台,涵盖创业辅导、管理咨询、项目申报等多项专业服务,满足入驻企业在不同发展阶段的多元化需求。截至2025年12月,园区累计孵化企业超1039家,成功培育3家上市公司及142家高新技术企业。未来,园区将继续发挥... https://news.hnu.edu.cninfo/1007/39591.htm +21 2026-05 科技成果转化中心:高校区域技术转移转化中心(福建)来校调研 5月20日,高校区域技术转移转化中心(福建)光电显示分中心、海洋氢能分中心一行来校调研,副校长李肯立出席座谈会。会上,双方重点就两个分中心的支持政策、我校科技成果转化、产学研融合、校地合作的具体合作模式进行了交流,并就共建概念验证中心、小试及中试平台等重点合作内容进行磋商,进一步明晰后续合作方向与落地路径。我校材料科学与工程学院、半导体学院、电气与信息工程学院、化学化工学院的4个科研团队参加座谈并... https://news.hnu.edu.cninfo/1007/39584.htm +18 2026-05 外语院:“AI时代对外话语译介与传播高端论坛”举行 5月16至17日,由中外语言文化比较学会话语译介与传播研究专业委员会主办、湖南大学外国语学院承办的“AI时代对外话语译介与传播高端论坛”在我校举行。北京外国语大学讲席教授、湖南大学兼职教授王克非,中外语言文化比较学会话语译介与传播研究专业委员会会长、北京外国语大学张威,湖南大学外国语学院院长莫再树分别致辞。复旦大学、中山大学、湖南大学等专家学者,围绕AI时代国家话语与国际传播能力建设、技术驱动下的对外传... https://news.hnu.edu.cninfo/1007/39603.htm +15 2026-05 新传院:2026“看中国・湖南行”启动仪式在我校举行 5月13日上午,2026“看中国·外国青年影像计划·湖南行”启动仪式在我校举行。湖南大学新闻与传播学院党委书记张坤,北京师范大学中国文化国际传播研究院副院长罗军,意大利马切拉塔大学教授、外方指导教师Francesco Cardinali,中外青年制片人、志愿者等参加活动。本次活动以“城韵·时尚·活力”为主题,来自5个国家的11位影视专业师与新闻与传播学院中方志愿者结对,深入长沙,用镜头展现湖湘文化底蕴与发展活力,向世界讲述湖南... https://news.hnu.edu.cninfo/1007/39561.htm +18 2026-05 77级校友周绪红院士获“桥梁大奖” 近日,2025年度“茅以升科学技术奖”评选结果公布,我院77级校友周绪红院士获“桥梁大奖”。周绪红,中国工程院院士、英国结构工程师学会Fellow、英国皇家特许结构工程师、中国钢结构行业领军人物、山区土木工程安全与韧性全国重点实验室主任。长期从事钢结构和钢-混凝土混合结构体系的教学与科研工作,开创性地发展了冷弯薄壁型钢结构体系、交错桁架结构体系,提出了钢管约束混凝土结构体系,发明了单向预应力双向配筋混凝土叠... https://news.hnu.edu.cninfo/1019/39563.htm +20 2026-04 学院校友和发展联络工作会议召开 4月17日,学校学院校友和发展联络工作会议在电能高效高质转化全国重点实验室108报告厅召开,会议就如何充分发挥学院力量、做好校友工作和发展联络工作进行部署研讨。党委宣传部、校友工作办公室、发展联络处、校庆工作办公室等职能部门及各学院校友和发展联络工作负责人及专干老师参加会议。会上,介绍了4-5月学校拟开展的校友和发展联络工作,并对各学院下一步工作提出建议和注意事项。化学化工学院、工商管理学院、经济与贸易... https://news.hnu.edu.cninfo/1019/39411.htm +15 2026-01 校友企业红星冷链在港交所上市 1月13日上午,由湖南大学EMBA2005级校友罗跃担当法定代表人、董事长的红星冷链(湖南)股份有限公司(简称“红星冷链”),正式登陆香港交易所主板。红星冷链是湖南长沙本土企业红星实业集团核心子公司,主营冷冻食品交易平台与冷冻仓储服务,是国家AAAA级仓储型物流企业、五星级冷链物流企业、冷链物流百强,日均吞吐量超4000吨,为湖南冻品仓储服务与交易市场运营龙头企业。红星实业集团党委书记、董事长罗跃毕业于湖南大学EM... https://news.hnu.edu.cninfo/1019/39122.htm +18 2025-12 湖南大学校友企业昂瑞微上市 12月16日,由我校1995级应用物理学专业校友钱永学创立并担任董事长的北京昂瑞微电子技术股份有限公司(股票简称“昂瑞微”,股票代码“688790”),成功登陆上海证券交易所科创板,为国产射频芯片产业发展注入新动能。钱永学表示:“公司将以合规为基石、以透明为准则、以创新为动力、以责任为担当,严格遵守资本市场规则。我们将借助资本市场的力量,持续加大研发投入,拓展产业布局,不断提升核心竞争力,以稳健的经营和持续... https://news.hnu.edu.cninfo/1019/39039.htm +12 2025-12 江西日报丨湖南大学江西校友会暖心救助重病校友 近日,湖南大学江西校友会发起的一场暖心救助行动,如同冬日里一束温暖的光,照亮了重病校友阿美(化名)的艰难求医路,彰显了校友间深厚的情谊和社会温情。阿美24岁,今年刚从湖南大学毕业。她父亲早亡,母亲因患精神疾病长期住院接受治疗。11月14日,在南昌工作的阿美突发狼疮性肾炎,被紧急送至南昌大学第一附属医院救治,后因病情危急转至华中科技大学同济医院治疗。在华中科技大学同济医院的病房里,阿美的身体状况极为虚... https://news.hnu.edu.cninfo/1019/39012.htm +03 2025-12 2025年度“校友回湘”工作成果榜单发布,四项全入选! 12月2日下午,2025年“校友回湘”大会在长沙召开。千余名湖湘校友齐聚湘水之畔,深入贯彻习近平总书记关于湖南工作的重要讲话和指示批示精神,共襄校友回湘盛举、携手绘就兴湘宏图。省委副书记、省长毛伟明致辞。会议发布了2025年度“校友回湘”工作成果榜单,我校入选“校友回湘”招商引资成果榜、招才引智成果榜、科研转化成果榜、捐赠成果榜等四个榜单,并居前列。本次大会还设立了“突出贡献人物”和“招引大使”两项荣誉,... https://news.hnu.edu.cninfo/1019/38964.htm +30 2026/05 新湖南 | 全力冲刺!湖南大学科创港即将交付 https://m.voc.com.cn/portal/news/show?id=32779750 +29 2026/05 人民网 | 从“匾、碑、训”的视角读懂实事求是的思想力量 http://theory.people.com.cn/n1/2026/0518/c40531-40721641.html +28 2026/05 湖南日报 | “大文学观视域下的地方性写作”学术研讨会举行 https://epaper.voc.com.cn/hnrb/html/2026-05/26/content_1787479.htm +27 2026/05 湖南日报 | 湖大科创港校区崭新亮相 https://epaper.voc.com.cn/hnrb/html/2026-05/26/content_1787460.htm +26 2026/05 新湖南 | 湖湘文化涵育实事求是思想路线的时代启示 https://m.voc.com.cn/xhn/news/202605/32748750.html +26 2026/05 湖南日报 | “金种子”破土! 从湘江新区看湖南创新创业生态 https://epaper.voc.com.cn/hnrb/html/2026-05/25/content_1787390.htm +25 2026/05 科学网 | 体育跨界生物读博,她用4年时间“拆盲盒”找到抗癌新策略 https://mp.weixin.qq.com/s/jc25Id2HqibbHFFfr_Bj7g +25 2026/05 光明日报 | 经世致用与实事求是 https://epaper.gmw.cn/gmrb/html/content/202605/24/content_14743.html +24 2026/05 三湘都市报 | 湖南大学MBA羽毛球团体赛收官,政企校三方同场交流 https://sxdsb.voc.com.cn/content/32693620 +23 2026/05 新湖南 | 千年书院对话国际社区——洋湖国际社区携手岳麓书院开启文化共建新篇章 https://m.voc.com.cn/xhn/news/202605/32697255.html +22 2026/05 人民政协报 | 为了守护好一江碧水——民建中央对口湖南省开展长江生态环境保护民主监督工作综述 https://share.rmzxw.net.cn/article/6600611/5.html?t=1778209379&sign=17fb62f171a61eaa875c6c8c5fde7120 +21 2026/05 新湖南 | 守网络安全之界 护数据安全之魂——以安全基石筑牢“十五五”高质量发展屏障 https://m.voc.com.cn/xhn/news/202605/32700300.html +20 2026/05 新湖南 | 湖大学子实力夺金!他说:“换了三次地方,从没离开过新区” https://m.voc.com.cn/xhn/news/202605/32691640.html +29 2026/05 学校举行校庆工作座谈会 https://news.hnu.edu.cninfo/1003/39617.htm +28 2026/05 我校汤素娥教授在中宣部召开的党的创新理论传播工程推进会上发言 https://news.hnu.edu.cninfo/1003/39613.htm +27 2026/05 “大文学观视域下的地方性写作”学术研讨会在我校举行 https://news.hnu.edu.cninfo/1003/39615.htm +27 2026/05 学习弘扬袁隆平科技创新精神暨杂交水稻高质量发展座谈会召开 https://news.hnu.edu.cninfo/1003/39611.htm +27 2026/05 电气院:首届“电启未来”科技文化节开幕式暨表彰大会召开 https://news.hnu.edu.cninfo/1007/39610.htm +27 2026/05 经贸院:学生获全国高校首届数字经济实践成果大赛总决赛一等奖 https://news.hnu.edu.cninfo/1007/39609.htm +26 2026/05 2026年校庆教职工羽毛球团体赛举行 https://news.hnu.edu.cninfo/1003/39606.htm +25 2026/05 “寻迹百年 定向未来” 湖南大学第十届定向运动大赛举行 https://news.hnu.edu.cninfo/1003/39601.htm +25 2026/05 科技园:被认定为湖南省标准型科技型企业孵化器 https://news.hnu.edu.cninfo/1007/39591.htm +22 2026/05 学校举行“弦歌湖大,银龄芳华”老年大学文艺汇演 https://news.hnu.edu.cninfo/1003/39587.htm +21 2026/05 校庆系列学术报告会丨汪寿阳:谈AI时代管理科学理论体系构建的几点思考 https://news.hnu.edu.cninfo/1004/39585.htm +21 2026/05 科技成果转化中心:高校区域技术转移转化中心(福建)来校调研 https://news.hnu.edu.cninfo/1007/39584.htm +21 2026/05 求是讲堂丨刘雁飞:从48V到0.6V/2000A:面向AI大算力芯片供电的范式革命与创新方向 https://news.hnu.edu.cninfo/1004/39583.htm +我国儿童福利兜底保障标准持续提高 https://news.cctv.com/2026/05/30/ARTIMyFUFP2jrQaWUUV11Mv3260530.shtml +商务部新闻发言人就欧委会开展对华关系讨论答记者问 https://news.cctv.com/2026/05/30/ARTIJQQ55dCkFV593hH1O7MU260530.shtml +多领域发布亮眼“成绩单” 经济发展积聚澎湃新动能 https://news.cctv.com/2026/05/30/ARTIjXm7AxuSthCd2kCrPi9j260530.shtml +未来五年城市更新如何推进?哪些产业面临新机会? https://news.cctv.com/2026/05/30/ARTIO2i3acP6uuDUKkQ58MPQ260530.shtml +这些行为涉嫌“数据犯罪” 国安最新提示 https://news.cctv.com/2026/05/30/ARTIWUt18wLwRiQGZkFVcbGU260530.shtml +树苗会“找水” AI听“鸟鸣” 生态修复技术“工具箱”上新 https://news.cctv.com/2026/05/30/ARTIZcTaJOXjE0BL18J5x0sR260530.shtml +多措并举保丰收 小麦主产区增强服务全力护航夏收 https://news.cctv.com/2026/05/30/ARTIH8FvtrPsx3apz8dEShR5260530.shtml +北京地铁开启双温车厢 多条线路站内空调将启动升级 https://news.cctv.com/2026/05/30/ARTI0ybw1kPtdK2IwiTMpcqx260530.shtml +多部新片陆续定档 业态创新激活电影消费 https://news.cctv.com/2026/05/30/ARTIT4dazAkkTroVVFcYomPo260530.shtml +呼和浩特一药店高价销售集采药 当地约谈主要负责人 https://news.cctv.com/2026/05/30/ARTIsDH8MafW83LNkAOGXmPX260530.shtml +AI使用方式进入智能体阶段 催生“词元经济”新产业链 https://tv.cctv.com/2026/05/30/VIDEkhbbyyqnn0q1dsyc4KHm260530.shtml +美军称将在霍尔木兹海峡附近开展军事行动 https://tv.cctv.com/2026/05/30/VIDEqx8agRpjJM8We6QR1Yy6260530.shtml +被判立即向俄央行赔偿约2000亿欧元 欧洲清算银行上诉 https://news.cctv.com/2026/05/30/ARTIemNb3OCiP3x8WXdq5V57260530.shtml +联合国:南苏丹阿科博地区数十万人面临灾难性饥饿 https://news.cctv.com/2026/05/30/ARTI95i4hp6YBO3swB2E84hJ260530.shtml +世界杯开幕在即 墨西哥三航司对非洲旅客实施限制措施 https://news.cctv.com/2026/05/30/ARTIBMD5sTV3oATKCorVfZvL260530.shtml +阿富汗卡车侧翻事故已致22人死亡 相关调查仍在进行 https://news.cctv.com/2026/05/30/ARTI0UwaJUJhd5NvOprSQSrb260530.shtml +小央视频 央视网原创视频子品牌,以更加贴近年轻人的视角,有趣、有料、有故事的方式解读时代。 https://v.cctv.com/xysp/index.shtml +全民健康 提高全民健康素养水平,助力“健康中国2030”战略。央视网《全民健康》,向所有人分享健康知识! https://edu.cctv.com/health/index.shtml +数字主播央视网小C 小C是总台央视网的一位数字主播,同时也是一位对世界充满好奇、开朗明媚、热爱国风的元气少女。 https://v.cctv.com/zixun/yswxc/index.shtml?spm=C90324.Pfdd0SYeqktv.Eri5TUDwaTXO.5 +超级工厂 深入挖掘中国品牌商业价值、探寻品牌数字化升级道路、为国货品牌装上快速成长的引擎。 https://business.cctv.com/special/cjgc/index.html +《比划》 原创短视频栏目,专注于解释热点,分享知识,阐述流行,让知识流动起来,回应年轻人的好奇心。 https://v.cctv.com/reping/bh/index.shtml +小央视频 央视网原创视频子品牌,以更加贴近年轻人的视角,有趣、有料、有故事的方式解读时代。 https://v.cctv.com/xysp/index.shtml +北京上空现飞机凌月景观 5月29日,北京,一架飞机从夜空中的月亮前飞过。 https://photo.cctv.com/2026/05/30/PHOAjh9P9cyIVQ1RQ7PzNLwZ260530.shtml +苏州北站改扩建工程夜以继日加紧建设5月29日,夜幕下的苏州高铁北站改扩建工地灯火通明,建设者挑灯攻坚、机械轮番作业。 https://photo.cctv.com/2026/05/30/PHOABwlapoi1ywg2459tnGsY260530.shtml +山西河津:麦田金黄绘就丰收图景5月30日,山西河津,黄汾百万亩粮食优质高产高效示范基地内,小麦陆续进入成熟收获期。 https://photo.cctv.com/2026/05/30/PHOAwyq0nmr1v444oHvRqT9E260530.shtml +雨后巫峡壮美如画夏日时节,长江巫峡一带雨后初霁,云海翻涌,奇峰林立,长江水道在云海中若隐若现,壮美如画。 https://photo.cctv.com/2026/05/30/PHOA3Rp3oPQqLOmraA2Rnriq260530.shtml +青岛港外贸集装箱码头繁忙5月29日,山东青岛港外贸集装箱码头一派繁忙景象,货轮在此装卸外贸集装箱。 https://photo.cctv.com/2026/05/30/PHOArnjFRvj2ZFOH3waKoTRv260530.shtml +新疆昌吉:牧场夏日绿意浓5月29日,新疆昌吉江布拉提草原绿意盎然,连绵雪峰与青青草甸相映成趣。 https://photo.cctv.com/2026/05/30/PHOAwdVrPtXf8sKVeMLa8ycR260530.shtml +湖北十堰:丹江口碧水映晴光5月30日,湖北十堰,初夏时节的丹江口,千岛错落,层峦凝黛。 https://photo.cctv.com/2026/05/30/PHOAUis4e828ICIutwIoBtq9260530.shtml +哈尔滨:夕照百年滨洲桥宛若电影胶片孟夏时节的傍晚,依偎在松花江臂弯里的百年滨洲桥,被落日晖光轻轻笼罩。 https://photo.cctv.com/2026/05/30/PHOAW75Hiq5qWQw7VN1nFDzX260530.shtml diff --git a/project/java-cli/pom.xml b/project/java-cli/pom.xml new file mode 100644 index 0000000..39e0eb1 --- /dev/null +++ b/project/java-cli/pom.xml @@ -0,0 +1,57 @@ + + 4.0.0 + com.example + datacollect-cli + 0.1.0 + + 11 + 11 + + + + org.jsoup + jsoup + 1.17.2 + + + ch.qos.logback + logback-classic + 1.4.11 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + + com.example.datacollect.Main + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + + diff --git a/project/java-cli/src.zip b/project/java-cli/src.zip new file mode 100644 index 0000000..51f1486 Binary files /dev/null and b/project/java-cli/src.zip differ diff --git a/project/java-cli/src/main/java/com/example/datacollect/Main.java b/project/java-cli/src/main/java/com/example/datacollect/Main.java new file mode 100644 index 0000000..bf4fa6f --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/Main.java @@ -0,0 +1,34 @@ +package com.example.datacollect; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.controller.CrawlerController; +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.strategy.StrategyFactory; +import com.example.datacollect.view.ConsoleView; + +public class Main { + private static final Logger logger = LoggerFactory.getLogger(Main.class); + + public static void main(String[] args) { + logger.info("Starting CLI Crawler application"); + + ConsoleView view = new ConsoleView(); + ArticleRepository repository = new ArticleRepository(); + StrategyFactory strategyFactory = new StrategyFactory(); + CrawlerController controller = new CrawlerController(view, repository, strategyFactory); + + view.printSuccess("Welcome to CLI Crawler (w10_3)! Type help for commands."); + logger.info("Application started successfully"); + + while (true) { + try { + controller.handle(view.readLine()); + } catch (Exception e) { + logger.error("Unexpected error in main loop", e); + view.printError("An unexpected error occurred: " + e.getMessage()); + } + } + } +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/command/Command.java b/project/java-cli/src/main/java/com/example/datacollect/command/Command.java new file mode 100644 index 0000000..029cadc --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/command/Command.java @@ -0,0 +1,8 @@ +package com.example.datacollect.command; + +import com.example.datacollect.repository.ArticleRepository; + +public interface Command { + String getName(); + void execute(String[] args, ArticleRepository repository); +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/command/CrawlCommand.java b/project/java-cli/src/main/java/com/example/datacollect/command/CrawlCommand.java new file mode 100644 index 0000000..3c790a5 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/command/CrawlCommand.java @@ -0,0 +1,113 @@ +package com.example.datacollect.command; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.exception.ParseException; +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.strategy.CrawlStrategy; +import com.example.datacollect.strategy.StrategyFactory; +import com.example.datacollect.view.ConsoleView; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.regex.Pattern; + +public class CrawlCommand implements Command { + private static final Logger logger = LoggerFactory.getLogger(CrawlCommand.class); + + private final ConsoleView view; + private final StrategyFactory strategyFactory; + private static final Pattern URL_PATTERN = Pattern.compile( + "^(https?://)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w.-]*)*(/?)$" + ); + private static final int MAX_RETRIES = 3; + private static final long RETRY_DELAY_MS = 2000; + + public CrawlCommand(ConsoleView view, StrategyFactory strategyFactory) { + this.view = view; + this.strategyFactory = strategyFactory; + } + + @Override + public String getName() { + return "crawl"; + } + + private boolean isValidUrl(String url) { + if (url == null || url.isEmpty()) { + return false; + } + if (!URL_PATTERN.matcher(url).matches()) { + return false; + } + try { + if (!url.startsWith("http://") && !url.startsWith("https://")) { + url = "http://" + url; + } + new URL(url); + return true; + } catch (MalformedURLException e) { + return false; + } + } + + @Override + public void execute(String[] args, ArticleRepository repository) { + if (args.length < 2) { + view.printError("Usage: crawl "); + return; + } + String url = args[1]; + + if (!isValidUrl(url)) { + view.printError("Invalid URL format: " + url); + return; + } + + if (!url.startsWith("http://") && !url.startsWith("https://")) { + url = "https://" + url; + } + + CrawlStrategy strategy = strategyFactory.getStrategy(url); + if (strategy == null) { + view.printError("No strategy found for: " + url); + return; + } + + view.printInfo("Crawling: " + url); + int retryCount = 0; + Exception lastException = null; + + while (retryCount < MAX_RETRIES) { + try { + Document doc = Jsoup.connect(url).get(); + var articles = strategy.parse(url, doc); + for (var article : articles) { + repository.add(article); + } + view.printSuccess("Crawled " + articles.size() + " articles."); + return; + } catch (ParseException e) { + view.printError("Parse error: " + e.getMessage()); + return; + } catch (Exception e) { + lastException = e; + retryCount++; + if (retryCount < MAX_RETRIES) { + view.printInfo("Retry " + retryCount + "/" + MAX_RETRIES + " in " + RETRY_DELAY_MS + "ms..."); + try { + Thread.sleep(RETRY_DELAY_MS); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + break; + } + } + } + } + + view.printError("Failed to crawl after " + MAX_RETRIES + " attempts: " + lastException.getMessage()); + } +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/command/ExitCommand.java b/project/java-cli/src/main/java/com/example/datacollect/command/ExitCommand.java new file mode 100644 index 0000000..21b83cc --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/command/ExitCommand.java @@ -0,0 +1,29 @@ +package com.example.datacollect.command; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.view.ConsoleView; + +public class ExitCommand implements Command { + private static final Logger logger = LoggerFactory.getLogger(ExitCommand.class); + + private final ConsoleView view; + + public ExitCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "exit"; + } + + @Override + public void execute(String[] args, ArticleRepository repository) { + logger.info("Exiting application"); + view.printSuccess("Bye!"); + System.exit(0); + } +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/command/HelpCommand.java b/project/java-cli/src/main/java/com/example/datacollect/command/HelpCommand.java new file mode 100644 index 0000000..e8c6db2 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/command/HelpCommand.java @@ -0,0 +1,36 @@ +package com.example.datacollect.command; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.view.ConsoleView; + +public class HelpCommand implements Command { + private static final Logger logger = LoggerFactory.getLogger(HelpCommand.class); + + private final ConsoleView view; + + public HelpCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "help"; + } + + @Override + public void execute(String[] args, ArticleRepository repository) { + logger.debug("Displaying help information"); + view.printInfo("Commands:"); + view.printInfo(" crawl - Crawl articles from the specified URL"); + view.printInfo(" c - Alias for crawl"); + view.printInfo(" list - List all crawled articles"); + view.printInfo(" save [file] - Save articles to file (default: articles.txt)"); + view.printInfo(" load [file] - Load articles from file (default: articles.txt)"); + view.printInfo(" history - Show command history"); + view.printInfo(" help - Show this help message"); + view.printInfo(" exit - Exit the application"); + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/command/HistoryCommand.java b/project/java-cli/src/main/java/com/example/datacollect/command/HistoryCommand.java new file mode 100644 index 0000000..2162e08 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/command/HistoryCommand.java @@ -0,0 +1,38 @@ +package com.example.datacollect.command; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.view.ConsoleView; + +import java.util.List; + +public class HistoryCommand implements Command { + private static final Logger logger = LoggerFactory.getLogger(HistoryCommand.class); + + private final ConsoleView view; + private final List history; + + public HistoryCommand(ConsoleView view, List history) { + this.view = view; + this.history = history; + } + + @Override + public String getName() { + return "history"; + } + + @Override + public void execute(String[] args, ArticleRepository repository) { + logger.debug("Displaying command history with {} entries", history.size()); + if (history.isEmpty()) { + view.printInfo("No command history."); + return; + } + for (int i = 0; i < history.size(); i++) { + System.out.println((i + 1) + ". " + history.get(i)); + } + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/command/ListCommand.java b/project/java-cli/src/main/java/com/example/datacollect/command/ListCommand.java new file mode 100644 index 0000000..aa0d882 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/command/ListCommand.java @@ -0,0 +1,28 @@ +package com.example.datacollect.command; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.view.ConsoleView; + +public class ListCommand implements Command { + private static final Logger logger = LoggerFactory.getLogger(ListCommand.class); + + private final ConsoleView view; + + public ListCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "list"; + } + + @Override + public void execute(String[] args, ArticleRepository repository) { + logger.debug("Listing {} articles", repository.size()); + view.display(repository.getAll()); + } +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/command/LoadCommand.java b/project/java-cli/src/main/java/com/example/datacollect/command/LoadCommand.java new file mode 100644 index 0000000..66ba3a2 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/command/LoadCommand.java @@ -0,0 +1,33 @@ +package com.example.datacollect.command; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.view.ConsoleView; + +public class LoadCommand implements Command { + private static final Logger logger = LoggerFactory.getLogger(LoadCommand.class); + private final ConsoleView view; + + public LoadCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "load"; + } + + @Override + public void execute(String[] args, ArticleRepository repository) { + String filePath = args.length > 1 ? args[1] : "articles.txt"; + try { + repository.loadFromFile(filePath); + view.printSuccess("Loaded " + repository.size() + " articles from " + filePath); + } catch (Exception e) { + view.printError("Failed to load: " + e.getMessage()); + logger.error("Failed to load articles from file", e); + } + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/command/SaveCommand.java b/project/java-cli/src/main/java/com/example/datacollect/command/SaveCommand.java new file mode 100644 index 0000000..f9af5f3 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/command/SaveCommand.java @@ -0,0 +1,33 @@ +package com.example.datacollect.command; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.view.ConsoleView; + +public class SaveCommand implements Command { + private static final Logger logger = LoggerFactory.getLogger(SaveCommand.class); + private final ConsoleView view; + + public SaveCommand(ConsoleView view) { + this.view = view; + } + + @Override + public String getName() { + return "save"; + } + + @Override + public void execute(String[] args, ArticleRepository repository) { + String filePath = args.length > 1 ? args[1] : "articles.txt"; + try { + repository.saveToFile(filePath); + view.printSuccess("Saved " + repository.size() + " articles to " + filePath); + } catch (Exception e) { + view.printError("Failed to save: " + e.getMessage()); + logger.error("Failed to save articles to file", e); + } + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/controller/CrawlerController.java b/project/java-cli/src/main/java/com/example/datacollect/controller/CrawlerController.java new file mode 100644 index 0000000..2342113 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/controller/CrawlerController.java @@ -0,0 +1,82 @@ +package com.example.datacollect.controller; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.command.Command; +import com.example.datacollect.command.CrawlCommand; +import com.example.datacollect.command.ExitCommand; +import com.example.datacollect.command.HelpCommand; +import com.example.datacollect.command.HistoryCommand; +import com.example.datacollect.command.ListCommand; +import com.example.datacollect.command.LoadCommand; +import com.example.datacollect.command.SaveCommand; +import com.example.datacollect.repository.ArticleRepository; +import com.example.datacollect.strategy.StrategyFactory; +import com.example.datacollect.view.ConsoleView; + +public class CrawlerController { + private static final Logger logger = LoggerFactory.getLogger(CrawlerController.class); + + private final Map commands = new HashMap<>(); + private final Map aliases = new HashMap<>(); + private final ConsoleView view; + private final ArticleRepository repository; + private final List history = new ArrayList<>(); + + public CrawlerController(ConsoleView view, ArticleRepository repository, StrategyFactory strategyFactory) { + this.view = view; + this.repository = repository; + register(new HelpCommand(view)); + register(new ListCommand(view)); + register(new CrawlCommand(view, strategyFactory)); + register(new SaveCommand(view)); + register(new LoadCommand(view)); + register(new ExitCommand(view)); + register(new HistoryCommand(view, history)); + registerAlias("c", "crawl"); + logger.info("CrawlerController initialized with {} commands", commands.size()); + } + + private void register(Command command) { + commands.put(command.getName(), command); + logger.debug("Registered command: {}", command.getName()); + } + + private void registerAlias(String alias, String commandName) { + aliases.put(alias, commandName); + logger.debug("Registered alias: {} -> {}", alias, commandName); + } + + public void handle(String input) { + String text = input == null ? "" : input.trim(); + if (text.isEmpty()) { + return; + } + + history.add(text); + logger.info("Received command: {}", text); + + String[] args = text.split("\\s+"); + String cmdName = args[0].toLowerCase(); + + if (aliases.containsKey(cmdName)) { + String originalCmd = cmdName; + cmdName = aliases.get(cmdName); + logger.debug("Resolved alias {} to command {}", originalCmd, cmdName); + } + + Command command = commands.get(cmdName); + if (command == null) { + view.printError("Unknown command: " + cmdName); + logger.warn("Unknown command received: {}", cmdName); + return; + } + command.execute(args, repository); + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/exception/CrawlerException.java b/project/java-cli/src/main/java/com/example/datacollect/exception/CrawlerException.java new file mode 100644 index 0000000..e81c3c9 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/exception/CrawlerException.java @@ -0,0 +1,11 @@ +package com.example.datacollect.exception; + +public class CrawlerException extends Exception { + public CrawlerException(String message) { + super(message); + } + + public CrawlerException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/exception/NetworkException.java b/project/java-cli/src/main/java/com/example/datacollect/exception/NetworkException.java new file mode 100644 index 0000000..0fb8e5e --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/exception/NetworkException.java @@ -0,0 +1,11 @@ +package com.example.datacollect.exception; + +public class NetworkException extends CrawlerException { + public NetworkException(String message) { + super(message); + } + + public NetworkException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/exception/ParseException.java b/project/java-cli/src/main/java/com/example/datacollect/exception/ParseException.java new file mode 100644 index 0000000..205665a --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/exception/ParseException.java @@ -0,0 +1,11 @@ +package com.example.datacollect.exception; + +public class ParseException extends CrawlerException { + public ParseException(String message) { + super(message); + } + + public ParseException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/model/Article.java b/project/java-cli/src/main/java/com/example/datacollect/model/Article.java new file mode 100644 index 0000000..978c641 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/model/Article.java @@ -0,0 +1,73 @@ +package com.example.datacollect.model; + +public class Article { + private String title; + private String url; + private String content; + private String author; + private String publishDate; + + public Article(String title, String url, String content) { + this.title = title; + this.url = url; + this.content = content; + } + + public Article(String title, String url, String content, String author, String publishDate) { + this.title = title; + this.url = url; + this.content = content; + this.author = author; + this.publishDate = publishDate; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getPublishDate() { + return publishDate; + } + + public void setPublishDate(String publishDate) { + this.publishDate = publishDate; + } + + @Override + public String toString() { + return "Article{" + + "title='" + title + '\'' + + ", url='" + url + '\'' + + ", author='" + author + '\'' + + ", publishDate='" + publishDate + '\'' + + '}'; + } +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/repository/ArticleRepository.java b/project/java-cli/src/main/java/com/example/datacollect/repository/ArticleRepository.java new file mode 100644 index 0000000..82b9659 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/repository/ArticleRepository.java @@ -0,0 +1,100 @@ +package com.example.datacollect.repository; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.example.datacollect.model.Article; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class ArticleRepository { + private static final Logger logger = LoggerFactory.getLogger(ArticleRepository.class); + private static final String DEFAULT_FILE = "articles.txt"; + + private final List
articles = new ArrayList<>(); + + public void add(Article article) { + if (article == null) { + logger.error("Attempted to add null article"); + throw new IllegalArgumentException("Article cannot be null"); + } + if (article.getTitle() == null || article.getTitle().isEmpty()) { + logger.warn("Article with empty title being added"); + } + if (article.getUrl() == null || article.getUrl().isEmpty()) { + logger.warn("Article with empty URL being added"); + } + articles.add(article); + logger.debug("Added article: {}", article.getTitle()); + } + + public List
getAll() { + logger.debug("Getting all articles, count: {}", articles.size()); + return Collections.unmodifiableList(articles); + } + + public int size() { + return articles.size(); + } + + public void clear() { + int count = articles.size(); + articles.clear(); + logger.info("Cleared {} articles from repository", count); + } + + public void saveToFile(String filePath) throws IOException { + if (articles.isEmpty()) { + logger.warn("No articles to save"); + throw new IOException("No articles to save"); + } + + String path = (filePath == null || filePath.isEmpty()) ? DEFAULT_FILE : filePath; + try (BufferedWriter writer = new BufferedWriter( + new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8))) { + for (Article article : articles) { + writer.write(article.getTitle()); + writer.write("\t"); + writer.write(article.getUrl() != null ? article.getUrl() : ""); + writer.write("\t"); + writer.write(article.getContent() != null ? article.getContent() : ""); + writer.write("\t"); + writer.write(article.getAuthor() != null ? article.getAuthor() : ""); + writer.write("\t"); + writer.write(article.getPublishDate() != null ? article.getPublishDate() : ""); + writer.newLine(); + } + logger.info("Saved {} articles to file: {}", articles.size(), path); + } + } + + public void loadFromFile(String filePath) throws IOException { + String path = (filePath == null || filePath.isEmpty()) ? DEFAULT_FILE : filePath; + File file = new File(path); + if (!file.exists()) { + logger.warn("File not found: {}", path); + throw new FileNotFoundException("File not found: " + path); + } + + articles.clear(); + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(new FileInputStream(path), StandardCharsets.UTF_8))) { + String line; + while ((line = reader.readLine()) != null) { + String[] parts = line.split("\t", -1); + if (parts.length >= 2 && !parts[0].isEmpty()) { + String title = parts[0]; + String url = parts.length > 1 ? parts[1] : ""; + String content = parts.length > 2 ? parts[2] : ""; + String author = parts.length > 3 ? parts[3] : ""; + String publishDate = parts.length > 4 ? parts[4] : ""; + articles.add(new Article(title, url, content, author, publishDate)); + } + } + logger.info("Loaded {} articles from file: {}", articles.size(), path); + } + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/strategy/BlogStrategy.java b/project/java-cli/src/main/java/com/example/datacollect/strategy/BlogStrategy.java new file mode 100644 index 0000000..da351f7 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/strategy/BlogStrategy.java @@ -0,0 +1,59 @@ +package com.example.datacollect.strategy; + +import com.example.datacollect.exception.ParseException; +import com.example.datacollect.model.Article; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; +import java.util.ArrayList; +import java.util.List; + +public class BlogStrategy implements CrawlStrategy { + @Override + public boolean supports(String url) { + return url.contains("blog.example.com"); + } + + @Override + public List
parse(String url, Document doc) throws ParseException { + List
articles = new ArrayList<>(); + Elements listItems = doc.select("ul.blog-list li"); + + for (Element li : listItems) { + Element link = li.selectFirst("a"); + if (link == null) continue; + + String articleUrl = link.attr("href"); + if (!articleUrl.startsWith("http")) { + if (articleUrl.startsWith("//")) { + articleUrl = "https:" + articleUrl; + } else if (articleUrl.startsWith("/")) { + articleUrl = "https://blog.example.com" + articleUrl; + } else { + articleUrl = "https://blog.example.com/" + articleUrl; + } + } + + String title = ""; + Element titleEl = link.selectFirst("h3.post-title"); + if (titleEl != null) { + title = titleEl.text().trim(); + } + if (title.isEmpty()) { + title = link.text().trim(); + } + + String content = ""; + Element contentEl = li.selectFirst("p.post-excerpt"); + if (contentEl != null) { + content = contentEl.text().trim(); + } + + if (!title.isEmpty()) { + articles.add(new Article(title, articleUrl, content)); + } + } + + return articles; + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/strategy/CCTVStrategy.java b/project/java-cli/src/main/java/com/example/datacollect/strategy/CCTVStrategy.java new file mode 100644 index 0000000..23e17a0 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/strategy/CCTVStrategy.java @@ -0,0 +1,49 @@ +package com.example.datacollect.strategy; + +import java.util.ArrayList; +import java.util.List; + +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import com.example.datacollect.exception.ParseException; +import com.example.datacollect.model.Article; + +public class CCTVStrategy implements CrawlStrategy { + @Override + public boolean supports(String url) { + return url.contains("cctv.com"); + } + + @Override + public List
parse(String url, Document doc) throws ParseException { + List
articles = new ArrayList<>(); + Elements listItems = doc.select("ul:not([class]) li"); + + for (Element li : listItems) { + Element link = li.selectFirst("a"); + if (link == null) continue; + + String articleUrl = link.attr("href"); + if (!articleUrl.startsWith("http")) { + if (articleUrl.startsWith("//")) { + articleUrl = "https:" + articleUrl; + } else if (articleUrl.startsWith("/")) { + articleUrl = "https://www.cctv.com" + articleUrl; + } else { + articleUrl = "https://www.cctv.com/" + articleUrl; + } + } + + String title = link.text().trim(); + String content = ""; + + if (!title.isEmpty() && title.length() > 10) { + articles.add(new Article(title, articleUrl, content)); + } + } + + return articles; + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/strategy/ChinaStrategy.java b/project/java-cli/src/main/java/com/example/datacollect/strategy/ChinaStrategy.java new file mode 100644 index 0000000..a818596 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/strategy/ChinaStrategy.java @@ -0,0 +1,47 @@ +package com.example.datacollect.strategy; + +import com.example.datacollect.exception.ParseException; +import com.example.datacollect.model.Article; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; +import java.util.ArrayList; +import java.util.List; + +public class ChinaStrategy implements CrawlStrategy { + @Override + public boolean supports(String url) { + return url.contains("china.com.cn"); + } + + @Override + public List
parse(String url, Document doc) throws ParseException { + List
articles = new ArrayList<>(); + Elements listItems = doc.select("ul:not([class]) li, ul.chinaWorld_txt li"); + + for (Element li : listItems) { + Element link = li.selectFirst("a"); + if (link == null) continue; + + String articleUrl = link.attr("href"); + if (!articleUrl.startsWith("http")) { + if (articleUrl.startsWith("//")) { + articleUrl = "https:" + articleUrl; + } else if (articleUrl.startsWith("/")) { + articleUrl = "https://www.china.com.cn" + articleUrl; + } else { + articleUrl = "https://www.china.com.cn/" + articleUrl; + } + } + + String title = link.text().trim(); + String content = ""; + + if (!title.isEmpty() && title.length() > 15) { + articles.add(new Article(title, articleUrl, content)); + } + } + + return articles; + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/strategy/CrawlStrategy.java b/project/java-cli/src/main/java/com/example/datacollect/strategy/CrawlStrategy.java new file mode 100644 index 0000000..ed69e19 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/strategy/CrawlStrategy.java @@ -0,0 +1,11 @@ +package com.example.datacollect.strategy; + +import com.example.datacollect.exception.ParseException; +import com.example.datacollect.model.Article; +import org.jsoup.nodes.Document; +import java.util.List; + +public interface CrawlStrategy { + List
parse(String url, Document doc) throws ParseException; + boolean supports(String url); +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/strategy/GmwStrategy.java b/project/java-cli/src/main/java/com/example/datacollect/strategy/GmwStrategy.java new file mode 100644 index 0000000..b9e0231 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/strategy/GmwStrategy.java @@ -0,0 +1,49 @@ +package com.example.datacollect.strategy; + +import java.util.ArrayList; +import java.util.List; + +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import com.example.datacollect.exception.ParseException; +import com.example.datacollect.model.Article; + +public class GmwStrategy implements CrawlStrategy { + @Override + public boolean supports(String url) { + return url.contains("gmw.cn"); + } + + @Override + public List
parse(String url, Document doc) throws ParseException { + List
articles = new ArrayList<>(); + Elements listItems = doc.select("ul.m_ulList li"); + + for (Element li : listItems) { + Element link = li.selectFirst("a"); + if (link == null) continue; + + String articleUrl = link.attr("href"); + if (!articleUrl.startsWith("http")) { + if (articleUrl.startsWith("//")) { + articleUrl = "https:" + articleUrl; + } else if (articleUrl.startsWith("/")) { + articleUrl = "https://www.gmw.cn" + articleUrl; + } else { + articleUrl = "https://www.gmw.cn/" + articleUrl; + } + } + + String title = link.text().trim(); + String content = ""; + + if (!title.isEmpty() && title.length() > 10) { + articles.add(new Article(title, articleUrl, content)); + } + } + + return articles; + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/strategy/HnuNewsStrategy.java b/project/java-cli/src/main/java/com/example/datacollect/strategy/HnuNewsStrategy.java new file mode 100644 index 0000000..59526e8 --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/strategy/HnuNewsStrategy.java @@ -0,0 +1,41 @@ +package com.example.datacollect.strategy; + +import com.example.datacollect.exception.ParseException; +import com.example.datacollect.model.Article; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; +import java.util.ArrayList; +import java.util.List; + +public class HnuNewsStrategy implements CrawlStrategy { + @Override + public boolean supports(String url) { + return url.contains("news.hnu.edu.cn"); + } + + @Override + public List
parse(String url, Document doc) throws ParseException { + List
articles = new ArrayList<>(); + Elements listItems = doc.select("ul.list3 li, ul.list6 li"); + + for (Element li : listItems) { + Element link = li.selectFirst("a"); + if (link == null) continue; + + String articleUrl = link.attr("href"); + if (!articleUrl.startsWith("http")) { + articleUrl = "https://news.hnu.edu.cn" + articleUrl.replace("..", ""); + } + + String title = link.text().trim(); + String content = ""; + + if (!title.isEmpty()) { + articles.add(new Article(title, articleUrl, content)); + } + } + + return articles; + } +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/strategy/NewsStrategy.java b/project/java-cli/src/main/java/com/example/datacollect/strategy/NewsStrategy.java new file mode 100644 index 0000000..17d4d6a --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/strategy/NewsStrategy.java @@ -0,0 +1,59 @@ +package com.example.datacollect.strategy; + +import com.example.datacollect.exception.ParseException; +import com.example.datacollect.model.Article; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; +import java.util.ArrayList; +import java.util.List; + +public class NewsStrategy implements CrawlStrategy { + @Override + public boolean supports(String url) { + return url.contains("news.example.com"); + } + + @Override + public List
parse(String url, Document doc) throws ParseException { + List
articles = new ArrayList<>(); + Elements listItems = doc.select("ul.news-list li"); + + for (Element li : listItems) { + Element link = li.selectFirst("a"); + if (link == null) continue; + + String articleUrl = link.attr("href"); + if (!articleUrl.startsWith("http")) { + if (articleUrl.startsWith("//")) { + articleUrl = "https:" + articleUrl; + } else if (articleUrl.startsWith("/")) { + articleUrl = "https://news.example.com" + articleUrl; + } else { + articleUrl = "https://news.example.com/" + articleUrl; + } + } + + String title = ""; + Element titleEl = link.selectFirst("h3.article-headline"); + if (titleEl != null) { + title = titleEl.text().trim(); + } + if (title.isEmpty()) { + title = link.text().trim(); + } + + String content = ""; + Element contentEl = li.selectFirst("p.article-summary"); + if (contentEl != null) { + content = contentEl.text().trim(); + } + + if (!title.isEmpty()) { + articles.add(new Article(title, articleUrl, content)); + } + } + + return articles; + } +} \ No newline at end of file diff --git a/project/java-cli/src/main/java/com/example/datacollect/strategy/StrategyFactory.java b/project/java-cli/src/main/java/com/example/datacollect/strategy/StrategyFactory.java new file mode 100644 index 0000000..188fb8e --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/strategy/StrategyFactory.java @@ -0,0 +1,39 @@ +package com.example.datacollect.strategy; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +public class StrategyFactory { + private static final Logger logger = LoggerFactory.getLogger(StrategyFactory.class); + + private final List strategies = new ArrayList<>(); + + public StrategyFactory() { + strategies.add(new HnuNewsStrategy()); + strategies.add(new BlogStrategy()); + strategies.add(new NewsStrategy()); + strategies.add(new CCTVStrategy()); + strategies.add(new GmwStrategy()); + strategies.add(new ChinaStrategy()); + logger.info("StrategyFactory initialized with {} strategies", strategies.size()); + } + + public CrawlStrategy getStrategy(String url) { + for (CrawlStrategy s : strategies) { + if (s.supports(url)) { + logger.debug("Found strategy {} for URL {}", s.getClass().getSimpleName(), url); + return s; + } + } + logger.warn("No strategy found for URL: {}", url); + return null; + } + + public void register(CrawlStrategy strategy) { + strategies.add(strategy); + logger.info("Registered new strategy: {}", strategy.getClass().getSimpleName()); + } +} diff --git a/project/java-cli/src/main/java/com/example/datacollect/view/ConsoleView.java b/project/java-cli/src/main/java/com/example/datacollect/view/ConsoleView.java new file mode 100644 index 0000000..b9fe7be --- /dev/null +++ b/project/java-cli/src/main/java/com/example/datacollect/view/ConsoleView.java @@ -0,0 +1,65 @@ +package com.example.datacollect.view; + +import com.example.datacollect.model.Article; +import java.util.List; +import java.util.Scanner; + +public class ConsoleView { + private static final String ANSI_RESET = "\u001B[0m"; + private static final String ANSI_GREEN = "\u001B[32m"; + private static final String ANSI_RED = "\u001B[31m"; + private static final String ANSI_BLUE = "\u001B[94m"; + private static final String ANSI_BG_DARK = "\u001B[40m"; + private static final String ANSI_WHITE = "\u001B[97m"; + private static final boolean DARK_MODE = true; + + private final Scanner scanner = new Scanner(System.in); + + public String readLine() { + if (DARK_MODE) { + System.out.print(ANSI_BG_DARK + ANSI_WHITE + "> " + ANSI_RESET); + } else { + System.out.print("> "); + } + return scanner.nextLine(); + } + + public void printSuccess(String msg) { + if (DARK_MODE) { + System.out.println(ANSI_BG_DARK + ANSI_GREEN + msg + ANSI_RESET); + } else { + System.out.println(ANSI_GREEN + msg + ANSI_RESET); + } + } + + public void printError(String msg) { + if (DARK_MODE) { + System.out.println(ANSI_BG_DARK + ANSI_RED + msg + ANSI_RESET); + } else { + System.out.println(ANSI_RED + msg + ANSI_RESET); + } + } + + public void printInfo(String msg) { + if (DARK_MODE) { + System.out.println(ANSI_BG_DARK + ANSI_BLUE + msg + ANSI_RESET); + } else { + System.out.println(ANSI_BLUE + msg + ANSI_RESET); + } + } + + public void display(List
articles) { + if (articles.isEmpty()) { + printInfo("暂无文章,请先执行 crawl。"); + return; + } + for (int i = 0; i < articles.size(); i++) { + Article a = articles.get(i); + if (DARK_MODE) { + System.out.println(ANSI_BG_DARK + ANSI_WHITE + (i + 1) + ". " + a.getTitle() + " | " + a.getUrl() + ANSI_RESET); + } else { + System.out.println((i + 1) + ". " + a.getTitle() + " | " + a.getUrl()); + } + } + } +} diff --git a/project/java-cli/src/main/resources/logback.xml b/project/java-cli/src/main/resources/logback.xml new file mode 100644 index 0000000..8211ef5 --- /dev/null +++ b/project/java-cli/src/main/resources/logback.xml @@ -0,0 +1,20 @@ + + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + logs/crawler.log + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/project/java-cli/target/classes/logback.xml b/project/java-cli/target/classes/logback.xml new file mode 100644 index 0000000..8211ef5 --- /dev/null +++ b/project/java-cli/target/classes/logback.xml @@ -0,0 +1,20 @@ + + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + logs/crawler.log + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/project/java-cli/target/maven-archiver/pom.properties b/project/java-cli/target/maven-archiver/pom.properties new file mode 100644 index 0000000..5c1de34 --- /dev/null +++ b/project/java-cli/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=datacollect-cli +groupId=com.example +version=0.1.0 diff --git a/project/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/project/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..86954b2 --- /dev/null +++ b/project/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,24 @@ +com\example\datacollect\command\ListCommand.class +com\example\datacollect\command\CrawlCommand.class +com\example\datacollect\strategy\GmwStrategy.class +com\example\datacollect\view\ConsoleView.class +com\example\datacollect\strategy\NewsStrategy.class +com\example\datacollect\strategy\ChinaStrategy.class +com\example\datacollect\command\Command.class +com\example\datacollect\command\SaveCommand.class +com\example\datacollect\exception\CrawlerException.class +com\example\datacollect\exception\NetworkException.class +com\example\datacollect\strategy\CrawlStrategy.class +com\example\datacollect\strategy\CCTVStrategy.class +com\example\datacollect\model\Article.class +com\example\datacollect\strategy\BlogStrategy.class +com\example\datacollect\command\LoadCommand.class +com\example\datacollect\repository\ArticleRepository.class +com\example\datacollect\Main.class +com\example\datacollect\command\ExitCommand.class +com\example\datacollect\command\HelpCommand.class +com\example\datacollect\command\HistoryCommand.class +com\example\datacollect\controller\CrawlerController.class +com\example\datacollect\strategy\StrategyFactory.class +com\example\datacollect\strategy\HnuNewsStrategy.class +com\example\datacollect\exception\ParseException.class diff --git a/project/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/project/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..eeac499 --- /dev/null +++ b/project/java-cli/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,24 @@ +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\command\SaveCommand.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\strategy\ChinaStrategy.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\exception\NetworkException.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\strategy\CrawlStrategy.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\strategy\NewsStrategy.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\exception\ParseException.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\command\Command.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\command\ExitCommand.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\command\LoadCommand.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\repository\ArticleRepository.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\command\CrawlCommand.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\Main.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\strategy\BlogStrategy.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\strategy\StrategyFactory.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\command\ListCommand.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\strategy\GmwStrategy.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\exception\CrawlerException.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\command\HistoryCommand.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\strategy\HnuNewsStrategy.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\view\ConsoleView.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\controller\CrawlerController.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\command\HelpCommand.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\model\Article.java +D:\ideaprojects java作业\IdeaProjects作业\java\project\java-cli\src\main\java\com\example\datacollect\strategy\CCTVStrategy.java diff --git a/project/java-cli/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/project/java-cli/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29