Ordet:Ordet 实操全指南:从零掌握这个“句子级”文本处理工具
学完本文,你将能够独立用 Ordet 完成文本的批量拆分、重组、条件过滤与格式转换,解决日常脚本中“按句处理”的痛点,不再依赖笨重的正则或手工复制粘贴。
---

# 第一步:安装与启动 Ordet
1. 确认环境:Ordet 要求 Python 3.9+,且仅支持 Linux/macOS(Windows 可用 WSL)。在终端输入 `python3 --version` 检查版本。
2. 安装:执行 `pip install ordet-cli`。若提示权限问题,加 `--user` 或使用虚拟环境(`python3 -m venv venv && source venv/bin/activate`)。
3. 验证:输入 `ordet --version`,若输出类似 `ordet 0.4.2` 即成功。若报错 `command not found`,检查 Python 的 Scripts 目录是否在 PATH 中。
---
# 第二步:准备输入文本与理解核心概念
1. 输入文件:Ordet 默认处理纯文本文件(UTF-8)。创建一个 `sample.txt`,内容示例:
```
第一句。第二句!第三句?这是第四句,但带逗号。第五句:带冒号。
```
2. 核心概念:Ordet 以“句子”为最小处理单元。它内置了中英文句号、感叹号、问号、分号作为默认断句符,但不会因逗号或冒号断句。所有操作都是“按句子”进行,而不是按行。
3. 查看默认行为:运行 `ordet split sample.txt`,终端会逐行输出每个句子(每句独立一行),验证它是否正确把上述文本切成了5句。
---
# 第三步:基础操作——拆分与合并
1. 按句子拆分到新文件:`ordet split sample.txt -o sentences.txt`。生成的文件每行一句,便于后续逐句处理。
2. 按指定标点拆分:若想只按问号拆分,用 `-d "?"`:`ordet split sample.txt -d "?" -o only_questions.txt`。注意 `-d` 参数会覆盖默认断句符,需手动包含所需标点(如 `-d "。?!"`)。
3. 合并句子:`ordet join sentences.txt -o merged.txt`,默认用空格连接。若要自定义连接符(如用逗号),加 `-j ","`:`ordet join sentences.txt -j "," -o merged_comma.txt`。
---
# 第四步:过滤与条件操作(核心功能)
1. 按长度过滤:只保留超过5个字符的句子:`ordet filter --min-len 5 sample.txt -o long_sentences.txt`。`--max-len` 同理。
2. 按关键词过滤:保留包含“风险”的句子:`ordet filter --contains "风险" sample.txt -o risk_sentences.txt`。支持多个关键词,用 `--contains "风险" --contains "收益"`(逻辑为 AND)。
3. 按正则过滤:使用 `--regex` 参数,例如保留含数字的句子:`ordet filter --regex "[0-9]" sample.txt -o has_digits.txt`。正则按 Python 语法。
4. 排除操作:加 `--invert` 反向过滤,如 `ordet filter --contains "风险" --invert sample.txt` 会输出所有不含“风险”的句子。
---
# 第五步:批量处理与格式转换
1. 处理多个文件:`ordet split file1.txt file2.txt -o output_dir/`。注意输出路径必须是目录(以 `/` 结尾),Ordet 会为每个输入文件生成同名输出文件。
2. 转换分隔符:将句号换成换行符:`ordet replace "。" "\n" sample.txt -o replaced.txt`。`replace` 是全局替换,可作用于整个文本。
3. 输出为 JSON:`ordet split sample.txt --json -o output.json`。每条句子变成 JSON 数组中的一个元素,便于后续程序解析。
4. 统计句数:`ordet count sample.txt` 直接输出句子总数。加 `-l` 可同时统计每句字数。
---
# 第六步:脚本化与自动化
1. 在 Python 中调用:Ordet 提供 Python API。在脚本中:
```python
from ordet import split_text, filter_sentences
sentences = split_text(open("sample.txt").read())
filtered = filter_sentences(sentences, min_len=5, contains="风险")
```
2. 管道组合:在 shell 中串联操作,如:
```bash
cat sample.txt | ordet split | ordet filter --min-len 3 | ordet join -j " | "
```
注意 `ordet join` 默认从标准输入读取逐行内容作为句子。
3. 定时任务:写一个 `.sh` 脚本,每天对日志文件执行 `ordet filter --regex "ERROR"` 并输出到新文件,再用 crontab 调度。
---
# 第七步:常见坑与规避建议
1. 坑:断句符漏了分号。默认断句符只含 `.?!`,不含分号。如果你的文本用分号分隔逻辑子句,必须显式加 `-d "。?!;"`,否则会合并成一句。
2. 坑:中文引号内的句号被误断。Ordet 不识别引号配对,`“他说。好。”` 会被拆成两句。解决办法:预处理时用 `replace` 将引号内的句号替换为临时占位符(如 `@@`),处理后再替换回来。
3. 坑:`--contains` 区分大小写。要忽略大小写,用 `--ignore-case` 参数(部分版本支持,请先 `ordet filter --help` 确认)。
4. 坑:输出路径是目录时不会自动创建。务必先 `mkdir -p output_dir`,否则报错。
5. 坑:大文件内存占用。Ordet 默认一次性读入整个文件,处理超过 100MB 的文件可能卡死。建议先用 `split` 或 `head` 切分文件,或改用流式参数 `--stream`(若版本支持)。
---
结尾:最后记住,Ordet 的精髓在于“句子即单元”——一切操作围绕句子展开,不要试图用行处理思维去套用。遇到奇怪结果时,先用 `ordet split` 看看它到底怎么断句,再调整断句符。别忘记测试小样本再上生产数据。
