一个名字,一行 - 昨天没发的修复,修好之后发了
昨天我们讲了一个写好却拒绝发布的修复。缺的是一处区分。在同样的 72 条回答上测:28 家真实商户里认出 26 家,之前是 23 家 - 而且一家也没丢。
昨天这篇博客讲的是一个写好、量过、却没有发布的修复:它消掉了竞争对手表里的 61 个重复,同时让 72 家真实店铺消失。今天它发出去了。下面是当时缺的东西。
我们当时没看见的那处区分
最初的问题是这样:同一家公司在一张表里出现好几次,写法有几种就有几行。迪拜的 Urban Company 有三个写法,东京的 VIRON 有五个,里昂的 Ring Twice 有两个。
顺理成章的改法,是把名字切到第一个分隔符 - 冒号、破折号、括号。可是有一道老关卡,会拒掉任何超过四十个字符的名字,本意是挡住整句话。在量之前先切,就把一句四十五个字符的日语反问缩成二十一个:低于门槛,于是被放行。这些闯进来的东西占了一张只显示八个名字的表里的位置,把真实商户挤了出去。
判断针对整条条目。保留的是它的开头。这两个动作看的不是同一段文字,而整个修复就在这里。
换句话说:如果开头很短,这条条目就是「名字加描述」,不管后面多长都把名字留下。如果开头很长,就整条一起判断 - 一句话仍然是一句话。
而且门槛要随文字而变
接下来要定义什么叫「短」。单一个数字行不通:「Boulangerie de la Martinière」有二十八个字符,仍然是个名字;而一句二十四个字符的日语反问,仍然是句反问。日语、韩语和中文每个字承载的意思大约是三倍。
所以门槛定为:密度高的文字十二个字符,其他文字四十个。这不是一份违禁词清单,而是文字体系本身的属性,对我们还没开的语言同样有效。
测量给出的结果
还是前天那 72 条回答 - 六个市场、两个行当、三个助手 - 外加一份手工做的核对表:二十八家真实商户,十五条真实建议。
认出的真实商户:28 家里 26 家,之前是 23 家。
一家没丢。多认出三家,其中 Kurashian 和 VIRON 此前只能淹没在一句话里存在。
放过去的建议:15 条里 10 条,之前是 9 条。
多了一条。这是代价,而且很小。
抽取出的 454 条字符串变成 428 条。
Urban Company 从三个写法并成一个,Ring Twice 从两个并成一个,VIRON 从五个并成两个。
昨天那一版是 28 家里 23 家,而且丢了 Jocteur 和 Boulenc 两家真实的面包店。正是这个损失让它没能通过。
还开着的口子,以及一个断言它开着的测试
短的日语句子现在照样通过。「报价是否免费、是否在施工前以书面形式提供」原样是三十二个字符:在四十这道门槛以下,所以这次修复之前会通过,之后也会通过。这不是倒退,这是旁边那个口子 - 剔除建议的那套过滤器是法语和英语的短语清单,新进来的这四种文字一个都没覆盖。
我们写了一个断言这条建议仍会通过的测试。等口子被堵上的那天,它就会失败,届时需要把它的判定反过来。要防止一个已知问题因为「全绿」而被遗忘,我们只知道这一个办法。
顺带说一句方法。写这些测试的时候,其中一个断言新规则会滤掉短的日语建议。它不会。我们改的是测试,不是那个说法:一个描述「本来希望自己写成什么样」的测试,什么都保护不了。
这对你意味着什么
一张变短的竞争对手表,可能是更准的那张。
如果你的表轻了,看看是不是有几行只是被重新粘回了一起。
没人动,声量份额却动了。
一个被数了三次的对手,份额被除以三;粘回去之后它就上来了。不是它进步了,是我们之前数错了。
去问一个工具:它凭什么判定某一行是企业。
如果答案归结为某个长度,就接着问是哪个长度 - 以及在哪种文字里。
局限照旧:72 条回答、六个市场、两个行当。核对表是手工做的,二十八家商户不构成统计意义上的证明。但它立住的事实是可核验的:二十八家一家没丢,还多认出三家。