阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。
术语表里有
API
,不代表文档中每一个包含这三个字母的单词都应该被替换。
APIs
是词形变化,
api_gateway
可能是代码标识符,中文术语又不能照搬英语单词边界。先找到候选,再决定是否翻译,比全局替换更稳妥。
每种语言需要自己的匹配约定
本文给出一个刻意保守的英语示例:独立的
API
忽略大小写匹配,字母、数字和下划线相邻时不匹配。这个约定不是自然语言的完整分词规则,也不负责复数、所有格或上下文消歧。
用接近但不该命中的字符串测试
import re
def english_candidates(text, term):
if not term:
raise ValueError("empty term")
pattern = re.compile(r"(?<!\w)" + re.escape(term) + r"(?!\w)", re.IGNORECASE)
return [(m.start(), m.end(), m.group()) for m in pattern.finditer(text)]
text = "API and api; APIs, rapid, api_gateway."
found = english_candidates(text, "API")
assert [item[2] for item in found] == ["API", "api"]
assert all(text[start:end] == raw for start, end, raw in found)
assert english_candidates("api_gateway", "API") == []
assert english_candidates("APIs", "API") == []
assert english_candidates("(API)", "API")[0][2] == "API"
try:
english_candidates(text, "")
except ValueError:
pass
else:
raise AssertionError("empty glossary term accepted")
匹配候选不是替换命令
代码保留位置和原文,不直接修改文本。这样审校能区分正文、链接和代码区域,也能看到是否应该保留原词。HTML 或 Word 里的候选位置还需要映射到结构节点,不能只拿整篇拼接字符串的位置回写原文。
场景
本例选择
进一步策略
独立 API
作为候选
按术语表和上下文审查
APIs
不匹配
明确维护词形规则
api_gateway
不匹配
标识符一般受保护
中文术语
不声称覆盖
采用适合中文的分词或规则
大小写不敏感也有边界
Unicode 大小写和语言习惯并不总是简单的一一对应。本文面向简单英语术语,不应推广成所有语言都正确的术语识别器。大型术语表还需解决重叠候选、最长匹配和版本管理,避免同一段落反复产生冲突建议。
让术语表成为可核对的约定
OmniDoc(产品入口)
官网介绍了术语表功能。评估时可以选取含正文、代码标识符与词形变化的脱敏样本,对照译稿看术语是否落在正确语境。术语表的价值不是机械替换更多词,而是让团队的用词约定更稳定。
参考:
Python re
。
- 1 -
更新于 2026-10-08