前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用FME查找顺序码的漏编和重复 | 直播作业

使用FME查找顺序码的漏编和重复 | 直播作业

作者头像
数据处理与分析
发布2020-02-25 12:56:52
2.2K0
发布2020-02-25 12:56:52
举报

作业题目

这两天看了一个FME的直播课程,非常不错,适合入门者学习! 在直播结束后,举办方留了一个作业,要求非常的精简! 要求:请制作一个模板,判断相同标识码的要素,其顺序码是否存在漏编和重复。 这么简练的要求,科科还让我猜,你说,我猜不猜?

问题分析

爱因斯坦曾经说过:假如只给我一个小时的时间拯救世界,我会先花55分钟去发现问题,然后再用余下的5分钟解决问题。 我没有去拯救地球,也没花那么长时间去发现并分析问题。在一看到题目就着手做了起来。由于做过地址码跳号的检查功能,在没有充分了解题目的情况下就写了模板,也是吃了先入为主的亏! 后来仔细看了下题目,再结合群里的聊天,才发现好像有点不对劲!这才有了下面的对问题的逐步分析与解决!

数据说明

从数据说明中,我们可以了解到,CODE字段-前面的部分由标识码顺序号组成。

作业要求

这里有坑,审题不清就进去了! 我就掉在坑里了

这里有两个点:

1、找漏编

这个可以理解为: a.找出漏编的区间,也可以将漏编的输出; 也可以理解为: b.找到漏编顺序号;

2、找重复

这个比较简单,找到标识码一样且顺序号也一样的要素。

作业提示

从这里,可以了解到,主办方建议的转换器是AttributeCreator。而我的第一反应是:找重复可以使用Matcher或者DuplicateFilter。但经过思考与对数据的观察,发现了重复也可以使用AttributeCreator来进行查找。 经过以上的观察与分析,就可以开始进行模板的编写了!

编写模板,解决问题

模板整体截图

首先来个模板整体截图

思路

主要是可以分为两个部分: 1、提取出标识码与顺序号; 2、查找顺序号是否存在重复或者跳号; 2+、输出中间缺失的部分,这个作业中没说一定要输出来,属于画蛇添足,所以我把这一步写成了2+。

提取信息

提取信息有很多种方式,FME是个很灵活的平台,我来通过提取信息展示一下, 方式一:通过StringSearcher转换器

通过这种方式,可以一次取出多个信息并赋值到相应字段,在上图的设置中是取出了标识码与顺序号。 方式二:通过AttributeSplitter转换器

在这个案例中,同样可以一次取出多个信息并赋值到相应字段。

优缺点
正则

优点:灵活应对多种复杂场景; 缺点:对使用者要求稍高了点。

格式化字符串

优点:使用简单,易于掌握; 缺点:难以满足复杂的场景。

查重与查漏编

我理解的查重与查漏编,都可以通过判断要素间的先后关系得出,通过分析要素与它前面要素的关系,可以很方便的找出漏编与重复项,而这些都要建立在要素已经正确排序的基础上。所以我加了一个Sorter转换器。

查重与查跳号

不管是查重还是查跳号,都需要启用AttributeCreator转换器的临近要素功能,启用方式如下图所示:

然后就是选择条件赋值

接下来进行查重与查跳号

重复

以BSM分组,如果组内要素与前一个要素的SXH值相等,则认为是重复的,将属性值设置为:重复;

正常

依然以BSM分组,如果组内要素与前一个要素的SXH差值等于1,则认为是正常的,将属性值设置为:正常;

跳号

仍然以BSM分组,如果组内要素与前一个要素的SXH差值大于1,则认为存在跳号,将属性值设置为: 跳号区间:+前一个要素的SXH+至+当前要素的SXH;

START

通过对数据进行分析与观察,发现除了以上各种情况,其它的都是该分组编码开始的地方,将属性值设置为:START!

输出的数据

可以看到,正常、跳号与START都查出来了,由于不存在重复,所以输出的数据TH字段中没有重复信息。 如果将数据复制一份,就能看到查出了很多重复项。

在实际的数据处理中,去掉重复,剩下的就是唯一的!

输出跳号

这里我使用了Python来进行输出漏编的部分。与FME自带的循环或者克隆等实现方式相比,Python的这种实现方式最为简洁。下图是输出的部分数据,可以看到,漏编的顺序号都被补上了。

设置方式:

代码:

代码语言:javascript
复制
import fme
import re
import fmeobjects

class FeatureProcessor(object):
    def __init__(self):
        self.ptn = re.compile(u'(\d+)至(\d+)')
    def input(self,feature):
        ff = feature.getAttribute('TH')
        rlt = self.ptn.search(ff)
        if rlt:
            s,e= int(rlt.group(1))+1, int(rlt.group(2))+1
            for i in range(s,e):
                feature.setAttribute('SXH','%04d'%(i))
                self.pyoutput(feature)
        else:
            self.pyoutput(feature)
    def close(self):
        pass

总结

首先,题目出的好,很好,非常好! 解决问题就是这样,先别着急动手,先把问题搞清楚了再行动,不然的话,越着急越耽误功夫! 在观看直播课程的时候,有很多一起学习的朋友说跟不上节奏。我觉得这很正常,没有基础的朋友学起来是有些吃力,要学会FME没那么简单! 学习这个事情本就不是一蹴而就的,只有坚持下去,才能有所收获! 关于新编顺序号,可以参考FME小案例分享-编顺序号或者FME小案例分享-编顺序号之二推送! 最后要感谢安图FME团队与数据派联合筹办的这次直播课程。非常好!干货多多! 没来得及看直播的,可以看下这个录播:https://ke.qq.com/course/574540?taid=5158698104702028&tuin=761fe5f7

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作业题目
  • 问题分析
    • 数据说明
      • 作业要求
        • 作业提示
        • 编写模板,解决问题
          • 模板整体截图
            • 思路
              • 提取信息
                • 查重与查漏编
                  • 查重与查跳号
                  • 输出跳号
              • 总结
              相关产品与服务
              云直播
              云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档