File size: 73,722 Bytes
ad4c3bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os; os.chdir('..')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pip install apache-beam==2.43.0\n",
    "# pip install --no-deps multiprocess==0.70.14"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "ename": "ImportError",
     "evalue": "cannot import name 'get_context' from 'multiprocess' (/home/ubuntu/SentenceStructureComparision/venv/lib/python3.10/site-packages/multiprocess/__init__.py)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mImportError\u001b[0m                               Traceback (most recent call last)",
      "\u001b[1;32m/home/ubuntu/SentenceStructureComparision/wiki_gpt/process_wiki_data.ipynb Cell 3\u001b[0m line \u001b[0;36m1\n\u001b[0;32m----> <a href='vscode-notebook-cell://ssh-remote%2B7b22686f73744e616d65223a22456d62656464696e6773227d/home/ubuntu/SentenceStructureComparision/wiki_gpt/process_wiki_data.ipynb#W1sdnNjb2RlLXJlbW90ZQ%3D%3D?line=0'>1</a>\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mdatasets\u001b[39;00m \u001b[39mimport\u001b[39;00m load_dataset\n\u001b[1;32m      <a href='vscode-notebook-cell://ssh-remote%2B7b22686f73744e616d65223a22456d62656464696e6773227d/home/ubuntu/SentenceStructureComparision/wiki_gpt/process_wiki_data.ipynb#W1sdnNjb2RlLXJlbW90ZQ%3D%3D?line=1'>2</a>\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mtqdm\u001b[39;00m \u001b[39mimport\u001b[39;00m tqdm\n\u001b[1;32m      <a href='vscode-notebook-cell://ssh-remote%2B7b22686f73744e616d65223a22456d62656464696e6773227d/home/ubuntu/SentenceStructureComparision/wiki_gpt/process_wiki_data.ipynb#W1sdnNjb2RlLXJlbW90ZQ%3D%3D?line=2'>3</a>\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mpandas\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mpd\u001b[39;00m\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/__init__.py:22\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[39m# flake8: noqa\u001b[39;00m\n\u001b[1;32m      2\u001b[0m \u001b[39m# Copyright 2020 The HuggingFace Datasets Authors and the TensorFlow Datasets Authors.\u001b[39;00m\n\u001b[1;32m      3\u001b[0m \u001b[39m#\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     17\u001b[0m \u001b[39m# pylint: enable=line-too-long\u001b[39;00m\n\u001b[1;32m     18\u001b[0m \u001b[39m# pylint: disable=g-import-not-at-top,g-bad-import-order,wrong-import-position\u001b[39;00m\n\u001b[1;32m     20\u001b[0m __version__ \u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39m2.14.5\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m---> 22\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39marrow_dataset\u001b[39;00m \u001b[39mimport\u001b[39;00m Dataset\n\u001b[1;32m     23\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39marrow_reader\u001b[39;00m \u001b[39mimport\u001b[39;00m ReadInstruction\n\u001b[1;32m     24\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mbuilder\u001b[39;00m \u001b[39mimport\u001b[39;00m ArrowBasedBuilder, BeamBasedBuilder, BuilderConfig, DatasetBuilder, GeneratorBasedBuilder\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/arrow_dataset.py:67\u001b[0m\n\u001b[1;32m     65\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m config\n\u001b[1;32m     66\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39marrow_reader\u001b[39;00m \u001b[39mimport\u001b[39;00m ArrowReader\n\u001b[0;32m---> 67\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39marrow_writer\u001b[39;00m \u001b[39mimport\u001b[39;00m ArrowWriter, OptimizedTypedSequence\n\u001b[1;32m     68\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdata_files\u001b[39;00m \u001b[39mimport\u001b[39;00m sanitize_patterns\n\u001b[1;32m     69\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdownload\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdownload_config\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadConfig\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/arrow_writer.py:27\u001b[0m\n\u001b[1;32m     24\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mpyarrow\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mparquet\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mpq\u001b[39;00m\n\u001b[1;32m     26\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m config\n\u001b[0;32m---> 27\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mfeatures\u001b[39;00m \u001b[39mimport\u001b[39;00m Features, Image, Value\n\u001b[1;32m     28\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mfeatures\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mfeatures\u001b[39;00m \u001b[39mimport\u001b[39;00m (\n\u001b[1;32m     29\u001b[0m     FeatureType,\n\u001b[1;32m     30\u001b[0m     _ArrayXDExtensionType,\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     36\u001b[0m     to_pyarrow_listarray,\n\u001b[1;32m     37\u001b[0m )\n\u001b[1;32m     38\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mfilesystems\u001b[39;00m \u001b[39mimport\u001b[39;00m is_remote_filesystem\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/features/__init__.py:17\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[39m# flake8: noqa\u001b[39;00m\n\u001b[1;32m      3\u001b[0m __all__ \u001b[39m=\u001b[39m [\n\u001b[1;32m      4\u001b[0m     \u001b[39m\"\u001b[39m\u001b[39mAudio\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m      5\u001b[0m     \u001b[39m\"\u001b[39m\u001b[39mArray2D\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     15\u001b[0m     \u001b[39m\"\u001b[39m\u001b[39mTranslationVariableLanguages\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m     16\u001b[0m ]\n\u001b[0;32m---> 17\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39maudio\u001b[39;00m \u001b[39mimport\u001b[39;00m Audio\n\u001b[1;32m     18\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mfeatures\u001b[39;00m \u001b[39mimport\u001b[39;00m Array2D, Array3D, Array4D, Array5D, ClassLabel, Features, Sequence, Value\n\u001b[1;32m     19\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mimage\u001b[39;00m \u001b[39mimport\u001b[39;00m Image\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/features/audio.py:11\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m config\n\u001b[1;32m     10\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdownload\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdownload_config\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadConfig\n\u001b[0;32m---> 11\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mdownload\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mstreaming_download_manager\u001b[39;00m \u001b[39mimport\u001b[39;00m xopen, xsplitext\n\u001b[1;32m     12\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mtable\u001b[39;00m \u001b[39mimport\u001b[39;00m array_cast\n\u001b[1;32m     13\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutils\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mpy_utils\u001b[39;00m \u001b[39mimport\u001b[39;00m no_op_if_value_is_null, string_to_dict\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/download/__init__.py:9\u001b[0m\n\u001b[1;32m      1\u001b[0m __all__ \u001b[39m=\u001b[39m [\n\u001b[1;32m      2\u001b[0m     \u001b[39m\"\u001b[39m\u001b[39mDownloadConfig\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m      3\u001b[0m     \u001b[39m\"\u001b[39m\u001b[39mDownloadManager\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m      4\u001b[0m     \u001b[39m\"\u001b[39m\u001b[39mDownloadMode\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m      5\u001b[0m     \u001b[39m\"\u001b[39m\u001b[39mStreamingDownloadManager\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m      6\u001b[0m ]\n\u001b[1;32m      8\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdownload_config\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadConfig\n\u001b[0;32m----> 9\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdownload_manager\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadManager, DownloadMode\n\u001b[1;32m     10\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mstreaming_download_manager\u001b[39;00m \u001b[39mimport\u001b[39;00m StreamingDownloadManager\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/download/download_manager.py:35\u001b[0m\n\u001b[1;32m     33\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutils\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39minfo_utils\u001b[39;00m \u001b[39mimport\u001b[39;00m get_size_checksum_dict\n\u001b[1;32m     34\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutils\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mlogging\u001b[39;00m \u001b[39mimport\u001b[39;00m get_logger, is_progress_bar_enabled, tqdm\n\u001b[0;32m---> 35\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mutils\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mpy_utils\u001b[39;00m \u001b[39mimport\u001b[39;00m NestedDataStructure, map_nested, size_str\n\u001b[1;32m     36\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mdownload_config\u001b[39;00m \u001b[39mimport\u001b[39;00m DownloadConfig\n\u001b[1;32m     39\u001b[0m logger \u001b[39m=\u001b[39m get_logger(\u001b[39m__name__\u001b[39m)\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/datasets/utils/py_utils.py:41\u001b[0m\n\u001b[1;32m     39\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mdill\u001b[39;00m\n\u001b[1;32m     40\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mmultiprocess\u001b[39;00m\n\u001b[0;32m---> 41\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mmultiprocess\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mpool\u001b[39;00m\n\u001b[1;32m     42\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mnumpy\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mnp\u001b[39;00m\n\u001b[1;32m     43\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39mpackaging\u001b[39;00m \u001b[39mimport\u001b[39;00m version\n",
      "File \u001b[0;32m~/SentenceStructureComparision/venv/lib/python3.10/site-packages/multiprocess/pool.py:29\u001b[0m\n\u001b[1;32m     26\u001b[0m \u001b[39m# If threading is available then ThreadPool should be provided.  Therefore\u001b[39;00m\n\u001b[1;32m     27\u001b[0m \u001b[39m# we avoid top-level imports which are liable to fail on some systems.\u001b[39;00m\n\u001b[1;32m     28\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m util\n\u001b[0;32m---> 29\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m \u001b[39mimport\u001b[39;00m get_context, \u001b[39mTimeoutError\u001b[39;00m\n\u001b[1;32m     30\u001b[0m \u001b[39mfrom\u001b[39;00m \u001b[39m.\u001b[39;00m\u001b[39mconnection\u001b[39;00m \u001b[39mimport\u001b[39;00m wait\n\u001b[1;32m     32\u001b[0m \u001b[39m#\u001b[39;00m\n\u001b[1;32m     33\u001b[0m \u001b[39m# Constants representing the state of a pool\u001b[39;00m\n\u001b[1;32m     34\u001b[0m \u001b[39m#\u001b[39;00m\n",
      "\u001b[0;31mImportError\u001b[0m: cannot import name 'get_context' from 'multiprocess' (/home/ubuntu/SentenceStructureComparision/venv/lib/python3.10/site-packages/multiprocess/__init__.py)"
     ]
    }
   ],
   "source": [
    "from datasets import load_dataset\n",
    "from tqdm import tqdm\n",
    "import pandas as pd\n",
    "import pyarrow as pa\n",
    "import pyarrow.compute as pc\n",
    "import re\n",
    "import pyarrow.dataset as ds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Downloading: 100%|██████████| 15.3k/15.3k [00:00<00:00, 19.5MB/s]\n",
      "Downloading:   3%|▎         | 703M/20.3G [00:11<05:19, 61.2MB/s] "
     ]
    }
   ],
   "source": [
    "dataset = load_dataset(\"wikipedia\", \"20220301.en\", split=\"train\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df = dataset.to_pandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def keep_intro(text):\n",
    "    return re.sub(r'\\(\\W*\\)', '', ' '.join(text.split('\\n\\n')[:2]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df['intro'] = data_df.apply(lambda row: keep_intro(row['text']), axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df[['id', 'title', 'url', 'intro']].to_csv('wiki_intro.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df = pd.read_csv('wiki_intro.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6458670"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>title</th>\n",
       "      <th>url</th>\n",
       "      <th>intro</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12</td>\n",
       "      <td>Anarchism</td>\n",
       "      <td>https://en.wikipedia.org/wiki/Anarchism</td>\n",
       "      <td>Anarchism is a political philosophy and moveme...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>25</td>\n",
       "      <td>Autism</td>\n",
       "      <td>https://en.wikipedia.org/wiki/Autism</td>\n",
       "      <td>Autism is a neurodevelopmental disorder charac...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>39</td>\n",
       "      <td>Albedo</td>\n",
       "      <td>https://en.wikipedia.org/wiki/Albedo</td>\n",
       "      <td>Albedo  is the measure of the diffuse reflecti...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>290</td>\n",
       "      <td>A</td>\n",
       "      <td>https://en.wikipedia.org/wiki/A</td>\n",
       "      <td>A, or a, is the first letter and the first vow...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>303</td>\n",
       "      <td>Alabama</td>\n",
       "      <td>https://en.wikipedia.org/wiki/Alabama</td>\n",
       "      <td>Alabama  is a state in the Southeastern region...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6458665</th>\n",
       "      <td>70201819</td>\n",
       "      <td>Bianca Fernandez</td>\n",
       "      <td>https://en.wikipedia.org/wiki/Bianca%20Fernandez</td>\n",
       "      <td>Bianca Jolie Fernandez (born 24 February 2004)...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6458666</th>\n",
       "      <td>70201882</td>\n",
       "      <td>Condons and Clangibbon</td>\n",
       "      <td>https://en.wikipedia.org/wiki/Condons%20and%20...</td>\n",
       "      <td>Condons and Clangibbon  is a barony in County ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6458667</th>\n",
       "      <td>70201886</td>\n",
       "      <td>2022 Chattanooga Red Wolves SC season</td>\n",
       "      <td>https://en.wikipedia.org/wiki/2022%20Chattanoo...</td>\n",
       "      <td>The 2022 Chattanooga Red Wolves SC season will...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6458668</th>\n",
       "      <td>70201947</td>\n",
       "      <td>Nkiko Prosper</td>\n",
       "      <td>https://en.wikipedia.org/wiki/Nkiko%20Prosper</td>\n",
       "      <td>Turatsinze Nkiko Prosper (born 1985) professio...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6458669</th>\n",
       "      <td>70201959</td>\n",
       "      <td>Michael O'Donnell (Missouri politician)</td>\n",
       "      <td>https://en.wikipedia.org/wiki/Michael%20O%27Do...</td>\n",
       "      <td>Michael A. O'Donnell (born June 17, 1968) is a...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>6458670 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "               id                                    title  \\\n",
       "0              12                                Anarchism   \n",
       "1              25                                   Autism   \n",
       "2              39                                   Albedo   \n",
       "3             290                                        A   \n",
       "4             303                                  Alabama   \n",
       "...           ...                                      ...   \n",
       "6458665  70201819                         Bianca Fernandez   \n",
       "6458666  70201882                   Condons and Clangibbon   \n",
       "6458667  70201886    2022 Chattanooga Red Wolves SC season   \n",
       "6458668  70201947                            Nkiko Prosper   \n",
       "6458669  70201959  Michael O'Donnell (Missouri politician)   \n",
       "\n",
       "                                                       url  \\\n",
       "0                  https://en.wikipedia.org/wiki/Anarchism   \n",
       "1                     https://en.wikipedia.org/wiki/Autism   \n",
       "2                     https://en.wikipedia.org/wiki/Albedo   \n",
       "3                          https://en.wikipedia.org/wiki/A   \n",
       "4                    https://en.wikipedia.org/wiki/Alabama   \n",
       "...                                                    ...   \n",
       "6458665   https://en.wikipedia.org/wiki/Bianca%20Fernandez   \n",
       "6458666  https://en.wikipedia.org/wiki/Condons%20and%20...   \n",
       "6458667  https://en.wikipedia.org/wiki/2022%20Chattanoo...   \n",
       "6458668      https://en.wikipedia.org/wiki/Nkiko%20Prosper   \n",
       "6458669  https://en.wikipedia.org/wiki/Michael%20O%27Do...   \n",
       "\n",
       "                                                     intro  \n",
       "0        Anarchism is a political philosophy and moveme...  \n",
       "1        Autism is a neurodevelopmental disorder charac...  \n",
       "2        Albedo  is the measure of the diffuse reflecti...  \n",
       "3        A, or a, is the first letter and the first vow...  \n",
       "4        Alabama  is a state in the Southeastern region...  \n",
       "...                                                    ...  \n",
       "6458665  Bianca Jolie Fernandez (born 24 February 2004)...  \n",
       "6458666  Condons and Clangibbon  is a barony in County ...  \n",
       "6458667  The 2022 Chattanooga Red Wolves SC season will...  \n",
       "6458668  Turatsinze Nkiko Prosper (born 1985) professio...  \n",
       "6458669  Michael A. O'Donnell (born June 17, 1968) is a...  \n",
       "\n",
       "[6458670 rows x 4 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_df"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Cleaning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df = data_df[data_df.apply(lambda x : len(str(x['title'])) > 1, axis = 1)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/b5/qwcw21mn3973c1z_c12dw6hw0000gn/T/ipykernel_849/2014648341.py:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data_df['intro_len'] = data_df.apply(lambda row: len(row['intro'].split(' ')), axis = 1)\n"
     ]
    }
   ],
   "source": [
    "data_df['intro_len'] = data_df.apply(lambda row: len(row['intro'].split(' ')), axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot: >"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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J3RcCgAAELfa9QbWuXPnau7cuS2uKy0tjXh811136a677mrP0wAAgMMA300DAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgKtF6AgAgScMWvKBAo896Gh3O38XpT2OtZwHENq6MAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU5QRAABgijICAABMUUYAAICpROsJAMDhYNiCFxRo9FlPo8P5uzj9aaz1LBDvuDICAABMUUYAAIApyggAADBFGQEAAKYoIwAAwBRlBAAAmKKMAAAAU+36nJGlS5fq9ttvV01NjXJycnTPPfdo7NjWbzRftWqVbr75Zn300UcaMmSIbrvtNp1zzjntnjQAILZ49XNUJD5L5VCI+srIY489pvz8fM2fP19vvPGGcnJyNGnSJO3cubPF8a+88opmzJihyy67TJs3b9a0adM0bdo0bd269QdPHgAAxL+or4zceeedmj17ti655BJJ0rJly/TMM8/ooYce0g033NBs/N13363JkyfruuuukyQtWrRIxcXFuvfee7Vs2bIfOH0AAA4Nr179iYUrP1GVkf3796uiokIFBQXhZQkJCcrLy1NZWVmL25SVlSk/Pz9i2aRJk7RmzZpWnycQCCgQCIQf19XVSZJ27dqlYDAYzZQPKBgMqqGhQYnBBDWGvHeCSVJiyKmhIeTZjOSLf17PSL745/WMTfm+/PJLJSUldei+9+zZI0lyzh14DtHs9IsvvlBjY6PS09Mjlqenp+vdd99tcZuampoWx9fU1LT6PIWFhVq4cGGz5dnZ2dFMF//fTOsJdDLyxT+vZyRf/PN6xs7Ot2fPHvXs2bPV9TH5RXkFBQURV1NCoZB27dqlI488Uj5fx7XS+vp69evXT5988olSU1M7bL+xxOsZyRf/vJ6RfPHP6xk7M59zTnv27FFWVtYBx0VVRtLS0tSlSxfV1tZGLK+trVVGRkaL22RkZEQ1XpL8fr/8fn/Esl69ekUz1aikpqZ68gT7Lq9nJF/883pG8sU/r2fsrHwHuiLSJKq7aZKTkzV69GiVlJSEl4VCIZWUlCg3N7fFbXJzcyPGS1JxcXGr4wEAwOEl6pdp8vPzNWvWLI0ZM0Zjx47VkiVLtG/fvvDdNRdffLH69u2rwsJCSdK8efN05plnavHixZo6dapWrlyp8vJyPfDAAx2bBAAAxKWoy8j06dP1+eef65ZbblFNTY1OOukkPf/88+E3qVZXVysh4X8XXE499VStWLFCv/vd73TjjTdqyJAhWrNmjYYNG9ZxKdrJ7/dr/vz5zV4S8hKvZyRf/PN6RvLFP69njIV8Pnew+20AAAA6Ed9NAwAATFFGAACAKcoIAAAwRRkBAACmDusysnTpUg0cOFBdu3bVuHHj9Nprr1lPqV0WLFggn88X8XPccceF13/99deaM2eOjjzySHXv3l0//elPm30QXSzZsGGDzj33XGVlZcnn8zX7HiPnnG655RZlZmaqW7duysvL0/vvvx8xZteuXbrooouUmpqqXr166bLLLtPevXsPYYoDO1jGX/7yl82O6eTJkyPGxHLGwsJCnXzyyerRo4f69OmjadOmqaqqKmJMW87L6upqTZ06VSkpKerTp4+uu+46ffPNN4cySovakm/8+PHNjuGVV14ZMSZW891///0aMWJE+EOwcnNz9dxzz4XXx/Oxa3KwjPF8/Fpy6623yufz6eqrrw4vi6nj6A5TK1eudMnJye6hhx5yb731lps9e7br1auXq62ttZ5a1ObPn+9OPPFEt2PHjvDP559/Hl5/5ZVXun79+rmSkhJXXl7uTjnlFHfqqacazvjAnn32WXfTTTe5J5980klyq1evjlh/6623up49e7o1a9a4f//73+68885z2dnZ7quvvgqPmTx5ssvJyXGvvvqq+9e//uUGDx7sZsyYcYiTtO5gGWfNmuUmT54ccUx37doVMSaWM06aNMk9/PDDbuvWra6ystKdc845rn///m7v3r3hMQc7L7/55hs3bNgwl5eX5zZv3uyeffZZl5aW5goKCiwiRWhLvjPPPNPNnj074hjW1dWF18dyvn/84x/umWeece+9956rqqpyN954o0tKSnJbt251zsX3sWtysIzxfPy+77XXXnMDBw50I0aMcPPmzQsvj6XjeNiWkbFjx7o5c+aEHzc2NrqsrCxXWFhoOKv2mT9/vsvJyWlx3e7du11SUpJbtWpVeNk777zjJLmysrJDNMP2+/4v6lAo5DIyMtztt98eXrZ7927n9/vdo48+6pxz7u2333aS3Ouvvx4e89xzzzmfz+c+/fTTQzb3tmqtjJx//vmtbhNvGXfu3OkkufXr1zvn2nZePvvssy4hIcHV1NSEx9x///0uNTXVBQKBQxvgIL6fz7lvf5l99z/+74unfM45d8QRR7gHH3zQc8fuu5oyOued47dnzx43ZMgQV1xcHJEp1o7jYfkyzf79+1VRUaG8vLzwsoSEBOXl5amsrMxwZu33/vvvKysrS4MGDdJFF12k6upqSVJFRYWCwWBE1uOOO079+/ePy6zbt29XTU1NRJ6ePXtq3Lhx4TxlZWXq1auXxowZEx6Tl5enhIQEbdq06ZDPub1KS0vVp08fDR06VFdddZW+/PLL8Lp4y1hXVydJ6t27t6S2nZdlZWUaPnx4xLd+T5o0SfX19XrrrbcO4ewP7vv5mvz9739XWlqahg0bpoKCAjU0NITXxUu+xsZGrVy5Uvv27VNubq7njp3UPGMTLxy/OXPmaOrUqRHHS4q9f4Mx+a29ne2LL75QY2NjxF+wJKWnp+vdd981mlX7jRs3TkVFRRo6dKh27NihhQsX6vTTT9fWrVtVU1Oj5OTkZl80mJ6erpqaGpsJ/wBNc27p2DWtq6mpUZ8+fSLWJyYmqnfv3nGTefLkybrggguUnZ2tDz74QDfeeKOmTJmisrIydenSJa4yhkIhXX311TrttNPCn7zclvOypqamxePctC5WtJRPkmbOnKkBAwYoKytLb775pn7729+qqqpKTz75pKTYz7dlyxbl5ubq66+/Vvfu3bV69WqdcMIJqqys9Myxay2jFP/HT5JWrlypN954Q6+//nqzdbH2b/CwLCNeM2XKlPCfR4wYoXHjxmnAgAF6/PHH1a1bN8OZob1+/vOfh/88fPhwjRgxQsccc4xKS0s1YcIEw5lFb86cOdq6das2btxoPZVO0Vq+K664Ivzn4cOHKzMzUxMmTNAHH3ygY4455lBPM2pDhw5VZWWl6urq9MQTT2jWrFlav3699bQ6VGsZTzjhhLg/fp988onmzZun4uJide3a1Xo6B3VYvkyTlpamLl26NHvXcG1trTIyMoxm1XF69eqlY489Vtu2bVNGRob279+v3bt3R4yJ16xNcz7QscvIyNDOnTsj1n/zzTfatWtXXGaWpEGDBiktLU3btm2TFD8Z586dq6efflovvfSSjj766PDytpyXGRkZLR7npnWxoLV8LRk3bpwkRRzDWM6XnJyswYMHa/To0SosLFROTo7uvvtuzxw7qfWMLYm341dRUaGdO3dq1KhRSkxMVGJiotavX68///nPSkxMVHp6ekwdx8OyjCQnJ2v06NEqKSkJLwuFQiopKYl4vTBe7d27Vx988IEyMzM1evRoJSUlRWStqqpSdXV1XGbNzs5WRkZGRJ76+npt2rQpnCc3N1e7d+9WRUVFeMy6desUCoXC/6HEm//85z/68ssvlZmZKSn2MzrnNHfuXK1evVrr1q1TdnZ2xPq2nJe5ubnasmVLROkqLi5Wampq+FK6lYPla0llZaUkRRzDWM3XklAopEAgEPfH7kCaMrYk3o7fhAkTtGXLFlVWVoZ/xowZo4suuij855g6jh36dtg4snLlSuf3+11RUZF7++233RVXXOF69eoV8a7heHHNNde40tJSt337dvfyyy+7vLw8l5aW5nbu3Omc+/b2rf79+7t169a58vJyl5ub63Jzc41n3bo9e/a4zZs3u82bNztJ7s4773SbN292H3/8sXPu21t7e/Xq5Z566in35ptvuvPPP7/FW3tHjhzpNm3a5DZu3OiGDBkSM7e9OnfgjHv27HHXXnutKysrc9u3b3cvvviiGzVqlBsyZIj7+uuvw/uI5YxXXXWV69mzpystLY24NbKhoSE85mDnZdNthRMnTnSVlZXu+eefd0cddVRM3Dp5sHzbtm1zv//97115ebnbvn27e+qpp9ygQYPcGWecEd5HLOe74YYb3Pr169327dvdm2++6W644Qbn8/nc2rVrnXPxfeyaHChjvB+/1nz/DqFYOo6HbRlxzrl77rnH9e/f3yUnJ7uxY8e6V1991XpK7TJ9+nSXmZnpkpOTXd++fd306dPdtm3bwuu/+uor96tf/codccQRLiUlxf3kJz9xO3bsMJzxgb300ktOUrOfWbNmOee+vb335ptvdunp6c7v97sJEya4qqqqiH18+eWXbsaMGa579+4uNTXVXXLJJW7Pnj0GaVp2oIwNDQ1u4sSJ7qijjnJJSUluwIABbvbs2c2KcixnbCmbJPfwww+Hx7TlvPzoo4/clClTXLdu3VxaWpq75pprXDAYPMRpmjtYvurqanfGGWe43r17O7/f7wYPHuyuu+66iM+pcC5281166aVuwIABLjk52R111FFuwoQJ4SLiXHwfuyYHyhjvx6813y8jsXQcfc4517HXWgAAANrusHzPCAAAiB2UEQAAYIoyAgAATFFGAACAKcoIAAAwRRkBAACmKCMAAMAUZQQAAJiijAAAAFOUEQAAYIoyAgAATFFGAACAqf8Hc7Wzy0owsBoAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_df['intro_len'].hist(bins=[0,50,100,150,200,250,300,350,400])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df = data_df[data_df['intro_len'].between(150, 350)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df['title_len'] = data_df.apply(lambda row: len(row['title'].split(' ')), axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot: >"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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bDNnztRTTz2lyZMna9CgQXrooYdUUFCgkpKSYLcGSYmJiZKkurq6gOV1dXXWuvZEEMI18fv9ysvL05tvvqktW7YoJSUl2C0ZbcyYMdq/f79qa2utn+HDh+vBBx9UbW2tIiIigt2iUe66666LPk7ib3/7m/r27Rukjsx29uxZhYcH/rqLiIhQc3NzkDrChVJSUpSYmKjKykprmcfj0c6dO+VwONr98Tk0hmuSm5urVatW6fe//726du1qHceNi4tTTExMkLszT9euXS86P6tz587q2bMn520FQUFBge6880795Cc/0b//+79r165devnll/Xyyy8HuzUj3XPPPXr++efVp08f3XrrrXr33Xe1cOFCPfLII8FuzRhnzpzRhx9+aN0+cuSIamtr1aNHD/Xp00f5+fl67rnndPPNNyslJUXPPPOMkpKSrCvL2pUfuAaSLvnz+uuvB7s1/H//9m//5n/iiSeC3Yax3nrrLf/AgQP9NpvN379/f//LL78c7JaM5fF4/E888YS/T58+/ujoaP83v/lN/49//GO/1+sNdmvG+NOf/nTJ3xk5OTl+v9/vb25u9j/zzDP+hIQEv81m848ZM8Z/+PDhf0lvfI4QAAAwFucIAQAAYxGEAACAsQhCAADAWAQhAABgLIIQAAAwFkEIAAAYiyAEAACMRRACAADGIggBAABjEYQAAICxCEIAAMBYBCEAAGCs/wdaTjD4nrBYpAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_df.title_len.hist(bins=[1,2,3,4,5,6,7,8,9,10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df = data_df[data_df['title_len'] < 4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df = data_df.sample(n=150000, random_state=1111)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot: >"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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m19tx/iNN9642XFqaMzxGzNmTI21z5gxI2BMaz1+UsMZT5w4Ued5uGnTJntcaz2GL7/8soYOHWp/OZzT6dS7775r7w/l88+vvoyhfg5KDR/DVncOWmi0rVu3Wn//939v/fGPf7QkWZs3bw7Yn5GRYY0fP946deqU/efMmTMBY8aPH28NGzbM2rt3r/X+++9b/fv3tx5++OGbmKJuDeW7NtepU6es1atXW2FhYdYXX3xhj+nbt6+1cOHCgHEXLly4yUlq53K5rDVr1liHDx+2SktLrXvuucfq06dPwPpmzJhh9e7d2youLrb2799vjR492rrjjjvs/VevXrUGDx5spaamWgcPHrS2bt1qdevWzcrJyWmJSAEaynfo0CFr4sSJ1ttvv219/vnnVnFxsXX77bdbkyZNCphHkrVmzZqAY3j58uWWiBSgMcfvZz/7mTV9+vSAtZ87d87e35qPn2U1nPHq1as1zsMFCxZY7du3t86fP2/P01qP4dtvv20VFBRY//mf/2kdO3bMeu6556zIyEjr8OHDlmWF9vnnV1/GUD8HLavhY9jazkFKznWqq+Tcd999dd7nk08+sSRZH330kb3t3XfftcLCwqz/+Z//CdJKr09t+b7rvvvus8aOHRuwrW/fvtby5cuDt7BmdPr0aUuStWvXLsuyLOvs2bNWZGSktWnTJnvMp59+akmy3G63ZVl/LYLh4eGWx+Oxx7z88suWw+GwvF7vzQ3QgO/mq83GjRutqKgoy+fz2dsac+xbg9ry/exnP7OefvrpOu8TSsfPshp3DJOSkqzHHnssYFuoHEPLsqzOnTtbr776qnHn37X8GWsTyueg37X5Wts5yNtVzWznzp3q0aOHBgwYoJkzZ+qbb76x97ndbnXq1EkjR460t6Wmpio8PFwffvhhSyz3upWXl6ugoEDTpk2rsW/JkiXq2rWrhg8frueff75VvZR8Lf9LxF26dJEklZSUyOfzKTU11R4zcOBA9enTR263W9Jfj+GQIUMCvnDS5XKpoqJCR44cuYmrb9h389U1xuFwqE2bwO8FzczMVLdu3TRq1CitXr1aViv8Oq268r3++uvq1q2bBg8erJycHF26dMneF0rHT2r4GJaUlKi0tLTW87C1H8Oqqiq98cYbunjxopxOp3Hnn1QzY21C+RysK19rOgdD+huPW5vx48dr4sSJSkhI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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_df['intro_len'].hist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df['starter_text'] = data_df['intro'].apply(lambda x: ' '.join(str(x).split(' ')[:7]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_df.to_csv('data/wiki_intro_processed.csv', index=False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "3f100d68d9cf80676b1a4c3ace5430b03ae266a1d88e3f101eb196b64b263632"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}