V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
snowhs
V2EX  ›  程序员

四条垃圾短信,请教如何分别提取关键词

  •  
  •   snowhs · 2015-04-04 14:43:16 +08:00 · 7510 次点击
    这是一个创建于 3527 天前的主题,其中的信息可能已经有所发展或是发生改变。
    > XXX新机场正式获批!此前只北京、上海拥有双机场,资源绝对罕有!总12萭,每月两千多,还拿首批千亿空港原始股!两征!4000287785

    > \d{4}你好,只需本人有效-证件就可申请各-行《五到五十万》的透-支-佧,条件宽松,联系18402892703小李

    > \d{4}您好,我行能为你申办一张可周转的信用卡,咨询:132李5815经1106理

    > 需用普通 [嘌]
    > 18628188410刘 (会.计)

    其中第四条,我已经去匹配正文中含有"嘌"并带有电话号码或链接的模式了。但是这种匹配很好破。也想听听大家有没有更好的意见。

    谢谢!
    第 1 条附言  ·  2015-04-04 22:39:17 +08:00
    其实我想表达的是,这四条垃圾短信,分别用什么关键词或者模式去捕捉?

    比如第四条的模式是正文中含有"嘌"并带有电话号码或链接,第三条是"信用卡",第一和第二条我还没想到合适的。

    第二条的一个候选模式是"联系"并带有电话号码,但是误杀率可能会有点高。
    35 条回复    2015-04-07 13:19:16 +08:00
    9hills
        1
    9hills  
       2015-04-04 14:46:08 +08:00 via iPad
    关键词做垃圾短信识别是最原始的方法。。
    snowhs
        2
    snowhs  
    OP
       2015-04-04 14:48:30 +08:00
    @9hills 愿意花点时间时间指教一下更好的办法吗?
    lhx2008
        3
    lhx2008  
       2015-04-04 14:48:44 +08:00   ❤️ 1
    匹配标点符号 ?我是来打酱油的
    !*2 [*] (*) - 信用卡
    sun1534
        4
    sun1534  
       2015-04-04 14:51:20 +08:00   ❤️ 3
    转化成 拼音。。再?
    snowhs
        5
    snowhs  
    OP
       2015-04-04 14:53:07 +08:00
    @lhx2008 我试过去掉正文里所有的\W,然后再去找关键词,但是后来发现信用卡和发票这两个大类基本上都已经进化到用同音字来规避了。例如上面的例二。不过例三的李经理倒是要被这种方法网住。
    snowhs
        6
    snowhs  
    OP
       2015-04-04 14:53:39 +08:00
    @sun1534 屌!要试试!
    yylzcom
        7
    yylzcom  
       2015-04-04 14:54:36 +08:00 via Android
    还是云比较靠谱,就像WordPress的akismet一样。有客户举报过一次他以后相同/类似内容的短信都会被拦截。关键字这样的局限性太大。

    以前用LBE的做得还不错,后来360和联通官方营业厅客户端的也还行。
    9hills
        8
    9hills  
       2015-04-04 15:01:01 +08:00 via iPad
    @snowhs 这个非常成熟了,随便Google 下就好多。。原理和垃圾邮件相通
    snowhs
        9
    snowhs  
    OP
       2015-04-04 15:01:44 +08:00
    @yylzcom 自己做这个事情,一个原因是不信任LBE/360/联通等等,另一个是当作游戏玩。

    如果要把这个事情当真来做,确实应该累积用户、累积数据然后做供用户订阅的线上黑名单吧。但是我没打算在这事上投入多少精力。
    snowhs
        10
    snowhs  
    OP
       2015-04-04 15:02:38 +08:00
    @9hills 抱歉伸手,能提议几个搜索关键词么?
    mringg
        11
    mringg  
       2015-04-04 15:03:18 +08:00 via Android   ❤️ 1
    亻言用卡,木仓
    9hills
        12
    9hills  
       2015-04-04 15:04:58 +08:00 via iPad   ❤️ 1
    @snowhs 垃圾短信识别算法,嗯关键词就是这么简单。。

    另外开做之前,不管你用什么算法,短信语料库的数据量和质量是第一位。巧妇难为无米之炊。。。。
    9hills
        13
    9hills  
       2015-04-04 15:06:18 +08:00 via iPad
    另外垃圾短信的原则是宁可错过,不能误杀。你不能只看拦截率,也要看误杀率。
    NeoAtlantis
        14
    NeoAtlantis  
       2015-04-04 15:12:40 +08:00
    云的另一个问题是用户的隐私吧。。。短信都传出去了反正我觉得不太好
    snowhs
        15
    snowhs  
    OP
       2015-04-04 15:12:58 +08:00
    @9hills 谢谢建议~

    不过这东西是写给自己用的,我不在意误杀,也不在意不小心用了我的应用的人的重要短信(例如: "我的前任啊,这是我为了规避某垃圾短信拦截程序的联系人白名单专门用的一个新手机号,你看到这条短信的时候,我在#{离你几分钟路程的一个地址}的天台上,双十一.特惠.大奖.等你拿,再见了世界。")被误杀之后会受到什么伤害~
    snowhs
        16
    snowhs  
    OP
       2015-04-04 15:22:07 +08:00
    @NeoAtlantis 让用户自己选择要不要标记一条短信是垃圾短信,然后自己选择要不要上传垃圾短信到服务器上交给开发者分析好了。
    snowhs
        17
    snowhs  
    OP
       2015-04-04 15:38:07 +08:00
    @9hills 找到了几篇相关论文,谢谢指点~
    NeoAtlantis
        18
    NeoAtlantis  
       2015-04-04 15:54:17 +08:00
    @snowhs 用户都看到垃圾短信了,还要垃圾短信软件干嘛?除非说是从垃圾短信的收件箱里面标记为不是垃圾短信(但是这样也需要判断)。或者有没有可能把过滤算法下发到手机,类似病毒库更新那种。。。
    xiaole
        19
    xiaole  
       2015-04-04 15:56:36 +08:00
    @snowhs 这个挺考验开发者良心的,其实我觉得,让用户选择上传=懒得上传
    kshift
        20
    kshift  
       2015-04-04 16:28:17 +08:00
    说真的,换了 1709 的号码到现在都没怎么收到过垃圾短信。
    w5205200
        21
    w5205200  
       2015-04-04 16:41:54 +08:00   ❤️ 1
    可以参考一下cc短信拦截项目 https://code.google.com/p/cc-sms-blocker/
    chevalier
        22
    chevalier  
       2015-04-04 18:35:13 +08:00   ❤️ 1
    样本量客观的话,可以试试分词+贝叶斯分类,也就是现在主流的垃圾邮件判断方式
    tioover
        23
    tioover  
       2015-04-04 22:22:57 +08:00 via Android   ❤️ 1
    结巴分词
    朴素贝叶斯分类器
    cfan8
        24
    cfan8  
       2015-04-04 23:08:06 +08:00   ❤️ 1
    tsms.sinaapp.com 我很多年前做的一个东西,训练集也不大,一千条的样子,就是朴素贝叶斯
    BetaLe
        25
    BetaLe  
       2015-04-05 01:32:29 +08:00 via Android
    @w5205200 @snowhs cc短信拦截就是关键词
    zhicheng
        26
    zhicheng  
       2015-04-05 08:13:20 +08:00 via Android   ❤️ 1
    我有个朋友做过短信网关,楼上的方法都用过,最后效果最好的是,去掉短信里所有的符号,做MD5和系统里标识的垃圾短信对比。
    Hxu2M811KVSJqN75
        27
    Hxu2M811KVSJqN75  
       2015-04-05 13:33:16 +08:00   ❤️ 1
    对同音字, 抠出数字和字母,标点符后, 对中文全部做拼音化处理

    出现 xinyongka, fapiao , touzhika, daikuan 等等, 直接进行过滤
    kaneg
        28
    kaneg  
       2015-04-05 14:51:03 +08:00
    其实是垃圾短信,不同的用户需求是不一样的,如果某人一段时间就是需要发票,带发票的对他就不是垃圾。
    所以一个思路:给关键字打分,然后让用户选择严格程度。例如发票,贷款这类普通人不需要的,分值就告,而“联系”分值可以低一些
    xlrtx
        29
    xlrtx  
       2015-04-05 15:15:42 +08:00
    网上找一些机器学习做text classification 的论文, 训练数据找起来可能比较麻烦..
    SmiteChow
        30
    SmiteChow  
       2015-04-05 17:53:10 +08:00
    自然语言处理无外乎分词,建模,训练,分类撒
    wadezhao
        31
    wadezhao  
       2015-04-05 18:27:26 +08:00 via Android   ❤️ 1
    短信关键词现在基本失效了,敌人太狡猾,我现在短信已经是白名单了……
    zouxy
        32
    zouxy  
       2015-04-07 10:13:10 +08:00   ❤️ 1
    我自己也写过APP,自己用。我用的加权评分机制,效果还可以。
    1.第一条字数过多,标点符号过多。
    2.第二条有“佧”这种特殊字。正常人发短信就3000多个常用汉字
    3.第四条也有特别的字。
    4.第三条还是比较难处理的。
    snowhs
        33
    snowhs  
    OP
       2015-04-07 12:00:58 +08:00
    @zouxy 能分享一下常用汉字的清单吗~谢谢
    snowhs
        34
    snowhs  
    OP
       2015-04-07 12:03:07 +08:00
    @zouxy 另外,针对第三条,我已经把信用卡设置成关键词了,我想不到什么情况下我没有存为联系人的人给我发短信要用这个词。
    zouxy
        35
    zouxy  
       2015-04-07 13:19:16 +08:00   ❤️ 1
    @snowhs 网上搜"3754个常用汉字".

    我的APP也使用了黑名单,和你的做法差多。另外对银行卡号的数字做了一些过滤。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2629 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 01:50 · PVG 09:50 · LAX 17:50 · JFK 20:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.