HeadlinesBriefing favicon HeadlinesBriefing.com

解析日本邮政CSV文件技术难点

Hacker News •
×

去年我推出了posuto,一个以易用格式呈现日本邮政编码数据的软件包。它基于日本邮政发布的数据,该数据以广泛使用但难以解析而闻名。我第一次注意到邮政数据是因为在填写在线表格时输入邮编,地址自动补全为“XXX郡(除以下建筑物外)”。我不知道那些括号里的内容指的是什么,所以我寻找了邮政数据的常见来源,找到了CSV文件并发现了问题。原来CSV文件包含针对任何读取CSV文件的人士的括号注释,并引用行的顺序。这会导致问题。该数据主要以单行方式使用时,括号注释是毫无意义的。由于CSV是字段分隔格式,不需要括号——你可以只添加一个备注字段。这只是ken_all.csv诸多问题之一。你可以在推特上定期找到人们抱怨它的情况,甚至曾经有一个博客只是收集来自网络各处关于它的帖子。一条尤其有趣的推文描述了那些希望计算机服从人类意志的人,在永远解析ken_all.csv的地狱中受到惩罚。该文件的README解释说,字段过长的行会被拆分成多行。具体而言,如果邻域名称超过38个字符,或半宽片假名读音字段超过76个字符,行会拆分为两行。过长的邻域字段将继续,并复制所有其他字段。还应注意的是,虽然长度限制如此声明,但长行中插入换行的位置看起来是随机的,既不在字符限制处,也不在正常的词语边界处。值得一提的是,CSV的问题并非全部本质上是技术性的;邮政编码总是复杂的。CSV中行数最多的邮政编码——令人震惊地66行——是〒452-0961,指的是爱知县清津市的Haruhi地区。这么多行是因为每个邻域都有单独的一行。相比之下,最长的连续行,在上述换行规则下,是〒602-8368或〒602-8374的条目,各八行。两者都位于京都少数几个使用独特、怪诞的以交叉点为基础的地址系统的地区。许多地区都有“包容”邮政编码,其中邻域被指定为“除以下”,唯一的做法就是查找该exact字符串并排除它。有各种类似的字符串,很难确定我是否全部捕获了。另一个注释示例是一円。正常情况下,这意味着“一日元”,但它也意味着“围绕”,是CSV中应该从邻域名称中删除的注释,除了……