Sha256: 35e5beb60392c40f75b1ed6c9fa4e279aae90875f8750d7ca9bdc314992792fa

Contents?: true

Size: 1.38 KB

Versions: 2

Compression:

Stored size: 1.38 KB

Contents

require 'active_support/core_ext/object'
require 'rltk/lexer'

class String
  def to_num
    if self[0] == '-'
      (self[0] + self[1..-1].gsub(/\D/, '')).to_i
    else
      self.gsub(/\D/, '').to_i
    end
  end
end

class KoreanCreditCardLexer < RLTK::Lexer
  rule(/\[Web발신\]/) { |t| [:HEADER, t]}
  rule(/\(Web발신\)/) { |t| [:HEADER, t]}
  rule(/체크카드출금/) { |t| [:HEADER, t]}
  rule(/[\p{Hangul}\*]{2,4}님/) { |t| [:USER_NAME, t]}
  rule(/누적[\s:\-]?[\d,\-]+원/) { |t| [:MONEY_TOTAL, t.to_num] }
  rule(/누적-[\d,\-]+원/) { |t| [:MONEY_TOTAL, t.to_num] }
  rule(/[\d,\-]+원/) { |t| [:MONEY, t.to_num] }
  rule(/\(주\)\p{Hangul}+/) {|t| [:SHOP, t[3..-1]]}
  rule(/\p{Hangul}+\([\d\*]{4}\)/) {|t| [:CARD, t]}
  rule(/\S+은행/) {|t| [:BANK, t]}
  rule(/\S+카드/) {|t| [:CARD, t]}
  rule(/\d\d\/\d\d/) {|t| [:DATE, t]}
  rule(/\d\d:\d\d/) {|t| [:TIME, t]}
  rule(/일시불/) { :TYPE }
  rule(/주식회사\p{Hangul}+/) {|t| [:SHOP, t[4..-1]]}
  rule(/\p{Hangul}+/) {|t| [:SHOP, t.strip]}
  rule(/\//) {|t| [:SLASH, t]}
  rule(/[\p{L}\p{P}]+/) {|t| [:WORD, t]}
  rule(/[\d\*]+/) { :NUMBER }
  rule(/\s/) {|t| [:SPACE, t]}
end

module CreditCardSmsParser
  def parse_sms(phone_number, sms_message)
    tokens = KoreanCreditCardLexer.lex(sms_message)
    h = tokens.inject({}) do |memo, t|
      memo[t.type] = t.value
      memo
    end

    h.merge(card_name: phone_number)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
credit-card-sms-parser-0.0.6 lib/credit_card_sms_parser.rb
credit-card-sms-parser-0.0.5 lib/credit_card_sms_parser.rb