互联网+《周易》:我在 github 学算卦 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
larryzhu9952

互联网+《周易》:我在 github 学算卦

  •  
  •   larryzhu9952 2024 年 5 月 13 日 3268 次点击
    这是一个创建于 712 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    《周易》乃周文王姬昌所作,是中国传统思想文化中自然哲学与人文实践的理论根源,是古代汉民族思想、智慧的结晶,被誉为“大道之源”。内容极其丰富,对中国几千年来的政治、经济、文化等各个领域都产生了极其深刻的影响。

    像这种千古奇书,每个中国人都应该读一读,一是因为这是老祖宗的智慧,我们不能丢弃;二是因为《周易》蕴含宇宙人文的运行规律,浅读可修身养性,熟读可明自我,深究可知未来,参透就可知天命了。

    东汉著名史学家、文学家班固在《汉书艺文志》中提出《周易》的成书是:人更三圣,世历三古

    那么在哪里才可以读到呢?

    其实易经的完本在网上随便就可以找到,但是都不适合在摸鱼的时候读 (!),打开花花绿绿或者神神叨叨的小网站,你的 leader 肯定一眼就看出你在摸鱼。

    既然没有这种网站,那干脆自己做一个。

    vitePress + github pages 快速搭建

    vitePress 快速开始

    pnpm add -D vitepress 
    pnpm vitepress init 

    填写完 cli 里的几个问题,项目就可以直接运行了。可以看到网站直接解析了几个 示例的 md 文件,非常的神奇。

    处理《周易》文本

    那么哪里才可以找到《周易》的 markdown 版本呢,找了一圈也没有找到,最后找到了一个 txt 的,我觉得写个脚本转换一下。

    首先,我拿 vscode 的正则给每个标题加上井号,使其成为一级标题

    QQ2024511-183935.webp

    此时,所有的标题都被改成了 md 格式的一级标题,然后直接将后缀名从 .txt 改为 .md 即可。

    看过 vitepress 的文档并经过实操后发现,它的目录是一个一个的小 markdown 文件组成的,而单个 markdown 内的标题等在右侧显示

    image.png

    那么此时就需要把《周易》完本,按照六十四卦分为六十四个 md 文件。

    我写了一个 node 脚本:

    const fs = require('fs'); // 读取 zhouyi.md 文件 fs.readFile('zhouyi.md', 'utf8', (err, data) => { if (err) { console.error('读取文件出错:', err); return; } // 按一级标题进行分割 const sectiOns= data.split('\n# '); // 循环处理每个一级标题的内容 sections.forEach((section, index) => { // 提取标题和内容 const lines = section.split('\n'); const title = lines[0]; const cOntent= lines.slice(1).join('\n'); // 写入到单独的文件中 const fileName = `zhouyi_${index + 1}.md`; fs.writeFile(fileName, `# ${title}\n\n${content}`, err => { if (err) { console.error(`写入文件 ${fileName} 出错:`, err); } else { console.log(`已创建文件: ${fileName}`); } }); }); }); 

    取名为 md-slicer.js ,在控制台输入

    node md-slicer.js 

    即可生成

    image.png

    然后写一个在 .vitepress/config.mtssidebar的生成函数:

    let itemsLength = 64 function getSidebar() { let items: {}[] = [{ text: '《周易》是什么?', link: '/what.md' }] for (let i = 1; i <= itemsLength; i++) { items.push({ text: `第${numberToChinese(i)}卦`, link: `/zhouyi_${i}.md` }) } return items } 

    numberToChinese 函数用来将阿拉伯数字转为中文数字,因为周易只有六十四卦,所以不用考虑很多,够用即可

    // numberToChinese function numberToChinese(number) { const chineseNumbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; const chineseUnits = ['', '十', '百', '千', '万', '亿']; // 将数字转换为字符串,以便于处理每一位 const numStr = String(number); let result = ''; let zeroFlag = false; // 用于标记是否需要加上“零” for (let i = 0; i < numStr.length; i++) { const digit = parseInt(numStr[i]); // 当前位的数字 const unit = chineseUnits[numStr.length - i - 1]; // 当前位的单位 if (digit !== 0) { if (zeroFlag) { result += chineseNumbers[0]; // 如果前一位是零,则在当前位加上“零” zeroFlag = false; } result += chineseNumbers[digit] == "一" && unit == "十" ? unit : chineseNumbers[digit] + unit; // 加上当前位的数字和单位,当一十时,省略前面的一 } else { zeroFlag = true; // 如果当前位是零,则标记为需要加上“零” } } return result; } 

    然后,设置一下 vitepress 基础配置和打包输出路径

    export default defineConfig({ title: "周易", description: "周易", base: "/thebookofchanges/", head: [ ['link', { rel: 'icon', href: 'yi.svg' }] // 这里是你的 Logo 图片路径 ], outDir: 'docs', // 输出到 docs ,可以直接在 github pages 使用 themeConfig: { // https://vitepress.dev/reference/default-theme-config nav: [ { text: '首页', link: '/' }, { text: '阅读', link: '/zhouyi_1.md' } ], logo: '/yi.svg', sidebar: [ { text: '目录', items: getSidebar() } ], socialLinks: [ { icon: 'github', link: 'https://github.com/LarryZhu-dev/thebookofchanges' } ] } }) 

    然后简单给网站设计一个 logo

    image.png

    字体是华文隶书,转化为路径后,将它拉瘦一点,再导出为 svg 。

    最后,用 pnpm run docs:build打包即可,打包时注意设置基本路径为 github pages 的仓库名。

    发布

    push 到 github 后,在 Setting/Pages 页面发布即可。

    image.png

    效果预览

    最后,网站运行在:https://larryzhu-dev.github.io/thebookofchanges/

    image.png

    image.png

    仓库地址:https://github.com/LarryZhu-dev/thebookofchanges 来点 star

    结语

    现在只有简单的原文,如有 《周易》大佬,欢迎大佬提交注解 PR 。

    14 条回复    2024-05-14 23:55:18 +08:00
    lingeo
        1
    lingeo  
       2024 年 5 月 13 日
    领人迷惑的项目。
    bzj
        2
    bzj  
       2024 年 5 月 13 日
    这种项目有 star 的必要吗
    hero1874
        3
    hero1874  
       2024 年 5 月 13 日
    额,就像二手玫瑰上歌手 2024
    WonderCc
        4
    WonderCc  
       2024 年 5 月 13 日
    额,跟之前那个算命的相比还是差了些
    outbound4651
        5
    outbound4651  
       2024 年 5 月 13 日
    我还以为你整个卦象图出来了呢。原来你自己都不看不懂,那搞个纯古文有什么意义?
    biutcoder
        6
    biutcoder  
       2024 年 5 月 13 日
    赛博算卦+AI 解卦,命运的骰子攥在自己手里
    larryzhu9952
        7
    larryzhu9952  
    OP
       2024 年 5 月 13 日
    @SawyerGuo 嗨,学习学习罢了,佬看一乐
    vialon17
        8
    vialon17  
       2024 年 5 月 13 日
    医、数、卜、相、命理、风水一个都没有,
    只看易是看不懂的。
    Jaeger
        9
    Jaeger  
       2024 年 5 月 13 日
    牛 B 感谢分享
    WebKit
        10
    WebKit  
       2024 年 5 月 13 日
    搞个 AI 算命把
    2P99RQ7o4Lds0GaI
        11
    2P99RQ7o4Lds0GaI  
       2024 年 5 月 14 日
    会算命的人可以用我的这个日历,懂得人都懂 https://apps.apple.com/cn/app/%E9%92%A6%E5%A4%A9/id1619353073?platform=iphone
    pythoner
        12
    pythoner  
       2024 年 5 月 14 日
    我自己用小六壬,给自己断一些事情,非常的准
    jthoney
        13
    jthoney  
       2024 年 5 月 14 日
    @1mayi
    下载了 不会用.
    2P99RQ7o4Lds0GaI
        14
    2P99RQ7o4Lds0GaI  
       2024 年 5 月 14 日 via iPhone
    @jthoney 会周易的人才能体会到作用
    关于     帮助文档     自助推广系统     博客     API     FAQ   &nbp; Solana     2992 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 74ms UTC 02:03 PVG 10:03 LAX 19:03 JFK 22:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86