## 提前声明 由于我的方向更偏自然语言处理,所以这篇文章只能分享下我认为从事语料库语言学方向,对 Python 的要求中和「术」相关的资料,主要以怎么写代码为主。 但是,这个方向的代码对统计思想和日语本质的理解的要求更高,也就是「道」,即「如何」想到该「怎么」写 Python 代码来验证自己的观点,这个方向我就不信口开河了,只推荐一篇很不错的知乎回答: [[文科生想自学一点统计学,看哪些入门书籍比较好?]] <https://www.zhihu.com/question/19820500/answer/13098620> 虽然没有专门谈到日语,但也还是强烈推荐读读,剩下就靠大家自己摸索啦,也很期待大家的分享! 接下来就是正文啦。 ## 入门书籍 首先,推荐[[王垠]]老师的[[如何掌握所有的程序语言]] <https://www.yinwang.org/blog-cn/2017/07/06/master-pl> 这篇文章非常适合才开始学编程的人,可以帮助建立如何「正确」地学「编程」的认知。 入门学习材料的话,可以先看我的系列博客合集[[面向日语专业的 Python 自学&考证指北]],重点看看[[北理工 Python 语言程序设计]]就好,其他大家应该用不上。 至于 Python 方向的入门书籍,除了上面博客提到的那本教材,也可以读读大名鼎鼎的绿皮书[[《Python 编程:从入门到实践》]]。 至于国内出版的其他(尤其是中国人写的) Python 入门书还是算了,都不怎么样。 特别是 DeepSeek 火了之后,又冒出来一大堆垃圾教材,可能是因为赶时间,这类垃圾教材基本不提供配套视频,更有甚者连完整源代码都不给,看到这类教材直接丢垃圾桶就好。 但强烈推荐读读[[朱雷]]老师的[[《Python 工匠》]],具体书评可以参考[[Python 工匠:如何写出优秀的 Python 代码]]。由于并不算是严格意义上的入门教材,第一次读可以忽略具体的 Python 代码,花半天时间过一遍,建立对「什么是好的 Python 代码」和「什么是垃圾」的感觉就行,之后有空拿出来多翻翻。 P.S. 如果只是搞学术研究,面向对象相关部分完全可以跳过,因为学术研究的代码一般用不上那里谈的技巧,但最后的「单元测试」部分最好认真读一下,而且最好动手用 unittest 写点单元测试,马上会解释这么建议原因。 [[《Python日语数字人文之语料库语言学技术及其应用》]] 由于这本书出版的时候,我已经来日本了,而且和我的方向也不太一致,所以我只看了目录,但感觉对(日语)语料库语言学方向的同学会有很大帮助。 ## 深入 如果读完上面还觉得意犹未尽,也可以关注下我的读书记录: <https://booklog.jp/users/39094f3f2e68946a>我在日本旧书店和图书馆闲逛时,碰到有意思的书都会扫码记录下来,但主要以 Python 后端和自然语言处理为主,大家有空看眼就好233 如果有兴趣,也可以看看我的相关博客:[[我的日语 NLP 书单]]和[[我的 NLP 书单]]。 ## 面向单元测试学编程 如果是第一次学编程,最开始的1个月可以多花点时间看书,之后就尽量多花时间「改」代码吧。 「改」代码是指:先拿中文清晰准确地写清楚自己的要求,并提供「单元测试用例」——很多时候单纯描述容易产生误解,但有测试用例,GPT 往往能准确理解到底想要啥。然后,验证 GPT 生成的代码是否真的通过了「单元测试」,没通过的话,把报错丢给GPT,让它改。通过的话,就可以继续提要求了。一定要小心,GPT 往往会违反要求偷偷修改一些不该改的地方,如果没有单元测试,这个时候很容易变成「新需求还没实现,新问题倒是出现了」的尴尬局面。 另外,实际研究中,如果自己爬数据,经常要写复杂的 pipline,但写这种东西基本不可能一蹴而就,要反复修改代码。如果没有单元测试,这个时候也很容易出现「本来的问题还没解决,又出现新问题了」的尴尬局面。 而且,不少研究项目往往横跨数月乃至数年,没有单元测试的话,几个月之后再看自己当初写的代码,可能真的会觉得「这啥玩意儿啊,与其修修补补,不如推了重写」(别问我为什么知道,过几年大家就懂了233)。 好吧,估计有同学已经猜到了,上面的观点总结成一句话就是「测试驱动开发」。 虽然网上关于这个方法的评价两极分化,而且这个东西讲给纯小白确实稍微早了点,但作为一个(曾经)完全不写单元测试的过来人,真心建议早点了解这个东西,因为这真的能帮大家少走很多弯路(当初要有人告诉我这个就好了,唉…)。 不过入门阶段没有必要专门看关于测试驱动开发理论的书,记住「写代码的时候,也尽量抽空写下单元测试」就行了。 ## 适合阅读的 Python 入门项目 本来是想标题党一把,写成「适合读源代码的项目」,但我怕「源代码」这三个字直接把大家吓跑了。(笑) 不要紧张,推荐的都是和日语息息相关的「小」项目。 [[石川慎一郎老师的词频生成工具]] <https://bit.ly/EJWFTG2> 用 Python 调 Mecab 写了一个非常实用的小工具,大家应该能用上。 [Pythonで 日本語処理 入門 〜フリガナプログラムを作ろう〜](https://2024.pycon.jp/ja/talk/BQXVWE) 这个用的不是(学术研究常用的)Mecab,而是(工业界常用的)Sudachi。作为入门教程,写的真的非常好——思路清晰,详略得当,涉及的内容难度也恰到好处。不过标注读音的那部分可能稍微有点难,可以先收藏起来,哪天用到了再看也行。我在看到这个之前,花了周末整整两天才搓出个一样的轮子。大致思路倒不难,但要跑通所有单元测试就很花时间了。 ^bbc68a 接下来就是「真・源代码」级别的项目了。 从单元测试开始看起,一个方法一个方法地调试、理解,其实「读源码」真的没有想象中那么难,而且完全吃透一个「好」项目的源代码,对提升编程能力真的有很大帮助。 [jaconv](https://github.com/ikegami-yukino/jaconv/tree/master): 如果你用爬虫构建过日语语料库,那说不定就是用的这个来清洗文本,但有没有想过调用的那些函数是怎么实现的呢?有兴趣的话,去读读这个项目的源码吧。这个库出自专业工程师之手,优秀的架构设计+简洁的代码实现+完善的注释和测试,作为读源码的新手村任务再好不过了。 ^3116bc [nonjishokei](https://github.com/NoHeartPen/dev-pynonjishokei):基于词法学理论,专为辞典检索设计的轻量形态素解析器——好吧,不装了,这其实是我写的项目,[[非辞書]]•[[三重樱]]版本的 Python 实现。看一眼[单元测试](https://github.com/NoHeartPen/dev-pynonjishokei/blob/main/tests/test_main.py),大家就知道这个项目在干啥了。 但要提醒下,这个项目的重点不在 Python 上,而在于对日语语法和词法学(全面而深刻)的理解——在电脑上跑下==所有==单元测试,大家就知道我为什么这么说(大放厥词)了。对词法学有兴趣的话,可以认真读读这个项目,但好像对语料库语言学研究确实没什么帮助……好好好,我承认我就是在夹带私货,但如果哪天大家要处理青空文库了,[test_preprocess](https://github.com/NoHeartPen/dev-pynonjishokei/blob/main/tests/test_preprocess.py)应该有点帮助。 如果读完上面的项目还意犹未尽,可以读读我的博客[[值得读源码的 Python 项目]],或者也可以去我收藏夹里的 Python 和 NLP 分类逛逛: <https://github.com/NoHeartPen?tab=stars> 最后、ようこそ Python の世界へ、Happy Coding🍻! ## 留言讨论 你可以通过[这里](https://github.com/NoHeartPen/NoHeartPen.github.io/issues/9)留言讨论。