OpenNMT-py字符串转路径方法及Colab长路径简化问询
没问题,这两个需求都很容易解决,我来一步步给你讲清楚:
解决方案
1. 在Colab中简化OpenNMT-py命令的路径写法
你期望直接在!开头的shell命令里用Python字符串拼接的方式是行不通的(因为!执行的是shell命令,不是Python代码),不过我们有两种更简洁的替代方案:
方法一:使用Shell环境变量
先定义一个Shell级别的路径变量,之后在命令里直接引用即可,能避免重复写长路径:
# 定义Shell路径变量(注意用双引号包裹带空格的路径) export DATA_ROOT="/content/drive/My Drive/Colab Notebooks/NLP/spring99/CA6/Corpora/En2Fa-Translation/" # 执行OpenNMT预处理命令,直接用$引用变量 !onmt_preprocess \ -train_src $DATA_ROOT/train.en \ -train_tgt $DATA_ROOT/train.fa \ -valid_src $DATA_ROOT/dev.en \ -valid_tgt $DATA_ROOT/dev.fa \ -save_data $DATA_ROOT/demo/
方法二:结合Python变量与Colab的Shell注入
如果习惯用Python管理变量,Colab支持直接把Python变量注入到shell命令中,用{变量名}包裹即可:
# 定义Python路径变量(这里不用转义空格,Python会自动处理) data_root = "/content/drive/My Drive/Colab Notebooks/NLP/spring99/CA6/Corpora/En2Fa-Translation/" # 在shell命令中直接引用Python变量,自动完成路径拼接 !onmt_preprocess \ -train_src {data_root}train.en \ -train_tgt {data_root}train.fa \ -valid_src {data_root}dev.en \ -valid_tgt {data_root}dev.fa \ -save_data {data_root}demo/
2. OpenNMT-py中字符串转路径的规范处理
如果是用Python代码调用OpenNMT-py的API(而非命令行),推荐使用Python内置的pathlib模块来处理路径,它能把字符串路径转换成更易用的Path对象,自动适配不同系统的路径分隔符,还支持便捷的路径拼接:
from pathlib import Path import onmt # 将字符串路径转为Path对象 data_root = Path("/content/drive/My Drive/Colab Notebooks/NLP/spring99/CA6/Corpora/En2Fa-Translation/") # 用/运算符直接拼接子路径,比字符串+更安全 train_src = data_root / "train.en" train_tgt = data_root / "train.fa" # 在OpenNMT-py的API中使用时,只需转成字符串即可 preprocess_config = onmt.utils.parse.PreprocessOptions( train_src=str(train_src), train_tgt=str(train_tgt), valid_src=str(data_root / "dev.en"), valid_tgt=str(data_root / "dev.fa"), save_data=str(data_root / "demo/") )
如果是命令行方式,其实不需要特意做“字符串转路径”的操作——只要你传入的字符串路径是合法的(比如处理好空格、路径分隔符),OpenNMT-py底层会自动把它解析为路径对象处理。
内容的提问来源于stack exchange,提问作者zana saedpanah
相关产品推荐
相关产品推荐

