Kim Adams commited on
Commit
6ca1dcd
·
1 Parent(s): 03fcc07

updating theming process

Browse files
app.py CHANGED
@@ -1,17 +1,13 @@
1
  import gradio as gr
2
  import openai, os
 
3
  from huggingface_hub import Repository
4
  from io import BytesIO
5
  from dotenv import load_dotenv
6
  from openai.embeddings_utils import get_embedding, cosine_similarity
7
  from slack_processing.slack_data_prep import FetchSlack, ProcessSlack, CreateEmbeddings
8
  from create_games.create_games_slack import CreateGames
9
- ##from ml_to_nl_translation.translation import getTranslations, getJSONDF
10
- #from lookups.translate_pdf_to_text import PreparePDF
11
- #from lookups.create_searchable_content import CreateSearchableContent
12
  from utilities import api_keys
13
- import PyPDF2
14
-
15
  import pkg_resources
16
  dotenv_version = pkg_resources.get_distribution("tiktoken").version
17
  print(f"tiktoken version: {dotenv_version}")
@@ -77,4 +73,4 @@ with gr.Blocks() as ui4:
77
  b4.click(FetchGames,outputs=df4)
78
 
79
  demo = gr.TabbedInterface([ui1,ui2,ui3,ui4], ("Fetch Slack", "Process & Tag", "Create Embeddings", "Find Games"))
80
- demo.launch()
 
1
  import gradio as gr
2
  import openai, os
3
+ import PyPDF2
4
  from huggingface_hub import Repository
5
  from io import BytesIO
6
  from dotenv import load_dotenv
7
  from openai.embeddings_utils import get_embedding, cosine_similarity
8
  from slack_processing.slack_data_prep import FetchSlack, ProcessSlack, CreateEmbeddings
9
  from create_games.create_games_slack import CreateGames
 
 
 
10
  from utilities import api_keys
 
 
11
  import pkg_resources
12
  dotenv_version = pkg_resources.get_distribution("tiktoken").version
13
  print(f"tiktoken version: {dotenv_version}")
 
73
  b4.click(FetchGames,outputs=df4)
74
 
75
  demo = gr.TabbedInterface([ui1,ui2,ui3,ui4], ("Fetch Slack", "Process & Tag", "Create Embeddings", "Find Games"))
76
+ demo.launch()
create_games/__pycache__/create_games_slack.cpython-311.pyc CHANGED
Binary files a/create_games/__pycache__/create_games_slack.cpython-311.pyc and b/create_games/__pycache__/create_games_slack.cpython-311.pyc differ
 
create_games/create_games_slack.py CHANGED
@@ -183,7 +183,6 @@ def GenerateGameIdeas(themes_by_theme):
183
  print("No game idea found.")
184
  return None
185
 
186
-
187
  def CreateGames():
188
  global themes
189
  ReadThemesFromFile()
 
183
  print("No game idea found.")
184
  return None
185
 
 
186
  def CreateGames():
187
  global themes
188
  ReadThemesFromFile()
slack_processing/__pycache__/slack_data_prep.cpython-311.pyc CHANGED
Binary files a/slack_processing/__pycache__/slack_data_prep.cpython-311.pyc and b/slack_processing/__pycache__/slack_data_prep.cpython-311.pyc differ
 
slack_processing/__pycache__/theme.cpython-311.pyc ADDED
Binary file (1.08 kB). View file
 
slack_processing/data/alljson.json ADDED
@@ -0,0 +1,1237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "id":45,
4
+ "person": "DataNinja",
5
+ "datetime": "2023-07-11 9:21 AM",
6
+ "message": "#greenshirts #nomemoneeded IMG_6103",
7
+ "reactions": [
8
+ {
9
+ "emoji": ":greenteam:",
10
+ "count": 8
11
+ },
12
+ {
13
+ "emoji": ":twinsparrot:",
14
+ "count": 1
15
+ },
16
+ {
17
+ "emoji": ":blueheart:",
18
+ "count": 4
19
+ },
20
+ {
21
+ "emoji": ":green_heart:",
22
+ "count": 3
23
+ },
24
+ {
25
+ "emoji": ":shirt:",
26
+ "count": 3
27
+ }
28
+ ],
29
+ "replies": 5
30
+ },
31
+ {
32
+ "id":1,
33
+ "person": "carlos.salazar",
34
+ "datetime": "2023-06-22 9:47 AM",
35
+ "message": "Ooo.",
36
+ "reactions": [
37
+ {
38
+ "emoji": ":korok:",
39
+ "count": 1
40
+ }
41
+ ],
42
+ "replies": 0
43
+ },
44
+ {
45
+ "id":2,
46
+ "person": "Keri W",
47
+ "datetime": "2023-06-22 9:52 AM",
48
+ "message": "IMPORTANT ADDITION: You do NOT need ANY experience or knowledge of D&D to join the one-shot campaign. R2 will walk you through everything you need to know. Don't be shy and join us! (edited)",
49
+ "reactions": [
50
+ {
51
+ "emoji": ":build_heart:",
52
+ "count": 7
53
+ }
54
+ ],
55
+ "replies": 0
56
+ },
57
+ {
58
+ "id":3,
59
+ "person": "Brad Merrell",
60
+ "datetime": "2023-06-22 10:14 AM",
61
+ "message": "After the summer, then I will be more available.",
62
+ "reactions": [
63
+ {
64
+ "emoji": ":build:",
65
+ "count": 1
66
+ }],
67
+ "replies": 1
68
+ },
69
+ {
70
+ "id":4,
71
+ "person": "Jay Patel",
72
+ "datetime": "2023-06-22 12:04 PM",
73
+ "message": "@here L&L starting in 5 mins. If you are in the office, Feel free to come to RICE. AI Tutoring: Paving the Way to Better Tomorrows in Education\nhttps://teams.microsoft.com/l/meetup-join/19%3ameeting_MTg2OWRkYzgtYTdmOS00NTk4LWE4MmQ[…]2c%22Oid%22%3a%22bca811aa-1982-4f3b-b602-bca1a89180dc%22%7d",
74
+ "reactions": [
75
+ {
76
+ "emoji": ":ai:",
77
+ "count": 1
78
+ }
79
+ ],
80
+ "replies": 0
81
+ },
82
+ {
83
+ "id":5,
84
+ "person": "Manik",
85
+ "datetime": "2023-06-22 2:01 PM",
86
+ "message": "It's @Sam ’s 2 year Slalomversary. Sam, it's been a pleasure to be on a team with you and thanks for everything you do at _build, especially around the ERGs. Congratulations!",
87
+ "reactions": [
88
+ {
89
+ "emoji": ":sam:",
90
+ "count": 9
91
+ },
92
+ {
93
+ "emoji": ":tada:",
94
+ "count": 3
95
+ },
96
+ {
97
+ "emoji": ":thank-you:",
98
+ "count": 1
99
+ },
100
+ {
101
+ "emoji": ":party_blob:",
102
+ "count": 1
103
+ }
104
+ ],
105
+ "replies": 10
106
+ },
107
+ {
108
+ "id":6,
109
+ "person": "Naeem",
110
+ "datetime": "2023-06-22 2:02 PM",
111
+ "message": "@Sam happy Slalomversary!",
112
+ "reactions": [
113
+ {
114
+ "emoji": ":thank-you:",
115
+ "count": 1
116
+ }
117
+ ],
118
+ "replies": 0
119
+ },
120
+ {
121
+ "id":7,
122
+ "person": "Monika Rudra",
123
+ "datetime": "2023-06-22 2:02 PM",
124
+ "message": "Happy Slalomversary @Sam",
125
+ "reactions": [
126
+ {
127
+ "emoji": ":thank-you:",
128
+ "count": 1
129
+ }
130
+ ],
131
+ "replies": 0
132
+ },
133
+ {
134
+ "id":8,
135
+ "person": "ʎןןǝʞ",
136
+ "datetime": "2023-06-22 2:09 PM",
137
+ "message": "Happy Slalomversary, my dear friend! @Sam :hugging_face:",
138
+ "reactions": [
139
+ {
140
+ "emoji": ":thank-you:",
141
+ "count": 1
142
+ },
143
+ {
144
+ "emoji": ":heart:",
145
+ "count": 1
146
+ }
147
+ ],
148
+ "replies": 0
149
+ },
150
+ {
151
+ "id":9,
152
+ "person": "David Bernal",
153
+ "datetime": "2023-06-22 2:20 PM",
154
+ "message": "Happy Slalomversary, @Sam! :partyblob:",
155
+ "reactions": [
156
+ {
157
+ "emoji": ":thank-you:",
158
+ "count": 1
159
+ }
160
+ ],
161
+ "replies": 0
162
+ },
163
+ {
164
+ "id":10,
165
+ "person": "Doug Bowen",
166
+ "datetime": "2023-06-22 2:37 PM",
167
+ "message": "FYI at 3:30 today, I'll be taking the Arcade machine down for maintenance. It will actually remain down until next Wednesday morning as I work through some marquee configuration. :dealwithit:",
168
+ "reactions": [
169
+ {
170
+ "emoji": ":gameboy:",
171
+ "count": 4
172
+ }
173
+ ],
174
+ "replies": 0
175
+ },
176
+ {
177
+ "id":11,
178
+ "person": "John Flaherty",
179
+ "datetime": "2023-06-22 7:36 AM",
180
+ "message": "Thank you to everyone who came into the office yesterday in support of our Build Center tour for Woodside Energy and AWS. Special thanks to @Christy Nolan and @Danny Weldon for their support presenting “how we work” and “what we’re working on”. We’re well positioned to win work with the buyer at Woodside stating “several consulting companies have pitched to me but nobody aligns better with my vision than Slalom does”.",
181
+ "reactions": [
182
+ {
183
+ "emoji": ":build_heart:",
184
+ "count": 30
185
+ },
186
+ {
187
+ "emoji": ":build:",
188
+ "count": 9
189
+ },
190
+ {
191
+ "emoji": ":minion-woohoo:",
192
+ "count": 2
193
+ },
194
+ {
195
+ "emoji": ":yes-nod:",
196
+ "count": 1
197
+ }
198
+ ],
199
+ "replies": 0
200
+ },
201
+ {
202
+ "id":12,
203
+ "person": "derreck.stellpflug",
204
+ "datetime": "2023-06-20 2:36 PM",
205
+ "message": ":alert0: :blob-policeangry: :oncoming_police_car: :alert0: Saw :eyes-intensify: :pirate_flag: this the other day :exploding_head: ...someone please forward :mailbox: this to :slalom:lalom :build:uild Legal:judge:",
206
+ "reactions": [
207
+ {
208
+ "emoji": ":cat-scream-rage:",
209
+ "count": 4
210
+ },
211
+ {
212
+ "emoji": ":joy:",
213
+ "count": 3
214
+ },
215
+ {
216
+ "emoji": ":disgruntled-doug:",
217
+ "count": 1
218
+ }
219
+ ],
220
+ "replies": 0
221
+ },
222
+ {
223
+ "id":13,
224
+ "person": "Slackbot",
225
+ "datetime": "2023-06-20 4:00 PM",
226
+ "message": "Reminder: Time sheets!",
227
+ "replies": 0
228
+ },
229
+ {
230
+ "id":14,
231
+ "person": "Naeem",
232
+ "datetime": "6:24 PM",
233
+ "message": "Happy Friday",
234
+ "reactions": [
235
+ {
236
+ "emoji": ":cocktail:",
237
+ "count": 6
238
+ },
239
+ {
240
+ "emoji": ":tequila:",
241
+ "count": 4
242
+ },
243
+ {
244
+ "emoji": ":100:",
245
+ "count": 3
246
+ }
247
+ ],
248
+ "replies": 0
249
+ },
250
+ {
251
+ "id":15,
252
+ "person": "Steven Murray",
253
+ "datetime": "2023-06-20 8:58 PM",
254
+ "message": "Date night with my wife at the Sugar Land Space Cowboys game.",
255
+ "reactions": [
256
+ {
257
+ "emoji": ":blueheart:",
258
+ "count": 20
259
+ }
260
+ ],
261
+ "replies": 0
262
+ },
263
+ {
264
+ "id":16,
265
+ "person": "Naeem",
266
+ "datetime": "2023-06-20 4:58 PM",
267
+ "message": "Happy Father's day to all you _Builder Dads out there!",
268
+ "reactions": [
269
+ {
270
+ "emoji": ":+1:",
271
+ "count": 6
272
+ },
273
+ {
274
+ "emoji": ":man:",
275
+ "count": 2
276
+ },
277
+ {
278
+ "emoji": ":build_heart:",
279
+ "count": 4
280
+ },
281
+ {
282
+ "emoji": ":salute:",
283
+ "count": 1
284
+ }
285
+ ],
286
+ "replies": 0
287
+ },
288
+ {
289
+ "id":17,
290
+ "person": "Michelle Francisco",
291
+ "datetime": "9:44 AM",
292
+ "message": "Anyone had any cool gifts/activities for Father’s Day?",
293
+ "reactions": [
294
+ {
295
+ "emoji": ":+1:",
296
+ "count": 1
297
+ }
298
+ ],
299
+ "replies": 0
300
+ },
301
+ {
302
+ "id":18,
303
+ "person": "Michelle Francisco",
304
+ "datetime": "2023-07-11 11:12 AM",
305
+ "message": "National Cow Appreciation Day - @julie.lowe how are the cows? :slightly_smiling_face: :cow:",
306
+ "reactions": [
307
+ {
308
+ "emoji": ":cow2:",
309
+ "count": 6
310
+ }
311
+ ],
312
+ "replies":7
313
+ },
314
+ {
315
+ "id":19,
316
+ "person": "richard.hand",
317
+ "datetime": "2023-06-20 9:45 AM",
318
+ "message": "I applied sunscreen poorly and have stripes of sunburn....",
319
+ "reactions": [
320
+ {
321
+ "emoji": ":sad-dog-2:",
322
+ "count": 2
323
+ },
324
+ {
325
+ "emoji": ":mario_sun:",
326
+ "count": 3
327
+ },
328
+ {
329
+ "emoji": ":rolling_on_the_floor_laughing:",
330
+ "count": 5
331
+ }
332
+ ],
333
+ "replies":0
334
+ },
335
+ {
336
+ "id":20,
337
+ "person": "Mrinalini Shekhawat",
338
+ "datetime": "2023-06-20 9:46 AM",
339
+ "message": "My 3 year old daughter went to GAP and selected a flower print shirt for my husband - Nishank (I have never seen him wear flower print, till yesterday). She also bought candy 'to share'.",
340
+ "reactions": [
341
+ {
342
+ "emoji": ":grinning:",
343
+ "count": 7
344
+ },
345
+ {
346
+ "emoji": ":+1:",
347
+ "count": 1
348
+ },
349
+ {
350
+ "emoji": ":heart:",
351
+ "count": 12
352
+ },
353
+ {
354
+ "emoji": ":flower:",
355
+ "count": 2
356
+ }
357
+ ],
358
+ "replies":0
359
+ },
360
+ {
361
+ "id":21,
362
+ "person": "Ahmad Shareef",
363
+ "datetime": "2023-06-20 10:20 AM",
364
+ "message": "@channel Who's going in on Wednesday!? For lunch, We will be having lunch from Bellagreen. If want lunch please drop a :lunch-bag: by EOD today. This will help me determine how much to order! Thank you:build_heart: Options Below , comes with chips and fresh fruit...",
365
+ "reactions": [
366
+ {
367
+ "emoji": ":lunch-bag:",
368
+ "count": 38
369
+ },
370
+ {
371
+ "emoji": ":sob:",
372
+ "count": 1
373
+ }
374
+ ],
375
+ "replies":0
376
+ },
377
+ {
378
+ "id":22,
379
+ "person": "Stanley Lee Bertrand",
380
+ "datetime": "2023-06-20 10:29 AM",
381
+ "message": "Hey, what do we do if B.R.A.D. kicks back and error? @Ethan Bowen @Doug Bowen",
382
+ "replies":0,
383
+ "reactions": [
384
+ {
385
+ "emoji": ":parking:",
386
+ "count": 1
387
+ }]
388
+ },
389
+ {
390
+ "id":23,
391
+ "person": "John Flaherty",
392
+ "datetime": "2023-06-20 11:16 AM",
393
+ "message": "@channel Also happening on Wednesday is the Woodside Build Center Tour beginning at 9am. I would like to have as many Builders in the office as possible. Please make every effort to be on-site. Thank you.",
394
+ "reactions": [
395
+ {
396
+ "emoji": ":+1:",
397
+ "count": 13
398
+ },
399
+ {
400
+ "emoji": ":hack4socialgood:",
401
+ "count": 7
402
+ }
403
+ ]
404
+ },
405
+ {
406
+ "id":24,
407
+ "person": "Michelle Francisco",
408
+ "datetime": "2023-06-20 11:34 AM",
409
+ "message": "BuildersAssemblesmaller.png",
410
+ "reactions": [
411
+ {
412
+ "emoji": ":hero:",
413
+ "count": 3
414
+ }
415
+ ],
416
+ "replies":0
417
+ },
418
+ {
419
+ "id":25,
420
+ "person": "Jordan Lene",
421
+ "datetime": "2023-06-20 12:31 PM",
422
+ "message": "., .,.;’/bcv=hc=bgx[pL;IKQWSDFGHNM,////",
423
+ "reactions": [
424
+ {
425
+ "emoji": ":cat:",
426
+ "count": 3
427
+ },
428
+ {
429
+ "emoji": ":baby:",
430
+ "count": 8
431
+ },
432
+ {
433
+ "emoji": ":cute_tears:",
434
+ "count": 1
435
+ },
436
+ {
437
+ "emoji": ":build_heart:",
438
+ "count": 1
439
+ }
440
+ ],
441
+ "replies":0
442
+ },
443
+ {
444
+ "id":26,
445
+ "person": "richard.hand",
446
+ "datetime": "2023-06-20 1:49 PM",
447
+ "message": "how to tell someone sitting behind you chewing ice from a solo cup that it is really on your nerves? - asking for a friend",
448
+ "replies":0
449
+ },
450
+ {
451
+ "id":27,
452
+ "person": "Michelle Francisco",
453
+ "datetime": "2023-07-13 5:23PM",
454
+ "message": "@Doug Bowen what's wrong with the J.O.H.N.?",
455
+ "reactions": [
456
+ {
457
+ "emoji": ":disgruntled-doug:",
458
+ "count": 2
459
+ }
460
+ ],
461
+ "replies": 6
462
+ },
463
+ {
464
+ "id":28,
465
+ "person": "Jason Riley",
466
+ "datetime": "2023-07-06 8:38AM",
467
+ "message": "Please wish @Christy Nolan a happy 2 year Slalomversary!",
468
+ "reactions": [
469
+ {
470
+ "emoji": ":celebrate-inclusive:",
471
+ "count": 6
472
+ },
473
+ {
474
+ "emoji": ":tada:",
475
+ "count": 1
476
+ },
477
+ {
478
+ "emoji": ":2-two:",
479
+ "count": 1
480
+ }
481
+ ],
482
+ "replies": 13
483
+ },
484
+ {
485
+ "id":29,
486
+ "person": "Alexa De La Garza",
487
+ "datetime": "2023-07-06 8:50AM",
488
+ "message": "@here Good morning everyone! We are having our CCC today in the rice room from 9:00-10:00am!",
489
+ "reactions": [
490
+ {
491
+ "emoji": ":clapping-inclusive:",
492
+ "count": 3
493
+ },
494
+ {
495
+ "emoji": ":coffee:",
496
+ "count": 4
497
+ },
498
+ {
499
+ "emoji": ":bean:",
500
+ "count": 3
501
+ }
502
+ ],
503
+ "replies": 0
504
+ },
505
+ {
506
+ "id":30,
507
+ "person": "Richard Hand",
508
+ "datetime": "2023-07-06 9:05AM",
509
+ "message": "Is anyone else getting signed out of their sessions from one day to the next? My Chrome tab that had a sharepoint open, logged me out, my Salesforce link, logged out... Anyone else?",
510
+ "reactions": [
511
+ {
512
+ "emoji": ":sad-face:",
513
+ "count": 1
514
+ }],
515
+ "replies": 0
516
+ },
517
+ {
518
+ "id":31,
519
+ "person": "Michelle Francisco",
520
+ "datetime": "2023-07-06 9:07AM",
521
+ "message": "I am not @Richard Hand",
522
+ "reactions": [
523
+ {
524
+ "emoji": ":build_heart:",
525
+ "count": 1
526
+ }],
527
+ "replies": 0
528
+ },
529
+ {
530
+ "id":32,
531
+ "person": "Inez Escandon",
532
+ "datetime": "2023-07-06 10:18PM",
533
+ "message": "UPDATE: They've been found! Thank you @Alexa De La Garza and @Josh Mascorro :meow_heart: If anyone sees/saw the wine bottles I won from the auction for Target Hunger can you please put them by Melanie’s desk :melting_face: I think I left them by Rice where we were having karaoke or maybe even by the elevators.",
534
+ "reactions": [
535
+ {
536
+ "emoji": ":wine:",
537
+ "count": 1
538
+ }],
539
+ "replies": 0
540
+ },
541
+ {
542
+ "id":33,
543
+ "person": "Ahmad Shareef",
544
+ "datetime": "2023-07-07 12:07 PM",
545
+ "message": "@here :alert-blue:calling all bakers!! Want to show off your skills & take on a challenge to be titled the best baker in the Houston Build Center?? Then enter The Great Build Bake Off!! :chefkiss::blob-birthdaycake::first_place_medal::blobwhee: We are doing Cakes this round:blob-birthdaycake:! Sign up HERE & bring your best slices on Wednesday, June 14th. More deets below :point_down: Please be sure to pre-cut the cake into bite-size, before the judging There will be a People’s Choice and Judges’ Choice as winners You do not need to be present during the judging time to enter. Bakeoff (2).png",
546
+ "reactions": [
547
+ {
548
+ "emoji": ":cake-cowboy:",
549
+ "count": 3
550
+ },
551
+ {
552
+ "emoji": ":blob-birthdaycake:",
553
+ "count": 2
554
+ }
555
+ ],
556
+ "replies": 0
557
+ },
558
+ {
559
+ "id":34,
560
+ "person": "Alexa De La Garza",
561
+ "datetime": "2023-07-07 2:25 PM",
562
+ "message": "@here Hello folks! B.R.A.D is working again if anyone in the office needs parking validation :brad-badge::blue_car:",
563
+ "reactions": [
564
+ {
565
+ "emoji": ":brad-bot:",
566
+ "count": 8
567
+ },
568
+ {
569
+ "emoji": ":hack4socialgood:",
570
+ "count": 1
571
+ },
572
+ {
573
+ "emoji": ":brad-badge:",
574
+ "count": 3
575
+ }
576
+ ],
577
+ "replies": 0
578
+ },
579
+ {
580
+ "id":35,
581
+ "person": "jmoney",
582
+ "datetime": "2023-07-07 5:39 PM",
583
+ "message": "Severe T storms just hit Northside. High winds, torrential downpour, and the traditional ceremonial power outage.",
584
+ "reactions": [
585
+ {
586
+ "emoji": ":open_mouth:",
587
+ "count": 1
588
+ },
589
+ {
590
+ "emoji": ":yes2:",
591
+ "count": 1
592
+ }
593
+ ],
594
+ "replies": 1
595
+ },
596
+ {
597
+ "id":36,
598
+ "person": "Doug Bowen",
599
+ "datetime": "2023-07-07 5:50 PM",
600
+ "message": "Be safe!",
601
+ "reactions": [
602
+ {
603
+ "emoji": ":build:",
604
+ "count": 1
605
+ }],
606
+ "replies": 0
607
+ },
608
+ {
609
+ "id":37,
610
+ "person": "jmoney",
611
+ "datetime": "2023-07-07 6:59 PM",
612
+ "message": "I call this \"lights-out grilled chicken nachos\"",
613
+ "reactions": [
614
+ {
615
+ "emoji": ":blueheart:",
616
+ "count": 7
617
+ },
618
+ {
619
+ "emoji": ":excuse-me-aless:",
620
+ "count": 3
621
+ },
622
+ {
623
+ "emoji": ":+1:",
624
+ "count": 2
625
+ },
626
+ {
627
+ "emoji": ":power-outage:",
628
+ "count": 1
629
+ }
630
+ ],
631
+ "replies": 0
632
+ },
633
+ {
634
+ "id":38,
635
+ "person": "Ahmad Shareef",
636
+ "datetime": "2023-07-10 11:18 AM",
637
+ "message": "@here Who's going in on Wednesday!? We will be having Tacos from Velvet Taco. If want lunch please drop a :taco: by EOD today:alert0:. This will help me determine how much to order! Thank you :build_heart: Buffalo Chicken - crisp tenders, house buffalo sauce, danish bleu cheese, ranch crema, carrots, micro celery, flour tortilla Picnic chicken - rotisserie chicken, avocado crema, warm honey-dijon potato salad, crispy chicken skin, cilantro, flour tortilla Mediterranean mushroom - grilled portobello mushrooms, french fries, cucumber, grilled heirloom tomatoes, dill, flour tortilla - Vegan Grilled salmon - napa slaw, citrus lime crema, pickled fresnos, roasted corn pico, avocado crema, micro cilantro, corn tortilla Side: Elote & chips- queso listo, Valentina, citrus lime crema, queso fresco, lime (edited)",
638
+ "reactions": [
639
+ {
640
+ "emoji": ":taco:",
641
+ "count": 42
642
+ },
643
+ {
644
+ "emoji": ":drooling_face:",
645
+ "count": 1
646
+ }
647
+ ],
648
+ "replies": 6
649
+ },
650
+ {
651
+ "id":39,
652
+ "person": "Ahmad Shareef",
653
+ "datetime": "2023-07-10 11:24 AM",
654
+ "message": "@here :ai:Hey HOU Build the second Hackathon Subject Matter Expert Series hosted by Carrick Carpenter, Miles Erickson and Etienne Ohl is this Wednesday, June 7th at 10:30am PT. Learn how to cruise quicker and securely with Generative AI! Check out the Hackathon events page.",
655
+ "replies": 0,
656
+ "reactions": [
657
+ {
658
+ "emoji": ":build_heart:",
659
+ "count": 2
660
+ },
661
+ {
662
+ "emoji": ":+1:",
663
+ "count": 2
664
+ }
665
+ ]
666
+ },
667
+ {
668
+ "id":40,
669
+ "person": "Robert Hailey",
670
+ "datetime": "2023-07-10 11:38 AM",
671
+ "message": "My notebook indicates there was a lunch-and-learn on robert's rules of order today, but I don't see it on the calendar. Was it cancelled/rescheduled? I don't even see the invite in my email. (edited)",
672
+ "reactions": [
673
+ {
674
+ "emoji": ":question:",
675
+ "count": 1
676
+ }],
677
+ "replies": 2
678
+ },
679
+ {
680
+ "id":41,
681
+ "person": "Linh Ta",
682
+ "datetime": "2023-07-10 11:49 AM",
683
+ "message": "Also happening tomorrow~ Wednesday June 7th at 5pm sharp is BUILD KARAOKE NIGHT!!!! :celebrate::micdrop-boom::dancefloor: @here",
684
+ "reactions": [
685
+ {
686
+ "emoji": ":celebrate-inclusive:",
687
+ "count": 5
688
+ },
689
+ {
690
+ "emoji": ":microphone:",
691
+ "count": 4
692
+ },
693
+ {
694
+ "emoji": ":dancefloor:",
695
+ "count": 1
696
+ }
697
+ ],
698
+ "replies": 5
699
+ },
700
+ {
701
+ "id":42,
702
+ "person": "jmoney",
703
+ "datetime": "2023-07-10 9:59 PM",
704
+ "message": "I'll miss WFWW with a cough and a fever :face_with_thermometer:",
705
+ "reactions": [
706
+ {
707
+ "emoji": ":get-well-soon:",
708
+ "count": 3
709
+ }
710
+ ],
711
+ "replies": 0
712
+ },
713
+ {
714
+ "id":43,
715
+ "person": "Steven Murray",
716
+ "datetime": "2023-07-10 6:16 AM",
717
+ "message": "BRAD is down this morning.",
718
+ "reactions": [
719
+ {
720
+ "emoji": ":disappointed_relieved:",
721
+ "count": 1
722
+ }
723
+ ],
724
+ "replies": 6
725
+ },
726
+ {
727
+ "id":44,
728
+ "person": "Melanie Halbert",
729
+ "datetime": "2023-07-11 8:43 AM",
730
+ "message": "Hey @channel, oddly specific request: If you’re an artistic human who plays Pokémon Go, please come find me when you have a little spare time. I’ve got a fun project for you.",
731
+ "reactions": [
732
+ {
733
+ "emoji": ":pokeball:",
734
+ "count": 5
735
+ }
736
+ ],
737
+ "replies": 3
738
+ },
739
+ {
740
+ "id":46,
741
+ "person": "Jane",
742
+ "datetime": "2023-07-11 9:52 AM",
743
+ "message": "replied to a thread: #greenshirts #nomemoneeded Well, we just had to! IMG_8782.JPG.jpg",
744
+ "reactions": [
745
+ {
746
+ "emoji": ":yes-flash:",
747
+ "count": 4
748
+ },
749
+ {
750
+ "emoji": ":pants:",
751
+ "count": 6
752
+ }
753
+ ],
754
+ "replies": 0
755
+ },
756
+ {
757
+ "id":47,
758
+ "person": "Doug Bowen",
759
+ "datetime": "2023-07-11 9:54 AM",
760
+ "message": "All thats left is shoes!!",
761
+ "reactions": [
762
+ {
763
+ "emoji": ":build:",
764
+ "count": 1
765
+ }],
766
+ "replies": 0
767
+ },
768
+ {
769
+ "id":48,
770
+ "person": "DataNinja",
771
+ "datetime": "2023-07-11 10:00 AM",
772
+ "message": "Let’s see who is up to the challenge @Doug Bowen",
773
+ "reactions": [
774
+ {
775
+ "emoji": ":build:",
776
+ "count": 1
777
+ }],
778
+ "replies": 0
779
+ },
780
+ {
781
+ "id":49,
782
+ "person": "Doug Bowen",
783
+ "datetime": "2023-07-11 10:12 AM",
784
+ "message": "Just FYI, our arcade machine (JOHN) is open for business! Let me know if you have any requests, concerns, or suggestions. For those asking, we have a digital marquee coming in the next few weeks and we'll be vinyl wrapping the cabinet closer to August (when our UX designer returns from leave) Have fun!",
785
+ "reactions": [
786
+ {
787
+ "emoji": ":build_heart:",
788
+ "count": 17
789
+ },
790
+ {
791
+ "emoji": ":hack4socialgood:",
792
+ "count": 9
793
+ },
794
+ {
795
+ "emoji": ":mario3:",
796
+ "count": 8
797
+ },
798
+ {
799
+ "emoji": ":arcade:",
800
+ "count": 5
801
+ },
802
+ {
803
+ "emoji": ":pacman:",
804
+ "count": 5
805
+ },
806
+ {
807
+ "emoji": ":nice_neon:",
808
+ "count": 3
809
+ }
810
+ ],
811
+ "replies": 0
812
+ },
813
+ {
814
+ "id":50,
815
+ "person": "Ahmad Shareef",
816
+ "datetime": "2023-07-17 8:51 AM",
817
+ "message": "@here Hope everyone had a restful 3-day weekend! Who's going in tomorrow!? We will be having Bowls from Genghis Grill. If want lunch please drop a :dumpling: by EOD today:alert0:. This will help me determine how much to order! Thank you :build_heart: Menu: Tofu 4 U Bowl - Tofu with dragon salt, yellow onions, broccoli, roasted bell peppers, roasted sesame garlic sauce, and white rice. Topped with toasted sesame seeds and green onions. Teriyaki Chicken - Chicken, broccoli, green onion, and pineapple in a sweet soy-ginger teriyaki sauce served with white rice. Topped with crunchy chow mein. Bangkok Bowl - Chicken, crushed red pepper, ginger, yellow & green onions, sugar snap peas, red bell peppers, carrots, and Udon noodles with a savory sauce. Topped with toasted sesame seeds and green onions. Supreme Fried Rice Bowl - Steak, chicken, and shrimp with fried rice (w/ yellow & green onions, red bell peppers, carrots, & egg).",
818
+ "reactions": [
819
+ {
820
+ "emoji": ":dumpling:",
821
+ "count": 34
822
+ },
823
+ {
824
+ "emoji": ":hearts:",
825
+ "count": 2
826
+ }
827
+ ],
828
+ "replies": 12
829
+ },
830
+ {
831
+ "id":51,
832
+ "person": "Phillip Nguyen",
833
+ "datetime": "2023-07-12 8:53 AM",
834
+ "message": "I’ll take a Bangkok bowl!",
835
+ "reactions": [
836
+ {
837
+ "emoji": ":bowl:",
838
+ "count": 1
839
+ }
840
+ ],
841
+ "replies": 0
842
+ },
843
+ {
844
+ "id":52,
845
+ "person": "Blake Bryce",
846
+ "datetime": "2023-07-12 9:02 AM",
847
+ "message": "Happy 6 year anniversary to the formation of Houston :_b: QE :celebrate-all: @Logan Le @Blake Bryce @King Khan",
848
+ "reactions": [
849
+ {
850
+ "emoji": ":clapping-inclusive:",
851
+ "count": 19
852
+ },
853
+ {
854
+ "emoji": ":_build_qe:",
855
+ "count": 11
856
+ },
857
+ {
858
+ "emoji": ":blake:",
859
+ "count": 5
860
+ },
861
+ {
862
+ "emoji": ":loganle:",
863
+ "count": 5
864
+ },
865
+ {
866
+ "emoji": ":salman:",
867
+ "count": 5
868
+ },
869
+ {
870
+ "emoji": ":build4:",
871
+ "count": 2
872
+ }
873
+ ],
874
+ "replies": 0
875
+ },
876
+ {
877
+ "id":53,
878
+ "person": "Michelle Francisco",
879
+ "datetime": "2023-07-12 10:28 AM",
880
+ "message": "Hey hey hey Houston! Hope you all had a relaxing and enjoyable 3-day weekend. Partners 4 Good will be building Worthy Bags Friday June 2 from 12-1pm 12:30-1:30pm. If you are interested in helping, reply here and I’ll forward you the invite. Also, feel free to just stop by and help out. Hope to see you Friday! (edited)",
881
+ "reactions": [
882
+ {
883
+ "emoji": ":heart:",
884
+ "count": 3
885
+ },
886
+ {
887
+ "emoji": ":build_heart:",
888
+ "count": 1
889
+ }
890
+ ],
891
+ "replies": 2
892
+ },
893
+ {
894
+ "id":54,
895
+ "person": "Ahmad Shareef",
896
+ "datetime": "2023-07-12 11:16 AM",
897
+ "message": "@here a quick note, the first session of the Hackathon Subject Matter Expert Series with Bethany Mudd and Chris Samuels is tomorrow, May 31st at 10:30am PT. Learn how to reimagine the art of the possible with Generative AI:ai:. You can join by using the add to calendar function from the Hackathon events page.",
898
+ "replies": 0,
899
+ "reactions": [
900
+ {
901
+ "emoji": ":build_heart:",
902
+ "count": 5
903
+ }]
904
+ },
905
+ {
906
+ "id":55,
907
+ "person": "Ahmad Shareef",
908
+ "datetime": "2023-07-12 11:54 AM",
909
+ "message": "@here Hey everyone! If you are currently at the Slalom office and drive a white Mercedes SUV (license plate OKPAKO), please move it immediately as it is parked in a reserved spot on Level 3 and will be towed if not moved by 1pm. giphy (4).gif",
910
+ "replies": 0,
911
+ "reactions": [
912
+ {
913
+ "emoji": ":no_mouth:",
914
+ "count": 1
915
+ }
916
+ ]
917
+ },
918
+ {
919
+ "id":56,
920
+ "person": "derreck.stellpflug",
921
+ "datetime": "2023-07-12 12:07 PM",
922
+ "message": ":alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0: :derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0: :alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0: I'M BACK :terminator: :derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0: :alert0::derreck_5_aws::alert0: :derreck_5_aws::ampersand: Can happily :happy-fox: :speaking_head_in_silhouette: Reeeport :bangbang: :alert0: :derreck_5_aws::alert0::derreck_5_aws::alert0: :alert0::derreck_5_aws: That the wrong :sadblob: has FINALLY been righted :face_exhaling: :derreck_5_aws::alert0::derreck_5_aws::alert0: :alert0::derreck_5_aws: I'VE RECEIVED :mailbox: MY SPECIALICZAR MEDALION :promptitude: :derreck_5_aws::alert0: :alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0: :derreck_5_aws::alert0::derreck_5_aws::alert0::derreck_5_aws::alert0: IMG_3492.heic",
923
+ "reactions": [
924
+ {
925
+ "emoji": ":hack4socialgood:",
926
+ "count": 9
927
+ },
928
+ {
929
+ "emoji": ":star2:",
930
+ "count": 8
931
+ },
932
+ {
933
+ "emoji": ":whoa-keanu:",
934
+ "count": 5
935
+ },
936
+ {
937
+ "emoji": ":firey-fire:",
938
+ "count": 9
939
+ },
940
+ {
941
+ "emoji": ":celebrate:",
942
+ "count": 5
943
+ },
944
+ {
945
+ "emoji": ":aws:",
946
+ "count": 6
947
+ },
948
+ {
949
+ "emoji": ":rainbow:",
950
+ "count": 2
951
+ },
952
+ {
953
+ "emoji": ":joy:",
954
+ "count": 3
955
+ },
956
+ {
957
+ "emoji": ":tada:",
958
+ "count": 2
959
+ },
960
+ {
961
+ "emoji": ":raised_hands:",
962
+ "count": 2
963
+ },
964
+ {
965
+ "emoji": ":100:",
966
+ "count": 1
967
+ },
968
+ {
969
+ "emoji": ":derreck:",
970
+ "count": 6
971
+ },
972
+ {
973
+ "emoji": ":alert-blue:",
974
+ "count": 2
975
+ },
976
+ {
977
+ "emoji": ":sparkles:",
978
+ "count": 2
979
+ },
980
+ {
981
+ "emoji": ":heart:",
982
+ "count": 2
983
+ },
984
+ {
985
+ "emoji": ":build:",
986
+ "count": 2
987
+ },
988
+ {
989
+ "emoji": ":dumbfounded-doug:",
990
+ "count": 3
991
+ }
992
+ ],
993
+ "replies": 0
994
+ },
995
+ {
996
+ "id":57,
997
+ "person": "Ethan Bowen",
998
+ "datetime": "2023-07-12 2:22 PM",
999
+ "message": "Hello fellow builders, :brad-badge: BRAD :brad-badge: will be down for the rest of the month as he undergoes an external rework and final physical build. Please ask the Ops team to validate your ticket in the mean time. Thanks everyone!",
1000
+ "replies": 1,
1001
+ "reactions": [
1002
+ {
1003
+ "emoji": ":build_heart:",
1004
+ "count": 1
1005
+ }
1006
+ ]
1007
+ },
1008
+ {
1009
+ "id":58,
1010
+ "person": "Linh Ta",
1011
+ "datetime": "2023-07-12 3:35 PM",
1012
+ "message": "Hi there - a few of us are meeting at RA Sushi for an impromptu happy hour! :cheers::kawaii-sushi: Join us - it's BYOD (Buy Your Own Drink)! :blob-wink:",
1013
+ "replies": 9,
1014
+ "reactions": [
1015
+ {
1016
+ "emoji": ":blobwhee:",
1017
+ "count": 1
1018
+ },
1019
+ {
1020
+ "emoji": "+3",
1021
+ "count": 1
1022
+ }
1023
+ ]
1024
+ },
1025
+ {
1026
+ "id":59,
1027
+ "person": "Jane",
1028
+ "datetime": "2023-07-13 9:52 AM",
1029
+ "message": "Tell me this isn’t relatable :joy: https://youtu.be/BKorP55Aqvg",
1030
+ "replies": 6,
1031
+ "reactions": [
1032
+ {
1033
+ "emoji": ":laughing:",
1034
+ "count": 3
1035
+ },
1036
+ {
1037
+ "emoji": ":yes2:",
1038
+ "count": 1
1039
+ }
1040
+ ]
1041
+ },
1042
+ {
1043
+ "id":60,
1044
+ "person": "Stefano",
1045
+ "datetime": "2023-07-13 9:53 AM",
1046
+ "message": "replied to a thread: Tell me this isn’t relatable :joy:… A classic, alongside this one: https://www.youtube.com/watch?v=y8OnoxKotPQ",
1047
+ "replies": 0,
1048
+ "reactions": [
1049
+ {
1050
+ "emoji": ":mindblown:",
1051
+ "count": 2
1052
+ }
1053
+ ]
1054
+ },
1055
+ {
1056
+ "id":61,
1057
+ "person": "John Flaherty",
1058
+ "datetime": "2023-07-13 10:24 AM",
1059
+ "message": "Happy 713 Day! image.png image.png",
1060
+ "replies": 0,
1061
+ "reactions": [
1062
+ {
1063
+ "emoji": ":seven:",
1064
+ "count": 15
1065
+ },
1066
+ {
1067
+ "emoji": ":one:",
1068
+ "count": 15
1069
+ },
1070
+ {
1071
+ "emoji": ":three:",
1072
+ "count": 15
1073
+ },
1074
+ {
1075
+ "emoji": ":+1:",
1076
+ "count": 1
1077
+ }
1078
+ ]
1079
+ },
1080
+ {
1081
+ "id":62,
1082
+ "person": "Chase",
1083
+ "datetime": "2023-07-13 10:26 AM",
1084
+ "message": "HTOWN TIL WE DROWN",
1085
+ "replies": 1,
1086
+ "reactions": [
1087
+ {
1088
+ "emoji": ":rolling_on_the_floor_laughing:",
1089
+ "count": 9
1090
+ },
1091
+ {
1092
+ "emoji": ":100:",
1093
+ "count": 4
1094
+ },
1095
+ {
1096
+ "emoji": ":gold-star:",
1097
+ "count": 2
1098
+ },
1099
+ {
1100
+ "emoji": ":grimacing:",
1101
+ "count": 1
1102
+ }
1103
+ ]
1104
+ },
1105
+ {
1106
+ "id":63,
1107
+ "person": "Chase",
1108
+ "datetime": "2023-07-13 10:36 AM",
1109
+ "message": "trill (896 kB) https://media4.giphy.com/media/x0vDHDAkAxS3S/giphy.gif?cid=6104955e484j64k7mgl4ober5tdsyqegtkuaok7gl1i14eta&ep=v1_gifs_translate&rid=giphy.gif&ct=g",
1110
+ "replies": 0,
1111
+ "reactions": [
1112
+ {
1113
+ "emoji": ":this:",
1114
+ "count": 3
1115
+ }
1116
+ ]
1117
+ },
1118
+ {
1119
+ "id":64,
1120
+ "person": "Michelle Francisco",
1121
+ "datetime": "10:38 AM",
1122
+ "message": "Happy birthday @Ray Lopez! H-Town and Prime days are Ray’s Day. balloons.jpeg balloons.jpeg",
1123
+ "replies": 23,
1124
+ "reactions": [
1125
+ {
1126
+ "emoji": "balloon",
1127
+ "count": 1
1128
+ }
1129
+ ]
1130
+ },
1131
+ {
1132
+ "id":65,
1133
+ "person": "Keri W",
1134
+ "datetime": "2023-07-13 3:14 PM",
1135
+ "message": "Hey Houston fam!:flamingo-dance: Love community theater? :performing_arts: Enjoy supporting local arts? Check out Theatre Southwest's Festival of Originals (FOO)! :tada: Theatre Southwest is a hidden gem :gem: just a hop, skip, and jump from the Build Center. In a single show, catch 5 short original works by different playwrights, each with a different director and cast. FOO runs weekends from July 28 to August 12 :spiral_calendar_pad: More info and tickets are available at the TSW website. Don't miss out!",
1136
+ "replies": 3,
1137
+ "reactions": [
1138
+ {
1139
+ "emoji": ":build_heart:",
1140
+ "count": 5
1141
+ },
1142
+ {
1143
+ "emoji": ":performing_arts:",
1144
+ "count": 3
1145
+ }
1146
+ ]
1147
+ },
1148
+ {
1149
+ "id":66,
1150
+ "person": "Michelle Francisco",
1151
+ "datetime": "2023-07-13 4:04 PM",
1152
+ "message": "Next Friday - Bring Your Kids to Work Day Have your kiddos ever wondered what you do all day at work or wanted to see the office? Get ready for a fun time that will surely leave them wide-eyed with wonder and brimming with excitement! It’s time to mark your calendars for our. Kindly fill out the RSVP link here by July 14th. Here are some additional things to know: Kid Age Range 6 -16 Parents must be involved during this time frame (this is not a babysitting event) Have some fun!",
1153
+ "replies": 0,
1154
+ "reactions": [
1155
+ {
1156
+ "emoji": ":build_heart:",
1157
+ "count": 5
1158
+ }]
1159
+ },
1160
+ {
1161
+ "id":67,
1162
+ "person": "Doug Bowen",
1163
+ "datetime": "2023-07-11 10:12 AM",
1164
+ "message": "I love subway. I'm going to order 10 footlongs for the team. Please drop a :subway: if you want to join in. I'll be ordering at 11:30. Thanks",
1165
+ "reactions": [
1166
+ {
1167
+ "emoji": ":subway:",
1168
+ "count": 3
1169
+ }
1170
+ ],
1171
+ "replies": 0
1172
+ },
1173
+ {
1174
+ "id":68,
1175
+ "person": "Srijaya Suresh",
1176
+ "datetime": "2023-07-11 10:12 AM",
1177
+ "message": "Is it time for Blake to take the Milk Challenge?!?",
1178
+ "reactions": [
1179
+ {
1180
+ "emoji": ":milk:",
1181
+ "count": 3
1182
+ }
1183
+ ],
1184
+ "replies": 0
1185
+ },
1186
+ {
1187
+ "id":69,
1188
+ "person": "Srijaya Suresh",
1189
+ "datetime": "2023-07-14 10:12 AM",
1190
+ "message": "Hey Blake, Got milk?!?",
1191
+ "reactions": [
1192
+ {
1193
+ "emoji": ":milk:",
1194
+ "count": 3
1195
+ }
1196
+ ],
1197
+ "replies": 0
1198
+ }, {
1199
+ "id":70,
1200
+ "person": "Michelle Francisco",
1201
+ "datetime": "2023-07-14 10:12 AM",
1202
+ "message": "Did someone say MILK? @BlakeBryce?!?",
1203
+ "reactions": [
1204
+ {
1205
+ "emoji": ":milk:",
1206
+ "count": 3
1207
+ }
1208
+ ],
1209
+ "replies": 0
1210
+ },
1211
+ {
1212
+ "id":71,
1213
+ "person": "Blake Bryce",
1214
+ "datetime": "2023-07-14 10:12 AM",
1215
+ "message": "Never drank milk.",
1216
+ "reactions": [
1217
+ {
1218
+ "emoji": ":milk:",
1219
+ "count": 2
1220
+ }
1221
+ ],
1222
+ "replies": 0
1223
+ },
1224
+ {
1225
+ "id":72,
1226
+ "person": "Kim Adams",
1227
+ "datetime": "2023-07-14 10:12 AM",
1228
+ "message": "Blake should drink milk.",
1229
+ "reactions": [
1230
+ {
1231
+ "emoji": ":milk:",
1232
+ "count": 2
1233
+ }
1234
+ ],
1235
+ "replies": 0
1236
+ }
1237
+ ]
slack_processing/data/themes.json DELETED
@@ -1,398 +0,0 @@
1
- [
2
- {
3
- "datetime": "2023-07-11 9:21 AM",
4
- "theme": "D&D Campaign",
5
- "modifier": 0.0,
6
- "message": "IMPORTANT ADDITION You do NOT need ANY experience or knowledge of D&D to join the one-shot campaign. R2 will walk you through everything you need to know. Don't be shy and join us! (edited)",
7
- "person": "Keri W",
8
- "postId": 2,
9
- "themeSimilarity": 1.0
10
- },
11
- {
12
- "datetime": "2023-07-11 9:21 AM",
13
- "theme": "Availability",
14
- "modifier": 1.0,
15
- "message": "After the summer then I will be more available.",
16
- "person": "Brad Merrell",
17
- "postId": 3,
18
- "themeSimilarity": 1.0
19
- },
20
- {
21
- "datetime": "2023-07-11 9:21 AM",
22
- "theme": "Meeting",
23
- "modifier": 0.0,
24
- "message": "@here L&L starting in 5 mins. If you are in the office Feel free to come to RICE. AI Tutoring Paving the Way to Better Tomorrows in Education\nhttps//teams.microsoft.com/l/meetup-join/19%3ameeting_MTg2OWRkYzgtYTdmOS00NTk4LWE4MmQ[\u2026]2c%22Oid%22%3a%22bca811aa-1982-4f3b-b602-bca1a89180dc%22%7d",
25
- "person": "Jay Patel",
26
- "postId": 4,
27
- "themeSimilarity": 1.0
28
- },
29
- {
30
- "datetime": "2023-07-11 9:21 AM",
31
- "theme": "Celebration",
32
- "modifier": 10.0,
33
- "message": "It's @Sam \u2019s 2 year Slalomversary. Sam it's been a pleasure to be on a team with you and thanks for everything you do at _build especially around the ERGs. Congratulations!",
34
- "person": "Manik",
35
- "postId": 5,
36
- "themeSimilarity": 1.0
37
- },
38
- {
39
- "datetime": "2023-07-11 9:21 AM",
40
- "theme": "Celebration",
41
- "modifier": 0.0,
42
- "message": "Happy Slalomversary my dear friend! @Sam hugging_face",
43
- "person": "\u028e\u05df\u05df\u01dd\u029e",
44
- "postId": 8,
45
- "themeSimilarity": 1.0
46
- },
47
- {
48
- "datetime": "2023-07-11 9:21 AM",
49
- "theme": "Maintenance",
50
- "modifier": 0.0,
51
- "message": "FYI at 330 today I'll be taking the Arcade machine down for maintenance. It will actually remain down until next Wednesday morning as I work through some marquee configuration. dealwithit",
52
- "person": "Doug Bowen",
53
- "postId": 10,
54
- "themeSimilarity": 1.0
55
- },
56
- {
57
- "datetime": "2023-07-11 9:21 AM",
58
- "theme": "Appreciation",
59
- "modifier": 0.0,
60
- "message": "Thank you to everyone who came into the office yesterday in support of our Build Center tour for Woodside Energy and AWS. Special thanks to @Christy Nolan and @Danny Weldon for their support presenting \u201chow we work\u201d and \u201cwhat we\u2019re working on\u201d. We\u2019re well positioned to win work with the buyer at Woodside stating \u201cseveral consulting companies have pitched to me but nobody aligns better with my vision than Slalom does\u201d.",
61
- "person": "John Flaherty",
62
- "postId": 11,
63
- "themeSimilarity": 1.0
64
- },
65
- {
66
- "datetime": "2023-07-11 9:21 AM",
67
- "theme": "Time Sheets",
68
- "modifier": 0.0,
69
- "message": "Reminder Time sheets!",
70
- "person": "Slackbot",
71
- "postId": 13,
72
- "themeSimilarity": 1.0
73
- },
74
- {
75
- "datetime": "2023-07-11 9:21 AM",
76
- "theme": "Date Night",
77
- "modifier": 0.0,
78
- "message": "Date night with my wife at the Sugar Land Space Cowboys game.",
79
- "person": "Steven Murray",
80
- "postId": 15,
81
- "themeSimilarity": 1.0
82
- },
83
- {
84
- "datetime": "2023-07-11 9:21 AM",
85
- "theme": "Father'S Day",
86
- "modifier": 0.0,
87
- "message": "Happy Father's day to all you _Builder Dads out there!",
88
- "person": "Naeem",
89
- "postId": 16,
90
- "themeSimilarity": 1.0
91
- },
92
- {
93
- "datetime": "2023-07-11 9:21 AM",
94
- "theme": "Father'S Day",
95
- "modifier": 0.0,
96
- "message": "Anyone had any cool gifts/activities for Father\u2019s Day?",
97
- "person": "Michelle Francisco",
98
- "postId": 17,
99
- "themeSimilarity": 1.0
100
- },
101
- {
102
- "datetime": "2023-07-11 9:21 AM",
103
- "theme": "Cow Appreciation",
104
- "modifier": 7.0,
105
- "message": "National Cow Appreciation Day - @julie.lowe how are the cows? slightly_smiling_face cow",
106
- "person": "Michelle Francisco",
107
- "postId": 18,
108
- "themeSimilarity": 1.0
109
- },
110
- {
111
- "datetime": "2023-07-11 9:21 AM",
112
- "theme": "Sunburn",
113
- "modifier": 0.0,
114
- "message": "I applied sunscreen poorly and have stripes of sunburn....",
115
- "person": "richard.hand",
116
- "postId": 19,
117
- "themeSimilarity": 1.0
118
- },
119
- {
120
- "datetime": "2023-07-11 9:21 AM",
121
- "theme": "Gift",
122
- "modifier": 0.0,
123
- "message": "My 3 year old daughter went to GAP and selected a flower print shirt for my husband - Nishank (I have never seen him wear flower print till yesterday). She also bought candy 'to share'.",
124
- "person": "Mrinalini Shekhawat",
125
- "postId": 20,
126
- "themeSimilarity": 1.0
127
- },
128
- {
129
- "datetime": "2023-07-11 9:21 AM",
130
- "theme": "Lunch Order",
131
- "modifier": 0.0,
132
- "message": "@channel Who's going in on Wednesday!? For lunch We will be having lunch from Bellagreen. If want lunch please drop a lunch-bag by EOD today. This will help me determine how much to order! Thank youbuild_heart Options Below comes with chips and fresh fruit...",
133
- "person": "Ahmad Shareef",
134
- "postId": 21,
135
- "themeSimilarity": 1.0
136
- },
137
- {
138
- "datetime": "2023-07-11 9:21 AM",
139
- "theme": "Build Center",
140
- "modifier": NaN,
141
- "message": "@channel Also happening on Wednesday is the Woodside Build Center Tour beginning at 9am. I would like to have as many Builders in the office as possible. Please make every effort to be on-site. Thank you.",
142
- "person": "John Flaherty",
143
- "postId": 23,
144
- "themeSimilarity": 1.0
145
- },
146
- {
147
- "datetime": "2023-07-11 9:21 AM",
148
- "theme": "Etiquette",
149
- "modifier": 0.0,
150
- "message": "how to tell someone sitting behind you chewing ice from a solo cup that it is really on your nerves? - asking for a friend",
151
- "person": "richard.hand",
152
- "postId": 26,
153
- "themeSimilarity": 1.0
154
- },
155
- {
156
- "datetime": "2023-07-11 9:21 AM",
157
- "theme": "Meeting",
158
- "modifier": 0.0,
159
- "message": "@here Good morning everyone! We are having our CCC today in the rice room from 900-1000am!",
160
- "person": "Alexa De La Garza",
161
- "postId": 29,
162
- "themeSimilarity": 1.0
163
- },
164
- {
165
- "datetime": "2023-07-11 9:21 AM",
166
- "theme": "Technical Issue",
167
- "modifier": 0.0,
168
- "message": "Is anyone else getting signed out of their sessions from one day to the next? My Chrome tab that had a sharepoint open logged me out my Salesforce link logged out... Anyone else?",
169
- "person": "Richard Hand",
170
- "postId": 30,
171
- "themeSimilarity": 1.0
172
- },
173
- {
174
- "datetime": "2023-07-11 9:21 AM",
175
- "theme": "Found",
176
- "modifier": 0.0,
177
- "message": "UPDATE They've been found! Thank you @Alexa De La Garza and @Josh Mascorro meow_heart If anyone sees/saw the wine bottles I won from the auction for Target Hunger can you please put them by Melanie\u2019s desk melting_face I think I left them by Rice where we were having karaoke or maybe even by the elevators.",
178
- "person": "Inez Escandon",
179
- "postId": 32,
180
- "themeSimilarity": 1.0
181
- },
182
- {
183
- "datetime": "2023-07-11 9:21 AM",
184
- "theme": "Bake Off",
185
- "modifier": 0.0,
186
- "message": "@here alert-bluecalling all bakers!! Want to show off your skills & take on a challenge to be titled the best baker in the Houston Build Center?? Then enter The Great Build Bake Off!! chefkissblob-birthdaycakefirst_place_medalblobwhee We are doing Cakes this roundblob-birthdaycake! Sign up HERE & bring your best slices on Wednesday June 14th. More deets below point_down Please be sure to pre-cut the cake into bite-size before the judging There will be a People\u2019s Choice and Judges\u2019 Choice as winners You do not need to be present during the judging time to enter. Bakeoff (2).png",
187
- "person": "Ahmad Shareef",
188
- "postId": 33,
189
- "themeSimilarity": 1.0
190
- },
191
- {
192
- "datetime": "2023-07-11 9:21 AM",
193
- "theme": "Parking Validation",
194
- "modifier": 0.0,
195
- "message": "@here Hello folks! B.R.A.D is working again if anyone in the office needs parking validation brad-badgeblue_car",
196
- "person": "Alexa De La Garza",
197
- "postId": 34,
198
- "themeSimilarity": 1.0
199
- },
200
- {
201
- "datetime": "2023-07-11 9:21 AM",
202
- "theme": "Severe Storms",
203
- "modifier": 1.0,
204
- "message": "Severe T storms just hit Northside. High winds torrential downpour and the traditional ceremonial power outage.",
205
- "person": "jmoney",
206
- "postId": 35,
207
- "themeSimilarity": 1.0
208
- },
209
- {
210
- "datetime": "2023-07-11 9:21 AM",
211
- "theme": "Safety",
212
- "modifier": 0.0,
213
- "message": "Be safe!",
214
- "person": "Doug Bowen",
215
- "postId": 36,
216
- "themeSimilarity": 1.0
217
- },
218
- {
219
- "datetime": "2023-07-11 9:21 AM",
220
- "theme": "Lunch Order",
221
- "modifier": 6.0,
222
- "message": "@here Who's going in on Wednesday!? We will be having Tacos from Velvet Taco. If want lunch please drop a taco by EOD todayalert0. This will help me determine how much to order! Thank you build_heart Buffalo Chicken - crisp tenders house buffalo sauce danish bleu cheese ranch crema carrots micro celery flour tortilla Picnic chicken - rotisserie chicken avocado crema warm honey-dijon potato salad crispy chicken skin cilantro flour tortilla Mediterranean mushroom - grilled portobello mushrooms french fries cucumber grilled heirloom tomatoes dill flour tortilla - Vegan Grilled salmon - napa slaw citrus lime crema pickled fresnos roasted corn pico avocado crema micro cilantro corn tortilla Side Elote & chips- queso listo Valentina citrus lime crema queso fresco lime (edited)",
223
- "person": "Ahmad Shareef",
224
- "postId": 38,
225
- "themeSimilarity": 1.0
226
- },
227
- {
228
- "datetime": "2023-07-11 9:21 AM",
229
- "theme": "Hackathon",
230
- "modifier": 0.0,
231
- "message": "@here aiHey HOU Build the second Hackathon Subject Matter Expert Series hosted by Carrick Carpenter Miles Erickson and Etienne Ohl is this Wednesday June 7th at 1030am PT. Learn how to cruise quicker and securely with Generative AI! Check out the Hackathon events page.",
232
- "person": "Ahmad Shareef",
233
- "postId": 39,
234
- "themeSimilarity": 1.0
235
- },
236
- {
237
- "datetime": "2023-07-11 9:21 AM",
238
- "theme": "Cancelled",
239
- "modifier": 2.0,
240
- "message": "My notebook indicates there was a lunch-and-learn on robert's rules of order today but I don't see it on the calendar. Was it cancelled/rescheduled? I don't even see the invite in my email. (edited)",
241
- "person": "Robert Hailey",
242
- "postId": 40,
243
- "themeSimilarity": 1.0
244
- },
245
- {
246
- "datetime": "2023-07-11 9:21 AM",
247
- "theme": "Karaoke Night",
248
- "modifier": 5.0,
249
- "message": "Also happening tomorrow~ Wednesday June 7th at 5pm sharp is BUILD KARAOKE NIGHT!!!! celebratemicdrop-boomdancefloor @here",
250
- "person": "Linh Ta",
251
- "postId": 41,
252
- "themeSimilarity": 1.0
253
- },
254
- {
255
- "datetime": "2023-07-11 9:21 AM",
256
- "theme": "Art Project",
257
- "modifier": 3.0,
258
- "message": "Hey @channel oddly specific request If you\u2019re an artistic human who plays Pok\u00e9mon Go please come find me when you have a little spare time. I\u2019ve got a fun project for you.",
259
- "person": "Melanie Halbert",
260
- "postId": 44,
261
- "themeSimilarity": 1.0
262
- },
263
- {
264
- "datetime": "2023-07-11 9:21 AM",
265
- "theme": "Shoes",
266
- "modifier": 0.0,
267
- "message": "All thats left is shoes!!",
268
- "person": "Doug Bowen",
269
- "postId": 47,
270
- "themeSimilarity": 1.0
271
- },
272
- {
273
- "datetime": "2023-07-11 9:21 AM",
274
- "theme": "Arcade Machine",
275
- "modifier": 0.0,
276
- "message": "Just FYI our arcade machine (JOHN) is open for business! Let me know if you have any requests concerns or suggestions. For those asking we have a digital marquee coming in the next few weeks and we'll be vinyl wrapping the cabinet closer to August (when our UX designer returns from leave) Have fun!",
277
- "person": "Doug Bowen",
278
- "postId": 49,
279
- "themeSimilarity": 1.0
280
- },
281
- {
282
- "datetime": "2023-07-11 9:21 AM",
283
- "theme": "Lunch Order",
284
- "modifier": 12.0,
285
- "message": "@here Hope everyone had a restful 3-day weekend! Who's going in tomorrow!? We will be having Bowls from Genghis Grill. If want lunch please drop a dumpling by EOD todayalert0. This will help me determine how much to order! Thank you build_heart Menu Tofu 4 U Bowl - Tofu with dragon salt yellow onions broccoli roasted bell peppers roasted sesame garlic sauce and white rice. Topped with toasted sesame seeds and green onions. Teriyaki Chicken - Chicken broccoli green onion and pineapple in a sweet soy-ginger teriyaki sauce served with white rice. Topped with crunchy chow mein. Bangkok Bowl - Chicken crushed red pepper ginger yellow & green onions sugar snap peas red bell peppers carrots and Udon noodles with a savory sauce. Topped with toasted sesame seeds and green onions. Supreme Fried Rice Bowl - Steak chicken and shrimp with fried rice (w/ yellow & green onions red bell peppers carrots & egg).",
286
- "person": "Ahmad Shareef",
287
- "postId": 50,
288
- "themeSimilarity": 1.0
289
- },
290
- {
291
- "datetime": "2023-07-11 9:21 AM",
292
- "theme": "Food",
293
- "modifier": 0.0,
294
- "message": "I\u2019ll take a Bangkok bowl!",
295
- "person": "Phillip Nguyen",
296
- "postId": 51,
297
- "themeSimilarity": 1.0
298
- },
299
- {
300
- "datetime": "2023-07-11 9:21 AM",
301
- "theme": "Anniversary",
302
- "modifier": 0.0,
303
- "message": "Happy 6 year anniversary to the formation of Houston _b QE celebrate-all @Logan Le @Blake Bryce @King Khan",
304
- "person": "Blake Bryce",
305
- "postId": 52,
306
- "themeSimilarity": 1.0
307
- },
308
- {
309
- "datetime": "2023-07-11 9:21 AM",
310
- "theme": "Volunteer Opportunity",
311
- "modifier": 2.0,
312
- "message": "Hey hey hey Houston! Hope you all had a relaxing and enjoyable 3-day weekend. Partners 4 Good will be building Worthy Bags Friday June 2 from 12-1pm 1230-130pm. If you are interested in helping reply here and I\u2019ll forward you the invite. Also feel free to just stop by and help out. Hope to see you Friday! (edited)",
313
- "person": "Michelle Francisco",
314
- "postId": 53,
315
- "themeSimilarity": 1.0
316
- },
317
- {
318
- "datetime": "2023-07-11 9:21 AM",
319
- "theme": "Hackathon",
320
- "modifier": 0.0,
321
- "message": "@here a quick note the first session of the Hackathon Subject Matter Expert Series with Bethany Mudd and Chris Samuels is tomorrow May 31st at 1030am PT. Learn how to reimagine the art of the possible with Generative AIai. You can join by using the add to calendar function from the Hackathon events page.",
322
- "person": "Ahmad Shareef",
323
- "postId": 54,
324
- "themeSimilarity": 1.0
325
- },
326
- {
327
- "datetime": "2023-07-11 9:21 AM",
328
- "theme": "Parking Issue",
329
- "modifier": 0.0,
330
- "message": "@here Hey everyone! If you are currently at the Slalom office and drive a white Mercedes SUV (license plate OKPAKO) please move it immediately as it is parked in a reserved spot on Level 3 and will be towed if not moved by 1pm. giphy (4).gif",
331
- "person": "Ahmad Shareef",
332
- "postId": 55,
333
- "themeSimilarity": 1.0
334
- },
335
- {
336
- "datetime": "2023-07-11 9:21 AM",
337
- "theme": "Maintenance",
338
- "modifier": 1.0,
339
- "message": "Hello fellow builders brad-badge BRAD brad-badge will be down for the rest of the month as he undergoes an external rework and final physical build. Please ask the Ops team to validate your ticket in the mean time. Thanks everyone!",
340
- "person": "Ethan Bowen",
341
- "postId": 57,
342
- "themeSimilarity": 1.0
343
- },
344
- {
345
- "datetime": "2023-07-11 9:21 AM",
346
- "theme": "Impromptu Happy",
347
- "modifier": 9.0,
348
- "message": "Hi there - a few of us are meeting at RA Sushi for an impromptu happy hour! cheerskawaii-sushi Join us - it's BYOD (Buy Your Own Drink)! blob-wink",
349
- "person": "Linh Ta",
350
- "postId": 58,
351
- "themeSimilarity": 1.0
352
- },
353
- {
354
- "datetime": "2023-07-11 9:21 AM",
355
- "theme": "713 Day",
356
- "modifier": 0.0,
357
- "message": "Happy 713 Day! image.png image.png",
358
- "person": "John Flaherty",
359
- "postId": 61,
360
- "themeSimilarity": 1.0
361
- },
362
- {
363
- "datetime": "2023-07-11 9:21 AM",
364
- "theme": "Birthday",
365
- "modifier": 23.0,
366
- "message": "Happy birthday @Ray Lopez! H-Town and Prime days are Ray\u2019s Day. balloons.jpeg balloons.jpeg",
367
- "person": "Michelle Francisco",
368
- "postId": 64,
369
- "themeSimilarity": 1.0
370
- },
371
- {
372
- "datetime": "2023-07-11 9:21 AM",
373
- "theme": "Theatre Southwest'S",
374
- "modifier": 3.0,
375
- "message": "Hey Houston fam!flamingo-dance Love community theater? performing_arts Enjoy supporting local arts? Check out Theatre Southwest's Festival of Originals (FOO)! tada Theatre Southwest is a hidden gem gem just a hop skip and jump from the Build Center. In a single show catch 5 short original works by different playwrights each with a different director and cast. FOO runs weekends from July 28 to August 12 spiral_calendar_pad More info and tickets are available at the TSW website. Don't miss out!",
376
- "person": "Keri W",
377
- "postId": 65,
378
- "themeSimilarity": 1.0
379
- },
380
- {
381
- "datetime": "2023-07-11 9:21 AM",
382
- "theme": "Bring Your",
383
- "modifier": 0.0,
384
- "message": "Next Friday - Bring Your Kids to Work Day Have your kiddos ever wondered what you do all day at work or wanted to see the office? Get ready for a fun time that will surely leave them wide-eyed with wonder and brimming with excitement! It\u2019s time to mark your calendars for our. Kindly fill out the RSVP link here by July 14th. Here are some additional things to know Kid Age Range 6 -16 Parents must be involved during this time frame (this is not a babysitting event) Have some fun!",
385
- "person": "Michelle Francisco",
386
- "postId": 66,
387
- "themeSimilarity": 1.0
388
- },
389
- {
390
- "datetime": "2023-07-11 9:21 AM",
391
- "theme": "Subway Order",
392
- "modifier": 0.0,
393
- "message": "I love subway. I'm going to order 10 footlongs for the team. Please drop a subway if you want to join in. I'll be ordering at 1130. Thanks",
394
- "person": "Doug Bowen",
395
- "postId": 67,
396
- "themeSimilarity": 1.0
397
- }
398
- ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
slack_processing/data/topics.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ slalomversary, anniversary
2
+ parking, parking validation
3
+ lunch and learn, l&l, lunch-and-learn, lunch & learn, l and l
4
+ tour, build center tour, bc tour
5
+ d&d, dungeons and dragons
slack_processing/slack_data_prep.py CHANGED
@@ -2,64 +2,83 @@ import pandas as pd
2
  import numpy as np
3
  import openai, os, tiktoken, json
4
  from datetime import datetime as dt
5
- import importlib.util
6
  from openai.embeddings_utils import cosine_similarity, get_embedding
7
  from sklearn.metrics import classification_report, PrecisionRecallDisplay
 
 
8
  from collections import Counter
9
  from nltk.corpus import wordnet
10
  from nltk.tokenize import word_tokenize
11
- from utilities import api_keys
 
 
12
 
13
- openai.api_key = api_keys.APIKeys().get_key('OPENAI_API_KEY')
14
 
15
  # Set embedding model parameters
16
  pd.set_option('display.max_rows', None)
17
  pd.set_option('display.max_columns', None)
18
 
19
  SAMPLE_SIZE = 500
20
- MAX_TOKENS = 8000
21
- TOPIC_TOKENS = 100
22
  EMBEDDING_MODEL = "text-embedding-ada-002"
23
  EMBEDDING_ENCODING = "cl100k_base"
24
 
25
- INPUT_DATAPATH = "slack_processing/data/slack.json"
26
  OUTPUT_THEME_PATH = "slack_processing/data/themes.json"
27
  OUTPUT_THEME_EMBEDDINGS_PATH = "slack_processing/data/slack_with_theme_embeddings.json"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
  df=pd.DataFrame()
30
  themes = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
- # Set up the initial reference topics
33
- reference_topics = set([
34
- "Slalomversary",
35
- "Birthday",
36
- "Achievement",
37
- "Teamwork",
38
- "Innovation"
39
- ])
40
-
41
- class Theme:
42
- def __init__(self, datetime, theme, modifier, person, postId, similarity, message):
43
- self.datetime = datetime
44
- self.theme = theme
45
- self.modifier = modifier
46
- self.message=message
47
- self.person=person
48
- self.postId=postId
49
- #self.topReaction=topReaction
50
- self.themeSimilarity=similarity
51
-
52
- def to_dict(self):
53
- return {
54
- 'datetime':self.datetime,
55
- 'theme': self.theme,
56
- 'modifier': self.modifier,
57
- 'message': self.message,
58
- 'person': self.person,
59
- 'postId': self.postId,
60
- #'topReaction': self.topReaction,
61
- 'themeSimilarity': self.themeSimilarity
62
- }
63
 
64
  def ProcessReactions(reactions,id):
65
  highestcount=0
@@ -72,24 +91,29 @@ def ProcessReactions(reactions,id):
72
  if reaction['count'] > highestcount:
73
  highestcount = reaction['count']
74
  highestcount_reaction = stripped_reaction
75
- print("returning highestcount_reaction:", highestcount_reaction)
76
  return highestcount_reaction
77
 
78
  def CleanMessage(message):
79
- custom_punctuation = ':,'
 
 
 
 
 
80
  translator = str.maketrans('', '', custom_punctuation)
81
- return message.translate(translator)
 
82
 
83
- def TruncateToTwoWords(topic):
84
  words = topic.split()
85
- truncated_topic = " ".join(words[:2])
86
  return truncated_topic.title()
87
 
88
  def WriteThemes(themes):
89
  themes_dict = [theme for theme in themes]
90
  with open(OUTPUT_THEME_PATH, "w") as json_file:
91
  json.dump(themes_dict, json_file, indent=4)
92
- print(f"Themes saved to {OUTPUT_THEME_PATH}")
93
 
94
  def ProcessDateTime(date_time):
95
  date_time = dt(2023, 7, 11, 9, 21)
@@ -97,45 +121,73 @@ def ProcessDateTime(date_time):
97
  json_data = f'{formatted_time}'
98
  return json_data
99
 
100
- # Update the process_message function
101
- def ProcessMessage(datetime, message, replies, person, id):
102
- message = CleanMessage(message)
103
- completion = openai.ChatCompletion.create(
104
- model="gpt-3.5-turbo",
105
  messages=[
106
- {"role": "system", "content": "Summarize the message in 1-2 words. If you can't summarize, return topic, holiday, key activity or thing. Otherwise return Unknown"},
107
- {"role": "user", "content": message},
108
  ],
109
- max_tokens=TOPIC_TOKENS,
110
- n=7,
111
- temperature=0.2,
112
- stop=None
 
113
  )
114
- generated_topics = list(set(TruncateToTwoWords(topic) for choice in completion.choices for topic in choice.message.content.strip().split("\n")))
115
- #if reaction is not None:
116
- # generated_topics.append(reaction.title())
117
- print("Generated topics:", generated_topics)
118
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  # Compute semantic similarity between generated topics and existing reference topics
120
  similarity_scores = []
121
  generated_topics_indices = []
122
  counter=0
123
  exact_match=False
124
  most_similar_topic = "Unknown"
125
- for generated_topic in generated_topics:
126
- print("Generated topic:", generated_topic)
 
 
127
  if generated_topic != "Unknown":
128
  generated_topics_indices.append(counter)
129
  generated_tokens = word_tokenize(generated_topic)
130
  generated_tokens_str = " ".join(generated_tokens)
131
  topic_similarities = []
132
- for reference_topic in reference_topics:
133
- print(" Reference topic:", reference_topic)
134
  reference_tokens = word_tokenize(reference_topic)
135
  reference_tokens_str = " ".join(reference_tokens)
136
  similarity_score, exact_match = compute_similarity(generated_tokens_str, reference_tokens_str)
137
  if exact_match:
138
- print(' *Exact match found, reference topic:', reference_topic)
139
  most_similar_topic = reference_topic
140
  most_similar_score = 1.0
141
  break
@@ -143,9 +195,9 @@ def ProcessMessage(datetime, message, replies, person, id):
143
  if exact_match:
144
  break
145
  similarity_scores.append(topic_similarities)
 
 
146
  counter+=1
147
-
148
- print("Similarity scores:", similarity_scores)
149
  if len(similarity_scores) > 0 and not exact_match:
150
  most_similar_score=0
151
  # Aggregate the similarity scores for each generated topic
@@ -154,21 +206,71 @@ def ProcessMessage(datetime, message, replies, person, id):
154
  # Find the index of the topic with the highest aggregated score
155
  most_similar_index = np.argmax(aggregated_scores)
156
  most_similar_topic_index = generated_topics_indices[most_similar_index]
157
- most_similar_topic = generated_topics[most_similar_topic_index]
158
  most_similar_score=similarity_scores[most_similar_index]
159
  print("Most similar topic:", most_similar_topic, "with score:", most_similar_score)
160
-
161
- if most_similar_topic != "Unknown":
162
- if most_similar_topic not in reference_topics:
163
- reference_topics.add(most_similar_topic)
164
- most_similar_score=1.0
165
-
166
- #print(f"{id} From message:'{message}' to theme: {most_similar_topic}")
167
- theme_obj = Theme(datetime=datetime, theme=most_similar_topic, modifier=replies, person=person, postId=id, message=message, similarity=most_similar_score)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  themes.append(theme_obj.to_dict())
169
- #print(f"ThemeObj - id: {id}, theme:{theme_obj.theme}, modifier:{theme_obj.modifier}, person:{theme_obj.person}, topReaction:{theme_obj.topReaction}, message:{theme_obj.message}, similarity:{theme_obj.themeSimilarity}")
 
 
170
  return themes
171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  def compute_similarity(tokens1, tokens2):
173
  if set(word_tokenize(tokens1.lower())) == set(word_tokenize(tokens2.lower())):
174
  return 1.0, True
@@ -192,22 +294,21 @@ def compute_similarity(tokens1, tokens2):
192
  if valid_scores:
193
  max_similarity = max(valid_scores)
194
  total_similarity += max_similarity
195
- num_comparisons += 1
196
  if num_comparisons > 0:
197
  return total_similarity / num_comparisons, False
198
  else:
199
  return 0, False
200
 
201
  def FetchSlack():
202
- return pd.read_json(INPUT_DATAPATH, orient='records')
 
203
 
204
  def ProcessSlack():
205
- global df, reference_topics
206
- print("output path:" +OUTPUT_THEME_PATH)
207
  if not os.path.exists(OUTPUT_THEME_PATH):
208
- print("ProcessSlack - path not exist in process slack")
209
  # Read JSON data into DataFrame
210
- df = pd.read_json(INPUT_DATAPATH)
211
  # Keep selected columns and drop rows with missing values
212
  df = df[["person", "datetime", "message","replies", "id"]]
213
  # Filter down to top reaction, then create theme.
@@ -215,38 +316,24 @@ def ProcessSlack():
215
  df["datetime"] = df.apply(lambda row: ProcessDateTime(row["datetime"]), axis=1)
216
  df["theme"] = df.apply(lambda row: ProcessMessage(row["datetime"], row["message"], row["replies"], row["person"], row["id"]), axis=1)
217
  WriteThemes(themes)
218
- print("Reference topic list:")
219
- for reference_topic in reference_topics:
220
- print(reference_topic)
221
- print("df at end of process slack")
222
- print(df)
223
- print("----------")
224
  else:
225
- print("ProcessSlack - path exists in process slack")
226
  df = pd.read_json(OUTPUT_THEME_PATH)
227
  return df[["person", "theme", "message"]]
228
 
229
  def CreateEmbeddings():
230
  global df
231
- print("df: OUTPUT_THEME_EMBEDDINGS_PATH -"+OUTPUT_THEME_EMBEDDINGS_PATH)
232
- print(df)
233
  if not os.path.exists(OUTPUT_THEME_EMBEDDINGS_PATH):
234
- print("CreateEmbeddings path does NOT exist")
235
  ProcessSlack()
236
  #restrict sample to 500 most recent posts and remove samples that are too long
237
  top_n = SAMPLE_SIZE
238
  df = df.sort_values("datetime").tail(top_n * 2)
239
  df.drop("datetime", axis=1, inplace=True)
240
-
241
  encoding = tiktoken.get_encoding(EMBEDDING_ENCODING)
242
  # omit posts that are too long to embed
243
  df["n_tokens"] = df.theme.apply(lambda x: len(encoding.encode(str(x))))
244
  df = df[df.n_tokens <= MAX_TOKENS].tail(top_n)
245
-
246
- df["embedding"] = df.theme.apply(lambda x: [str(val) for val in get_embedding(str(x), engine=EMBEDDING_MODEL)])
247
-
248
  df.to_json(OUTPUT_THEME_EMBEDDINGS_PATH, orient="records", lines=False)
249
  else:
250
- print("CreateEmbeddings path does exist")
251
  df = pd.read_json(OUTPUT_THEME_EMBEDDINGS_PATH)
252
  return df[["person", "theme", "message", "embedding"]]
 
2
  import numpy as np
3
  import openai, os, tiktoken, json
4
  from datetime import datetime as dt
5
+ import re
6
  from openai.embeddings_utils import cosine_similarity, get_embedding
7
  from sklearn.metrics import classification_report, PrecisionRecallDisplay
8
+ from sklearn.feature_extraction.text import TfidfVectorizer
9
+ from sklearn.metrics.pairwise import cosine_similarity as coso
10
  from collections import Counter
11
  from nltk.corpus import wordnet
12
  from nltk.tokenize import word_tokenize
13
+ from utilities.api_keys import APIKeys
14
+ from utilities.unique_queue import UniqueQueue
15
+ from slack_processing.theme import Theme
16
 
17
+ openai.api_key = APIKeys().get_key('OPENAI_API_KEY')
18
 
19
  # Set embedding model parameters
20
  pd.set_option('display.max_rows', None)
21
  pd.set_option('display.max_columns', None)
22
 
23
  SAMPLE_SIZE = 500
24
+ MAX_TOKENS = 100
 
25
  EMBEDDING_MODEL = "text-embedding-ada-002"
26
  EMBEDDING_ENCODING = "cl100k_base"
27
 
28
+ INPUT_PATH = "slack_processing/data/slack.json"
29
  OUTPUT_THEME_PATH = "slack_processing/data/themes.json"
30
  OUTPUT_THEME_EMBEDDINGS_PATH = "slack_processing/data/slack_with_theme_embeddings.json"
31
+ TOPIC_TEXT_PATH="slack_processing/data/topics.txt"
32
+ TOPIC_TEXT_OUTPUT_PATH="slack_processing/data/topics_with_synonyms.txt"
33
+
34
+ TOPIC_TOKENS=50
35
+ TOPIC_MODEL ="gpt-3.5-turbo"
36
+ SYSTEM_MESSAGE="You are categorizing slack messages into topics that will be used to create dynamic games."
37
+
38
+ NUM_RESULTS=5
39
+ TEMP=.15
40
+ TOP_P=.15
41
+
42
+ NUM_RESULTS1=5
43
+ TEMP1=.35
44
+ TOP_P1=.35
45
+
46
+ TOPIC_TOKENS2=50
47
+ NUM_RESULTS2=5
48
+ TEMP2=.65
49
+ TOP_P2=.65
50
+
51
+ SIMILARITY_THRESHOLD = 0.6
52
 
53
  df=pd.DataFrame()
54
  themes = []
55
+ topics_with_synonyms = []
56
+ game_topics = UniqueQueue()
57
+ track_unknowns=[]
58
+
59
+ with open(TOPIC_TEXT_PATH, 'r') as file:
60
+ for line in file:
61
+ main_topic_and_synonyms = line.strip().lower().split(',')
62
+ main_topic = main_topic_and_synonyms[0].strip()
63
+ synonyms = [synonym.strip() for synonym in main_topic_and_synonyms[1:]]
64
+ topics_with_synonyms.append((main_topic, synonyms))
65
+
66
+ for main_topic, synonyms in topics_with_synonyms:
67
+ game_topics.enqueue(main_topic, synonyms)
68
+
69
+ #print("***topics****")
70
+ for topic in game_topics._queue.queue:
71
+ print(topic) # Output: "slalomversary"
72
+
73
+ #print ("---topics with synonyms helper list---")
74
+ '''for canonical, synonyms in game_topics.review():
75
+ print("Canonical term:", canonical)
76
+ print("Canonical with synonyms:", canonical + ", " + ", ".join(synonyms))
77
+ print() # Optional: Add a blank line '''
78
+
79
+ #print("+++ synonyms for canonical")
80
+ #print(game_topics.synonyms_for_canonical("Lunch and Learn")) # Output: ['L&L', 'lunch-and-learn', 'Lunch & Learn']
81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  def ProcessReactions(reactions,id):
84
  highestcount=0
 
91
  if reaction['count'] > highestcount:
92
  highestcount = reaction['count']
93
  highestcount_reaction = stripped_reaction
94
+ #print("returning highestcount_reaction:", highestcount_reaction)
95
  return highestcount_reaction
96
 
97
  def CleanMessage(message):
98
+ # Remove emojis represented as :something:
99
+ cleaned_message = re.sub(r':(\w+):', r'\1', message)
100
+ # Remove URLs
101
+ cleaned_message = re.sub(r'http\S+|www.\S+', '', cleaned_message)
102
+ # Remove specific punctuation
103
+ custom_punctuation = ':,.!?'
104
  translator = str.maketrans('', '', custom_punctuation)
105
+ cleaned_message = cleaned_message.translate(translator)
106
+ return cleaned_message
107
 
108
+ def TruncateWords(topic,count):
109
  words = topic.split()
110
+ truncated_topic = " ".join(words[:count])
111
  return truncated_topic.title()
112
 
113
  def WriteThemes(themes):
114
  themes_dict = [theme for theme in themes]
115
  with open(OUTPUT_THEME_PATH, "w") as json_file:
116
  json.dump(themes_dict, json_file, indent=4)
 
117
 
118
  def ProcessDateTime(date_time):
119
  date_time = dt(2023, 7, 11, 9, 21)
 
121
  json_data = f'{formatted_time}'
122
  return json_data
123
 
124
+ def CompletionEngine(sys_message, user_message, num_tokens, num_results, temperature, topic_model, top_p):
125
+ return openai.ChatCompletion.create(
126
+ model=topic_model,
 
 
127
  messages=[
128
+ {"role": "system", "content": sys_message},
129
+ {"role": "user", "content": user_message},
130
  ],
131
+ max_tokens=num_tokens,
132
+ n=num_results,
133
+ temperature=temperature,
134
+ stop=None,
135
+ top_p=top_p
136
  )
 
 
 
 
137
 
138
+ def ConcatenateMatchAndCanonicals(message):
139
+ global game_topics
140
+ game_topics_str = ', '.join(game_topics.all_words())
141
+ print("*** game_topics_str: ", game_topics_str)
142
+ prompt_message = f"Find a summary for this message: '{message}' in this set of topics: {{{game_topics_str}}}, If you're not able to find a match, reply 'Unknown'"
143
+ print("*** prompt_message for first round is: ", prompt_message)
144
+ return prompt_message
145
+
146
+ def ConcatenateMessageAndCanonicals(message):
147
+ prompt_message = f"Summarize this message: '{message}' in 1-2 words. We're looking for a representative category to cluster messages. These topics will be used to create dynamic games. Identify subject, activity, or game-worthy topic, If you're not able to summarize, reply 'Unknown'"
148
+ print("*** prompt_message for second round is: ", prompt_message)
149
+ return prompt_message
150
+
151
+ def ConcatenateMessageAndTopics(message):
152
+ prompt_message = f"Be creative. We need 1-2 word summarization for this message: '{message}'. If you aren't able to summarize, pick the direct object of the message. As an absolute last resort, reply 'Unknown'"
153
+ print("*** prompt_message for third round is: ", prompt_message)
154
+ return prompt_message
155
+
156
+ # Update the process_message function
157
+ def ProcessMessage(datetime, message, replies, person, id):
158
+ global game_topics
159
+ #round 1, look for exact match
160
+ completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMatchAndCanonicals(CleanMessage(message)),TOPIC_TOKENS, NUM_RESULTS, TEMP, TOPIC_MODEL,TOP_P)
161
+ options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
162
+ if all(choice == "Unknown" for choice in options):
163
+ #round 2, look for 1-2 summary, like topics
164
+ completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMessageAndCanonicals(CleanMessage(message)),TOPIC_TOKENS, NUM_RESULTS1, TEMP1, TOPIC_MODEL,TOP_P1)
165
+ options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
166
+ if all(choice == "Unknown" for choice in options):
167
+ #round 3, look for 1-2 summary, wild card
168
+ completion=CompletionEngine(SYSTEM_MESSAGE,ConcatenateMessageAndTopics(CleanMessage(message)),TOPIC_TOKENS2, NUM_RESULTS2, TEMP2, TOPIC_MODEL,TOP_P2)
169
+ options = list(set(TruncateWords(topic.strip(),3) for choice in completion.choices for concatenated_topics in choice.message.content.strip().split("\n") for topic in concatenated_topics.split(',')))
170
+ print("---options: ", options)
171
  # Compute semantic similarity between generated topics and existing reference topics
172
  similarity_scores = []
173
  generated_topics_indices = []
174
  counter=0
175
  exact_match=False
176
  most_similar_topic = "Unknown"
177
+
178
+ topic_length = len(options)
179
+ unidentified_topic_count=0
180
+ for generated_topic in options:
181
  if generated_topic != "Unknown":
182
  generated_topics_indices.append(counter)
183
  generated_tokens = word_tokenize(generated_topic)
184
  generated_tokens_str = " ".join(generated_tokens)
185
  topic_similarities = []
186
+ for reference_topic in game_topics.all_canonicals():
 
187
  reference_tokens = word_tokenize(reference_topic)
188
  reference_tokens_str = " ".join(reference_tokens)
189
  similarity_score, exact_match = compute_similarity(generated_tokens_str, reference_tokens_str)
190
  if exact_match:
 
191
  most_similar_topic = reference_topic
192
  most_similar_score = 1.0
193
  break
 
195
  if exact_match:
196
  break
197
  similarity_scores.append(topic_similarities)
198
+ else:
199
+ unidentified_topic_count+=1
200
  counter+=1
 
 
201
  if len(similarity_scores) > 0 and not exact_match:
202
  most_similar_score=0
203
  # Aggregate the similarity scores for each generated topic
 
206
  # Find the index of the topic with the highest aggregated score
207
  most_similar_index = np.argmax(aggregated_scores)
208
  most_similar_topic_index = generated_topics_indices[most_similar_index]
209
+ most_similar_topic = options[most_similar_topic_index].lower()
210
  most_similar_score=similarity_scores[most_similar_index]
211
  print("Most similar topic:", most_similar_topic, "with score:", most_similar_score)
212
+
213
+ if most_similar_topic != "Unknown":
214
+ #check if it's in all topics
215
+ if most_similar_topic in game_topics.all_words():
216
+ #if it's in all words, and a synonym, set topic to canonical, otherwise set to canonical
217
+ if most_similar_topic in game_topics.all_synonyms():
218
+ most_similar_topic = game_topics.canonical_for_synonym(most_similar_topic)
219
+ most_similar_score=1.0
220
+ else:
221
+ most_similar_topic = game_topics.get_canonical(most_similar_topic)
222
+ else:
223
+ #not in all words, look for similar topics, see if it's like something in list
224
+ highest_similarity = 0
225
+ best_match = None
226
+ for known_word in game_topics.all_words():
227
+ #compute similarity against all topics
228
+ similarity_score = compare_topic_to_game_topic(most_similar_topic, known_word)
229
+ print("\tsimilarity_score: "+ str(similarity_score)+ " for known_word: "+ known_word)
230
+ if similarity_score > highest_similarity:
231
+ highest_similarity = similarity_score
232
+ best_match = known_word.lower()
233
+ print("\t>>>best_match found :", best_match, " with highest_similarity:", str(highest_similarity))
234
+
235
+ print("if we found similar topic, use it")
236
+ if highest_similarity > SIMILARITY_THRESHOLD:
237
+ if(best_match in game_topics.all_synonyms()):
238
+ most_similar_topic = game_topics.canonical_for_synonym(best_match)
239
+ else:
240
+ most_similar_topic = game_topics.get_canonical(best_match)
241
+ #update most similar socre
242
+ most_similar_score=highest_similarity
243
+ else:
244
+ #add the new topic
245
+ game_topics.enqueue(most_similar_topic)
246
+ theme_obj = Theme(datetime=datetime, theme=most_similar_topic, modifier=0, person=person, postId=id, message=message, similarity=str(most_similar_score))
247
  themes.append(theme_obj.to_dict())
248
+
249
+ print(f"{id} From message:'{message}' to theme: {most_similar_topic}")
250
+ #print(f"ThemeObj - id: {id}, theme:{theme_obj.theme}, modifier:{theme_obj.modifier}, person:{theme_obj.person}, topReaction:{theme_obj.topReaction}, message:{theme_obj.message}, similarity:{theme_obj.themeSimilarity}")
251
  return themes
252
 
253
+ def compare_topic_to_game_topic(topic, game_topic):
254
+ # Exact Match
255
+ if topic == game_topic:
256
+ return 1.0
257
+
258
+ # Token Overlap
259
+ tokens_topic = set(word_tokenize(topic.lower()))
260
+ tokens_game_topic = set(word_tokenize(game_topic.lower()))
261
+ overlap_score = len(tokens_topic & tokens_game_topic) / len(tokens_topic | tokens_game_topic)
262
+
263
+ # Semantic Similarity using OpenAI's cosine_similarity
264
+ vectorizer = TfidfVectorizer()
265
+ tfidf_matrix = vectorizer.fit_transform([topic, game_topic])
266
+ semantic_similarity = coso(tfidf_matrix[0], tfidf_matrix[1])[0, 0] # Get the scalar value
267
+
268
+ # Combine Scores
269
+ final_score = 0.2 * overlap_score + 0.8 * semantic_similarity
270
+ print("Tokens topic:", tokens_topic, "tokens game topic:", tokens_game_topic, " overlap score:", overlap_score," Semantic similarity:", str(semantic_similarity), " final score: " + str(final_score))
271
+ return final_score
272
+
273
+
274
  def compute_similarity(tokens1, tokens2):
275
  if set(word_tokenize(tokens1.lower())) == set(word_tokenize(tokens2.lower())):
276
  return 1.0, True
 
294
  if valid_scores:
295
  max_similarity = max(valid_scores)
296
  total_similarity += max_similarity
297
+ num_comparisons += 1
298
  if num_comparisons > 0:
299
  return total_similarity / num_comparisons, False
300
  else:
301
  return 0, False
302
 
303
  def FetchSlack():
304
+ return pd.read_json(INPUT_PATH, orient='records')
305
+
306
 
307
  def ProcessSlack():
308
+ global df
 
309
  if not os.path.exists(OUTPUT_THEME_PATH):
 
310
  # Read JSON data into DataFrame
311
+ df = pd.read_json(INPUT_PATH)
312
  # Keep selected columns and drop rows with missing values
313
  df = df[["person", "datetime", "message","replies", "id"]]
314
  # Filter down to top reaction, then create theme.
 
316
  df["datetime"] = df.apply(lambda row: ProcessDateTime(row["datetime"]), axis=1)
317
  df["theme"] = df.apply(lambda row: ProcessMessage(row["datetime"], row["message"], row["replies"], row["person"], row["id"]), axis=1)
318
  WriteThemes(themes)
 
 
 
 
 
 
319
  else:
 
320
  df = pd.read_json(OUTPUT_THEME_PATH)
321
  return df[["person", "theme", "message"]]
322
 
323
  def CreateEmbeddings():
324
  global df
 
 
325
  if not os.path.exists(OUTPUT_THEME_EMBEDDINGS_PATH):
 
326
  ProcessSlack()
327
  #restrict sample to 500 most recent posts and remove samples that are too long
328
  top_n = SAMPLE_SIZE
329
  df = df.sort_values("datetime").tail(top_n * 2)
330
  df.drop("datetime", axis=1, inplace=True)
 
331
  encoding = tiktoken.get_encoding(EMBEDDING_ENCODING)
332
  # omit posts that are too long to embed
333
  df["n_tokens"] = df.theme.apply(lambda x: len(encoding.encode(str(x))))
334
  df = df[df.n_tokens <= MAX_TOKENS].tail(top_n)
335
+ df["embedding"] = df.theme.apply(lambda x: [str(val) for val in get_embedding(str(x), engine=EMBEDDING_MODEL)])
 
 
336
  df.to_json(OUTPUT_THEME_EMBEDDINGS_PATH, orient="records", lines=False)
337
  else:
 
338
  df = pd.read_json(OUTPUT_THEME_EMBEDDINGS_PATH)
339
  return df[["person", "theme", "message", "embedding"]]
slack_processing/theme.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class Theme:
2
+ def __init__(self, datetime, theme, modifier, person, postId, similarity, message):
3
+ self.datetime = datetime
4
+ self.theme = theme
5
+ self.modifier = modifier
6
+ self.message=message
7
+ self.person=person
8
+ self.postId=postId
9
+ #self.topReaction=topReaction
10
+ self.themeSimilarity=similarity
11
+
12
+ def to_dict(self):
13
+ return {
14
+ 'datetime':self.datetime,
15
+ 'theme': self.theme,
16
+ 'modifier': self.modifier,
17
+ 'message': self.message,
18
+ 'person': self.person,
19
+ 'postId': self.postId,
20
+ #'topReaction': self.topReaction,
21
+ 'themeSimilarity': self.themeSimilarity
22
+ }
utilities/__pycache__/unique_queue.cpython-311.pyc ADDED
Binary file (6.54 kB). View file
 
utilities/unique_queue.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from queue import Queue
2
+
3
+ class UniqueQueue:
4
+ def __init__(self, topics_with_synonyms=None):
5
+ self._queue = Queue()
6
+ self._seen = set()
7
+ self._canonical_mapping = {}
8
+ if topics_with_synonyms:
9
+ for main_topic, synonyms in topics_with_synonyms:
10
+ self.enqueue(main_topic, synonyms)
11
+
12
+ def _get_canonical(self, item):
13
+ return self._canonical_mapping.get(item.lower(), item.lower())
14
+
15
+ def enqueue(self, item, synonyms=[]):
16
+ print("Original item:", item)
17
+ canonical_item = self._get_canonical(item.lower())
18
+ print("Canonical item:", canonical_item)
19
+ if canonical_item not in self._seen:
20
+ self._queue.put((canonical_item, synonyms))
21
+ self._seen.add(canonical_item)
22
+ self._canonical_mapping[item.lower()] = canonical_item
23
+ for synonym in synonyms:
24
+ self._seen.add(synonym.lower()) # Added this line
25
+ self._canonical_mapping[synonym.lower()] = canonical_item
26
+
27
+ def get_canonical(self, word_or_phrase):
28
+ # Check if the word_or_phrase is a synonym
29
+ for canonical in self.all_canonicals():
30
+ if word_or_phrase in self.synonyms_for_canonical(canonical):
31
+ return self.canonical_for_synonym(word_or_phrase)
32
+
33
+ # Check if the word_or_phrase is a canonical term
34
+ if word_or_phrase in self.all_canonicals():
35
+ return word_or_phrase
36
+
37
+ # If not found, return None or raise an exception
38
+ return None
39
+
40
+ def canonical_with_synonyms(self, canonical, synonyms):
41
+ return canonical + ", " + ", ".join(synonyms)
42
+
43
+ def synonyms_for_canonical(self, canonical):
44
+ canonical_term = self._get_canonical(canonical.lower())
45
+ return [key for key, value in self._canonical_mapping.items() if value == canonical_term and key != canonical_term]
46
+
47
+ def dequeue(self):
48
+ return self._queue.get()
49
+
50
+ def canonical_for_synonym(self, synonym):
51
+ return self._canonical_mapping.get(synonym.lower())
52
+
53
+ def all_words(self):
54
+ unique_words = set(self._canonical_mapping.keys())
55
+ for canonical_term in self._canonical_mapping.values():
56
+ unique_words.add(canonical_term)
57
+ return list(unique_words)
58
+
59
+ def all_canonicals(self):
60
+ return list(set(self._canonical_mapping.values()))
61
+
62
+ def all_synonyms(self):
63
+ return [key for key, value in self._canonical_mapping.items() if key != value]
64
+
65
+ def is_empty(self):
66
+ return self._queue.empty()
67
+
68
+ def review(self):
69
+ return list(self._queue.queue)
70
+
71
+ def write_topics_to_file(unique_queue, file_path):
72
+ with open(file_path, 'w') as file:
73
+ for canonical, synonyms in unique_queue.review():
74
+ line = canonical + ', ' + ', '.join(synonyms)
75
+ file.write(line + '\n')