|
@@ -74,6 +74,9 @@ public class PersonalLayerDualAssertion {
|
|
|
public static final Pattern KNOWLEDGE_LEAK_KEY_PATTERN =
|
|
public static final Pattern KNOWLEDGE_LEAK_KEY_PATTERN =
|
|
|
Pattern.compile("缺[\\u4e00-\\u9fff]{1,10}补[\\u4e00-\\u9fff]{1,10}");
|
|
Pattern.compile("缺[\\u4e00-\\u9fff]{1,10}补[\\u4e00-\\u9fff]{1,10}");
|
|
|
|
|
|
|
|
|
|
+ /** 「ND 参考」标记(低于检出丰度标注,ND = not detected),内容级扫全文锚点(§2.1 / T2 内容级)。 */
|
|
|
|
|
+ public static final String ND_REFERENCE_MARK = "ND 参考";
|
|
|
|
|
+
|
|
|
private static final Pattern[] CONTENT_PATTERNS = {
|
|
private static final Pattern[] CONTENT_PATTERNS = {
|
|
|
PAGE_TAIL_PATTERN, ND_TOKEN_PATTERN, KNOWLEDGE_LEAK_KEY_PATTERN
|
|
PAGE_TAIL_PATTERN, ND_TOKEN_PATTERN, KNOWLEDGE_LEAK_KEY_PATTERN
|
|
|
};
|
|
};
|
|
@@ -168,6 +171,31 @@ public class PersonalLayerDualAssertion {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 键名级断言入口(写库前):待入库个人层键须 ∈ {@link #PERSONAL_KEYS} 白名单。
|
|
|
|
|
+ *
|
|
|
|
|
+ * <p>知识层键 / 未知键 / 分页残段伪键返回 {@code false},写库前应拒绝写入个人层
|
|
|
|
|
+ * (T2 个人层双断言-键名级,L2-4)。</p>
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param key 待入库键名(如「大肠杆菌改善方式」)
|
|
|
|
|
+ * @return true = 个人层键(通过键名级断言)
|
|
|
|
|
+ */
|
|
|
|
|
+ public static boolean assertPersonalKey(String key) {
|
|
|
|
|
+ return isPersonalKey(key);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 字符串内容级断言入口(写库前):对个人层串值扫全文,不含分页残段 / {@code ND 参考} 即通过。
|
|
|
|
|
+ *
|
|
|
|
|
+ * <p>正样本「大肠杆菌改善方式以『苦丁茶』开头」必须放行(T2 正样本,不得误杀合法干预文本)。</p>
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param content 个人层条目内容(可空)
|
|
|
|
|
+ * @return true = 内容干净(无分页残段 {@code 34/167 …} / {@code ND 参考} / 知识层泄漏桥接词)
|
|
|
|
|
+ */
|
|
|
|
|
+ public static boolean assertContentClean(String content) {
|
|
|
|
|
+ return isCleanContent(content);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// ==================== 违规载体 ====================
|
|
// ==================== 违规载体 ====================
|
|
|
|
|
|
|
|
/** 单条断言违规 */
|
|
/** 单条断言违规 */
|