event_nlp 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9d9b15778895f2a01d0c3b972ba1436f9073fd6c
4
+ data.tar.gz: 95eeb58ca3736fa353d0e961ce2f8d67b575d231
5
+ SHA512:
6
+ metadata.gz: d284092bbd265392a53d4f137b89bb0b414589fe35f0e29a8ca61e1b895eafbb85207f81fd817ce94debe6a6a75bb2a59567e1ccd84f78301b4bddfc386ce6e4
7
+ data.tar.gz: 7d2f3f486ff172b0704d474a15f5d3a94128958505f9c1573783d35fd4a20328c75a20b692fb81cdcf3d33d83ae3a337c485ae6749a9029f437e2c040bd3f33f
checksums.yaml.gz.sig ADDED
@@ -0,0 +1 @@
1
+ �3b?"XeG�0OPj��E�!}�}j�aiT��@��3��c{]�f���*�3��jη���0;����+��2�ećv\����������-����G6���Fx�*�������7d����/���5�~��~ ��w���0�T6J�ori�Ť�tF�4���,�H"rhc�A��J��'�ps�OqL�p�����w��O�0`���`��[ osMx ��jm�;(� ��tj �ԓƾ��ɚ
data/lib/event_nlp.rb ADDED
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: event_nlp.rb
4
+
5
+ require 'chronic'
6
+ require 'app-routes'
7
+
8
+
9
+
10
+ class EventNlp
11
+ include AppRoutes
12
+
13
+
14
+ def initialize()
15
+
16
+ super()
17
+ @params = {}
18
+ expressions(@params)
19
+
20
+ end
21
+
22
+ private
23
+
24
+ def expressions(params)
25
+
26
+
27
+ # some event every 2 weeks
28
+ # some event every 2 weeks at 6am starting from 14th Jan
29
+ # some event every 2 weeks at 6am starting from 18th Feb until 28th Oct
30
+ # some event every 2nd Monday (starting 7th Nov 2016)
31
+ # some event every 2nd Monday (starting 7th Nov until 3rd Dec)
32
+
33
+
34
+ starting = /(?:\(?\s*starting (\d+\w2} \w+\s*\w*)(?: until (.*))?\s*\))?/
35
+ weekday = Date::DAYNAMES.join('|').downcase
36
+ months = (Date::MONTHNAMES[1..-1] + Date::ABBR_MONTHNAMES[1..-1])
37
+ .join('|').downcase
38
+
39
+
40
+ get /^(.*)(every \w+ \w+(?: at (\d+am) )?)\s*#{starting}/ do \
41
+ |title, recurring, time, raw_date, end_date|
42
+
43
+ input = params[:input]
44
+
45
+ d = Chronic.parse(raw_date)
46
+
47
+ if recurring =~ /day|week/ then
48
+
49
+
50
+ if d < @now then
51
+
52
+ new_date = CronFormat.new(ChronicCron.new(recurring)\
53
+ .to_expression, d).to_time
54
+ input.gsub!(raw_date, new_date\
55
+ .strftime("#{new_date.day.ordinal} %b %Y"))
56
+ d = new_date
57
+
58
+ end
59
+ end
60
+
61
+
62
+ #puts [0, title, recurring, time, raw_date, end_date].inspect
63
+ {title: title, recurring: recurring, date: d, end_date: end_date}
64
+
65
+ end
66
+
67
+ # some meeting 3rd thursday of the month at 7:30pm
68
+ # some meeting First thursday of the month at 7:30pm
69
+ get /(.*)\s+(\w+ \w+day of (?:the|every) month at .*)/ do
70
+ |title, recurring|
71
+
72
+ #puts [1, title, recurring].inspect
73
+ { title: title, recurring: recurring }
74
+
75
+ end
76
+
77
+ # hall 2 friday at 11am
78
+ get /(.*)\s+(#{weekday})\s+at\s+(.*)/i do |title, raw_day, time|
79
+
80
+ d = Chronic.parse(raw_day + ' ' + time)
81
+
82
+ #puts [1.5, title, raw_day].inspect
83
+ { title: title, date: d }
84
+
85
+ end
86
+
87
+ # e.g. 21/05/2017 Forum meetup at Roundpeg from 2pm
88
+ get /^(\d+\/\d+\/\d+)\s+(.*)(?: from|at)\s+(\d+[ap]m)/ do
89
+ |raw_date, title, raw_time|
90
+
91
+ d = Chronic.parse(raw_date + ' ' +
92
+ raw_time, :endian_precedence => :little)
93
+ recurring = nil
94
+
95
+ #puts [3, title, raw_date].inspect
96
+ { title: title, date: d }
97
+ end
98
+
99
+ # hall 2 friday at 11am
100
+ # some important day 24th Mar
101
+
102
+ with_date = "(.*)\\s+(\\d\+\s*(?:st|nd|rd|th)?\\s+(?:#{months}))"
103
+ alt_pattern = '([^\d]+)\s+(\d+[^\*]+)(\*)?'
104
+
105
+ get /#{with_date}|#{alt_pattern}\s*(\*)$/i do |title, raw_date, annualar|
106
+
107
+ d = Chronic.parse(raw_date)
108
+
109
+ recurring = nil
110
+
111
+ if annualar then
112
+
113
+ recurring = 'yearly'
114
+ if d < @now then
115
+ d = Chronic.parse(raw_date, now: Time.local(@now.year + 1, 1, 1))
116
+ end
117
+ end
118
+
119
+ #puts [2, title, raw_date].inspect
120
+ { title: title, date: d, recurring: recurring }
121
+ end
122
+
123
+ # 27-Mar@1436 some important day
124
+ get /(\d[^\s]+)\s+([^\*]+)(\*)?/ do |raw_date, title, annualar|
125
+
126
+ d = Chronic.parse(raw_date, :endian_precedence => :little)
127
+ recurring = nil
128
+
129
+ if annualar then
130
+
131
+ recurring = 'yearly'
132
+ if d < @now then
133
+ d = Chronic.parse(raw_date, now: Time.local(@now.year + 1, 1, 1))
134
+ end
135
+ end
136
+
137
+
138
+ #puts [3, title, raw_date].inspect
139
+ { title: title, date: d, recurring: recurring }
140
+ end
141
+
142
+
143
+
144
+
145
+ # e.g. 04-Aug@12:34
146
+ get '*' do |s|
147
+ puts 's: ' + s.inspect
148
+ 'pattern unrecognised'
149
+ end
150
+
151
+
152
+ end
153
+
154
+ alias parse run_route
155
+
156
+
157
+ end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: event_nlp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTE3MDUwNzE0NTg0OVoXDTE4MDUwNzE0NTg0OVowSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
+ ggEBAMw2O2U81njedJwOBUx2jysPRiQCPeRo3z866CWS38+gUjuoyWhxqpU7oFmf
19
+ ZU8qBW3IAt9dDF6YYej0D1pjUGQB3Q9tGG+9JAgrVk9A9v6EDe2OlJw+kBq3df8c
20
+ rlBxpaoW5Cs4l0NPvS0YxkiNcVNF+5+5w5P/oG/rQtwYe5qjgL8dnR3wCzbpLEJx
21
+ ffB9IO8GywixKbsVo+azM95eEXqftzTEZTvNl9/fXdmDxxBjQ840cga0cbo8/l3r
22
+ QDCdLV4tr4QxoJUWr2WuF9eA4Z2LNeNiKV2QpnPJSJ8oGmLSOhBx/QsIHt/JGnAZ
23
+ iWrign+OUU/ZhLpZxWdMtho2lwUCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
+ DwQEAwIEsDAdBgNVHQ4EFgQUxmLhcuks1axpInwjUKF+v8jP89gwJgYDVR0RBB8w
25
+ HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAya7GTAGy
27
+ KQx5tB2Dugmt+7zMYMR2DXiLbtRnfA5sbtgERjf/wxIp+eXKPNUuUy19R6srwaVB
28
+ KMvT4fo30u4r+JS0jU50xr6YH9BgJmcjf9PVboo2Rmy6ndylXjta24tzCOEz9+Tt
29
+ JwZIT4fJigwslfEQFtTyPizu+kUMugdOwmk8WUeJdla0LpnMmIaDuh9BdIbydmMv
30
+ /N+gM0MWTN2a4JSEPzFK6C7H8aI/pzcffTuhqspk6a1XtgFcqVdF1expUm8Hse1Z
31
+ /WtgKLMzCAKTHZ2OpN3OTs6j+vsUBIwCb/Ki17Z4YULtRaGg7I8nTjTrHIIJ0yNm
32
+ kbRihMTezaC+4A==
33
+ -----END CERTIFICATE-----
34
+ date: 2017-05-07 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: chronic
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.10'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 0.10.2
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '0.10'
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 0.10.2
56
+ - !ruby/object:Gem::Dependency
57
+ name: app-routes
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0.1'
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 0.1.19
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - "~>"
71
+ - !ruby/object:Gem::Version
72
+ version: '0.1'
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.1.19
76
+ description:
77
+ email: james@jamesrobertson.eu
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - lib/event_nlp.rb
83
+ homepage: https://github.com/jrobertson/event_nlp
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.6.8
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: 'Parses a calendar event for date, time, and description e.g. hall 2 friday
107
+ at 11am #=> {:title=>"hall 2", :date=>2017-05-12 11:...}'
108
+ test_files: []
metadata.gz.sig ADDED
Binary file