【python-词汇指标提取工具开发】自学笔记(1)-后端程序

1.终端与虚拟环境

  • base 和 venv 的区别(你经常看到 (venv) (base))

  • 为什么"装了包但 import 不到"

  • VS Code / PyCharm 运行时用的是哪个 Python

关键概念

  • 解释器路径:which python / which pip

  • 环境隔离:venv 里装的包只给这个工程用

  • 正确运行方式

    • 命令行:python -m src.xxx

    • VS Code:选择解释器为 venv/bin/python

现在的状态

✅ 已经能创建 venv、安装 pandas、MeCab,并能在终端跑通

⬆️ 还需要强化:解释器选择环境一致性

2.Python 包与导入机制

  • 为什么 python src/metrics/xxx.py 会找不到 src

  • 为什么 python -m src.metrics.xxx 可以

  • init.py 的作用

关键概念

  • 模块搜索路径:sys.path

  • :目录 + init.py

  • -m 的意义:把工程根目录当作包入口运行(更稳定)

现在的状态

✅ 已经知道要把 src 变成包

⬆️ 还需要:理解"相对导入/绝对导入"的规则与最佳实践

3. 路径与文件组织(工程化最核心)

需要搞清楚

  • 为什么要把 input/output/resources 分开

  • 为什么要用 Path() 而不是字符串

  • 为什么 Streamlit 上传文件要写进临时目录

关键概念

  • pathlib.Path:跨平台、可读性强

  • 相对路径 vs 绝对路径

  • BASE_DIR = Path(file).resolve().parents1 这种写法的意义(项目根目录定位)

现在的状态

✅ 已经按"工程结构"拆分好了文件夹

⬆️ 还需要:熟练处理"当前工作目录 (cwd)"导致的路径错误

4. 编码与文本预处理

需要搞清楚

  • 什么是 UTF-8 / UTF-8-sig / cp932 / shift-jis

  • 为什么 len(text) 很大但 MeCab token 只有 2(BOS/EOS)

  • 为什么 \x00(NUL)会让 MeCab "吃不到内容"

关键概念

  • bytes vs str

  • 解码策略:尝试多种编码,最后 replace 兜底

  • normalize_text:去 BOM、去 NUL、统一换行(放在 IO 层最合理)

现在的状态

✅ 已经有 io_utils.py 并把 normalize 做进 read_text_auto

⬆️ 还需要:知道"什么时候应该在 IO 层处理、什么时候在 NLP 层处理"

5. 数据结构:Token 设计

需要搞清楚

  • Token 里哪些字段是必须的:surface, lemma, pos, pos1, reading...

  • 为什么很多指标都依赖 lemma(类符)而不是 surface(形符)

  • pos(細分類)与 pos1(大分類)的区别

关键概念

  • 用 dataclass 表达 Token(类型清晰)

  • 统一 Token 字段命名,避免每个模块各写各的

现在的状态

✅ 已经能围绕 Token 写密度/多样性/难度/组合性

⬆️ 还需要:系统理解"字段一致性"对项目可维护性的影响

6. 指标计算的"可复用设计"

需要搞清楚

  • 为什么 4 个 metrics 文件要分开

  • 为什么要写成 compute_xxx(tokens, ...) -> dict

  • 为什么要把可变参数(阈值、OOV)作为函数参数,而不是写死路径

关键概念

  • 纯函数思维:输入 tokens,输出 dict(无副作用)

  • 参数化:threshold / treat_oov_as_low / shugo_map / freq_rank_map

  • 小工具函数:_is_punct, _filter_verbs 等

现在的状态

✅ 架构思路已经是"研究可复现"的写法

⬆️ 还需要:学会写更稳的异常处理(空文本、短文本、缺字段)

7.批处理与 DataFrame 合并输出(run_batch)

你需要搞清楚

  • 为什么要 row.update(...) 拼接 4 个 dict

  • 为什么把 file_name 放首列要做 cols = ...

  • 为什么输出用 utf-8-sig(Excel 兼容)

关键概念

  • listdict → DataFrame

  • 列顺序控制

  • 输出目录创建:mkdir(parents=True, exist_ok=True)

现在的状态

✅ 已经能把整套指标输出成一个 CSV

⬆️ 还需要:学习"日志/进度条"和"异常文件跳过策略"

8. Streamlit:把脚本变成小应用

需要搞清楚

  • 为什么要用 streamlit run xxx.py

  • Local URL vs Network URL 的区别

  • 上传文件是 bytes,需要你自己保存/解码/清洗

关键概念

  • UI 与计算分离:Streamlit 只负责交互,计算调用 run_batch.main

  • 临时目录:tempfile.TemporaryDirectory()

  • 研究者版 vs 学生版:显示层不同,计算层相同

现在的状态

✅ 已经把工程跑到可用 app 的阶段

⬆️ 还需要:会做基本的 UI 组织(expander、tabs、下载按钮、参数面板)

相关推荐
星辰徐哥几秒前
诗词大会AI:基于具身交互数字人技术的国风沉浸式古诗词智能赏析平台
人工智能·microsoft·交互·数字人·诗词大会
戈文波Geir-Wenbo Ge2 分钟前
深度七步×融合四级:每一步配哪级 AI
人工智能
初学大模型2 分钟前
基于影子层与边际收益约束的大语言模型推理加速方法
人工智能
专注仿真6 分钟前
TRAE Work 的实战
数据库·人工智能·分析
IanSkunk9 分钟前
视光中心信息化建设的关键问题与路径
大数据·人工智能
IT_陈寒16 分钟前
Redis的Lua脚本居然把我的集群搞崩了!
前端·人工智能·后端
tuanxiang16 分钟前
免费去 AI 生成痕迹的实操避坑指南
人工智能
陈年老古董18 分钟前
PyTorch 实现 MNIST 手写数字识别学习笔记
笔记·python·深度学习·学习
其实防守也摸鱼18 分钟前
智能体推荐:精选 AI Agent 工具与实战指南
运维·开发语言·人工智能·学习·web安全·自动化
always_TT18 分钟前
【Python 字符串格式化:format() 方法】
android·开发语言·python