QA 检查 - 高级正则表达式检查
高级QA检查是基于正则表达式的QA检查,并且支持多条规则检查,因此高级QA检查需要设计为支持序列化,可以导出和导入QA检查设置。
下面简要定义了一个RegExRule类以及8中匹配模式的枚举
using System.Xml.Serialization;
namespace besteasy.NextCat.Verification.RegExRule
{
[Serializable]
public class RegExRule
{
public string Description {get;set;}
public bool IgnoreCase {get;set;}
public string RegExSource {get;set;}
public string RegExTarget {get;set;}
//Enum RuleCondition
public RegExConditionTypes RuleCondition {get;set}
}
//枚举8种匹配模式
public enum RegExConditionTypes
{
TargetAndSource,
TargetNotSource,
SourceNotTarget,
SourceOnly,
TargetOnly,
DifferentCount,
GroupedSourceNotTarget,
GroupedTargetAndSource
}
}
匹配模式
- TargetAndSource
如果在原文句段和译文句段中找到该格式,则报告 - TargetNotSource
如果仅在译文句段而非原文句段中找到该格式,则报告 - SourceNotTarget
如果仅在原文句段而非译文句段中找到该格式,则报告 - SourceOnly
仅检查原文句段的格式,不检查译文句段的格式。若在原文句段中找到格式,则报告 - TargetOnly
仅检查译文句段的格式,不检查原文句段的格式。若在译文句段中找到格式,则报告 - DifferentCount
如果在原文句段和译文句段中找到该格式的数量不一致
(在规则1的基础上增加了数量限制) - GroupedSourceNotTarget
分组搜索表达式 - 使用原文 RegEx 中指定组的反向引用来构建译文表达式中的字符串,以搜索译文句段。若译文不包含正确的字符串,则报告
注: 译文 RegEx 不能包含任何特殊的转义字符,而且完全作为用于 .NET RegEx 实施替换功能的格式。
例如:
原文句段:“See more details on p. 45 of our book.”
译文句段:Für mehr Details, sehen Sie auf S. 46 unseres Buchs nach."
RegExSource = "p\. (\d+)";
RegExTarget = "S\. $1";
RuleCondition = RegExConditionTypes.GroupedSourceNotTarget;
RegExSource 在原文中匹配到p. 45,然后使用捕获值45构建译文匹配规则S. 45,在译文中未能匹配,因此报告错误。
8. GroupedTargetAndSource
分组搜索表达式 - 使用原文 RegEx 中指定组的反向引用来构建译文表达式中的字符串,以搜索译文句段。若在译文句段中找到匹配字符串,但包含禁用的变体,则报告
注: 译文 RegEx 不能包含任何特殊的转义字符,而且完全作为用于 .NET RegEx 实施替换功能的格式。
例如:
原文句段:“This is my 1.2 testing sentence.”
译文句段:“Toto je moje 1-2 testovaci veta.”
RegExSource = "(\d+\.\d+)";
RegExTarget = "$1";
RuleCondition = RegExConditionTypes.GroupedTargetAndSource;
RegExSource 在原文中匹配到1.2,然后使用捕获值1.2构建译文匹配规则,在译文中未能匹配,因此报告错误。
举例说明
译文商标检查,检查译文中商标是否漏译
RegExSource = "®";
RegExTarget = "®";
RuleCondition = RegExConditionTypes.SourceNotTarget;
中翻英项目译文残留中文字符
RegExTarget = "[\u4E00-\u9FA5\u3000-\u303F\uFF07-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65]";
RuleCondition = RegExConditionTypes.TargetOnly;
译文中叠词
RegExTarget = "\b(\w+)\b\s\1\b";
RuleCondition = RegExConditionTypes.TargetOnly;
译文中重复空格
RegExTarget = "\s{2,}";
RuleCondition = RegExConditionTypes.TargetOnly;
在数字与 % 符号之间多出一个空格,例如,30 %
RegExTarget = "[0-9]{1,}\s%";
RuleCondition = RegExConditionTypes.TargetOnly;
括号前的空格缺失,例如,text(text)
RegExTarget = "[^\s](\(|\[|\{)";
RuleCondition = RegExConditionTypes.TargetOnly;
在 mm 前多出一个空格,例如,30 mm
RegExTarget = "[0-9]{1,}\smm";
RuleCondition = RegExConditionTypes.TargetOnly;
术语检查
RegExSource = "NBA";
RegExTarget = "美国职业篮球联赛\(NBA\)";
RuleCondition = RegExConditionTypes.SourceNotTarget;