先给有条件的结论:如果工具对同一段文本的重复查询稳定返回空值,而换成另一段已知包含目标词的文本仍返回空值,那么空值更可能是“未取得可分析文本”或“查询条件未命中”,不能当作密度为零;如果工具对同一文本连续查询,先返回零值、后返回空值,那么零值更可能是真实计算出的“计数为零”,空值则是这次请求没有产出结果。区分的关键不是看界面显示什么,而是看同一工具在可控输入下是否保持可重复的响应模式。
两者最实用的分界线是:零值是一个数值结论,空值是缺失结论。零值意味着工具完成了分词、匹配和计数,只是目标词出现次数为 0;空值意味着工具没有走到计数这一步,或者走到了却没有可返回的对象。常见原因包括:输入文本为空、只提交了标题没有正文、正文被脚本或样式包裹导致解析后无文本、查询词与文本编码不一致、目标词被拆成不同词形而匹配规则未覆盖。这些原因彼此独立,不能靠一个现象就断定是哪种。
一个可操作的动作是构造对照输入:准备一段确定包含目标词三次的短文本,再准备一段完全不含该词的等长文本,分别查询。如果含词文本返回零值、不含词文本也返回零值,说明工具在正常计数,零值可信;如果含词文本返回空值,说明问题出在输入或解析链路,此时任何零值都不应采信。这个动作的结果直接决定下一步:前者可以继续分析密度,后者应先排查输入格式,而不是调整内容。
单次空值不足以定性。对同一输入连续查询两到三次,并观察返回是否一致:
这里要注意一个反例:有些工具在文本过长时会静默截断,截断后目标词恰好落在被丢弃的部分,于是返回零值。这个零值看起来像“真实计数”,实际是输入不完整造成的假零。判断方法是把同一段文本拆成前后两半分别查询,如果两半的计数之和明显大于整段查询结果,就说明整段查询发生了截断。此时应改用分段查询或缩短输入,而不是接受那个零值。
空值和零值在数据层面的差别,往往比界面上更清楚。如果工具提供结构化返回,可以检查:计数字段是否存在、是否为数值类型、是否附带匹配词列表、是否有状态或错误字段。计数字段存在且为 0,是零值;计数字段缺失或为 null,是空值。这个区别会影响后续处理:零值可以直接参与密度计算,空值必须先补数据或修输入,否则会把缺失当成零,得出偏低的密度结论。
假设一段 1000 字的文本,目标词出现 5 次,密度约为 0.5%。如果工具因解析失败返回空值,而使用者误当作零值,就会认为该词完全没出现,进而做出与事实相反的修改。这个例子只用于说明两种返回值对判断方向的影响,不表示任何具体工具的固定行为。
如果你的目的是判断一段文本是否需要调整用词,优先确认零值可信:先用对照文本验证工具能正常计数,再对目标文本查询。如果目的是排查工具为什么没有输出,优先确认空值来源:检查输入是否为空、是否只提交了链接而没有正文、文本是否被截断、查询词是否与文本编码一致。两种顺序的代价不同:前者在工具异常时会得到错误结论,后者在工具正常时会多花一次验证成本。选择依据是你能接受的错误方向——宁可漏判还是宁可误判。
下一步动作可以固定为三步:先用对照文本确认工具处于可计数状态;再对目标文本查询并记录返回值类型;最后对返回空值或可疑零值的输入做分段复核。只有这三步都指向同一结论时,才把该数值用于后续判断。