devStorm commited on
Commit
d123e86
·
unverified ·
1 Parent(s): c77efb7

feat: ✨ update amazon metadata

Browse files
data/amazon/intermediate/.gitkeep ADDED
File without changes
data/amazon/stats/category_list.json ADDED
@@ -0,0 +1,1425 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ "jerseys",
3
+ "baseball caps",
4
+ "running",
5
+ "gun holsters",
6
+ "imported",
7
+ "equestrian sports",
8
+ "auto accessories",
9
+ "skiing",
10
+ "dcor",
11
+ "swimming",
12
+ "pants",
13
+ "protective gear",
14
+ "hunting knives",
15
+ "shirts",
16
+ "martial arts",
17
+ "jackets",
18
+ "skateboarding",
19
+ "shorts",
20
+ "yoga",
21
+ "archery",
22
+ "socks",
23
+ "airsoft",
24
+ "cell phone accessories",
25
+ "sports water bottles",
26
+ "camp kitchen",
27
+ "sport watches",
28
+ "optics",
29
+ "gloves",
30
+ "sports souvenirs",
31
+ "soccer",
32
+ "strength training equipment",
33
+ "backpacking packs",
34
+ "swimwear",
35
+ "sports equipment",
36
+ "grips",
37
+ "paintball",
38
+ "tennis",
39
+ "machine wash",
40
+ "skateboard parts",
41
+ "outdoor flags",
42
+ "gun maintenance",
43
+ "tack",
44
+ "weapons",
45
+ "snowboarding",
46
+ "artwork",
47
+ "golf clubs",
48
+ "goggles",
49
+ "boys",
50
+ "training equipment",
51
+ "baby clothing",
52
+ "climbing",
53
+ "tactical knives",
54
+ "gun scopes",
55
+ "terminal tackle",
56
+ "hiking daypacks",
57
+ "dance",
58
+ "girls",
59
+ "bedding",
60
+ "hunting apparel",
61
+ "other team sports",
62
+ "fixed blade hunting knives",
63
+ "fitness technology",
64
+ "winter sports accessories",
65
+ "decals",
66
+ "hard lures",
67
+ "hats",
68
+ "hunting accessories",
69
+ "polo shirts",
70
+ "on-course accessories",
71
+ "coolers",
72
+ "rifle scopes",
73
+ "gunsmithing tools",
74
+ "license plate frames",
75
+ "football",
76
+ "wristbands",
77
+ "camping furniture",
78
+ "tires",
79
+ "swords",
80
+ "diving suits",
81
+ "bikes",
82
+ "toy figures",
83
+ "boxing",
84
+ "wheels",
85
+ "fishing apparel",
86
+ "rods",
87
+ "disc sports",
88
+ "ornaments",
89
+ "basketball",
90
+ "casino equipment",
91
+ "drivetrain components",
92
+ "key chains",
93
+ "pet gear",
94
+ "reels",
95
+ "bats",
96
+ "balls",
97
+ "sunglasses",
98
+ "kayaking",
99
+ "surfing",
100
+ "helmets",
101
+ "folding hunting knives",
102
+ "footwear",
103
+ "folding knives",
104
+ "bowling",
105
+ "electrical equipment",
106
+ "personal defense equipment",
107
+ "throw blankets",
108
+ "mitts",
109
+ "personal care",
110
+ "head covers",
111
+ "polyester",
112
+ "wallets",
113
+ "earrings",
114
+ "player equipment",
115
+ "wetsuits",
116
+ "saddles",
117
+ "tents",
118
+ "boat engine parts",
119
+ "exercise bands",
120
+ "ice hockey",
121
+ "cotton",
122
+ "sleeping bags",
123
+ "golf balls",
124
+ "compression shorts",
125
+ "golf cart accessories",
126
+ "cardio training",
127
+ "adult helmets",
128
+ "fishing line",
129
+ "racquets",
130
+ "disc golf",
131
+ "mats",
132
+ "brake parts",
133
+ "golf equipment",
134
+ "artificial bait",
135
+ "headbands",
136
+ "waist packs",
137
+ "one-piece suits",
138
+ "equipment bags",
139
+ "sports sunglasses",
140
+ "baseball mitts",
141
+ "paracord",
142
+ "decks",
143
+ "golf club bags",
144
+ "lacrosse",
145
+ "standard skateboards",
146
+ "hooks",
147
+ "office products",
148
+ "gun scope mounts",
149
+ "toss games",
150
+ "drivers",
151
+ "gun sights",
152
+ "discs",
153
+ "fitness trackers",
154
+ "travel mugs",
155
+ "hardware",
156
+ "coffee mugs",
157
+ "boat covers",
158
+ "baseball bats",
159
+ "hydration packs",
160
+ "compression",
161
+ "scooters",
162
+ "towels",
163
+ "bracelets",
164
+ "chairs",
165
+ "sports medicine",
166
+ "hand wash",
167
+ "game calls",
168
+ "furniture",
169
+ "exercise videos",
170
+ "electronics",
171
+ "backpacks",
172
+ "officially licensed",
173
+ "handlebars",
174
+ "sweaters",
175
+ "tactical backpacks",
176
+ "bath",
177
+ "riding boots",
178
+ "photos",
179
+ "machine washable",
180
+ "lanterns",
181
+ "pedals",
182
+ "volleyball",
183
+ "leggings",
184
+ "leotards",
185
+ "game handling",
186
+ "rifles",
187
+ "gun belts",
188
+ "table tennis",
189
+ "trading cards",
190
+ "china",
191
+ "wall decals",
192
+ "football equipment",
193
+ "topwater lures",
194
+ "golf club parts",
195
+ "compasses",
196
+ "nets",
197
+ "longboards",
198
+ "putters",
199
+ "bows",
200
+ "tubes",
201
+ "ball markers",
202
+ "headlights",
203
+ "hydration",
204
+ "slippers",
205
+ "pet clothing",
206
+ "jigs",
207
+ "infielder's mitts",
208
+ "quartz movement",
209
+ "boxing gloves",
210
+ "swim caps",
211
+ "racquet accessories",
212
+ "bike locks",
213
+ "poker equipment",
214
+ "freeze-dried food",
215
+ "heart rate monitors",
216
+ "darts",
217
+ "tent accessories",
218
+ "pakistan",
219
+ "jump ropes",
220
+ "insect repellent",
221
+ "boat motors",
222
+ "cornhole",
223
+ "honduras",
224
+ "pistols",
225
+ "rifle cases",
226
+ "street signs",
227
+ "bike pumps",
228
+ "tactical flashlights",
229
+ "tactical pouches",
230
+ "boat cabin products",
231
+ "tackle storage",
232
+ "area rugs",
233
+ "downhill skiing",
234
+ "kids' bikes",
235
+ "fishing hats",
236
+ "gymnastics",
237
+ "boots",
238
+ "tights",
239
+ "ice skating",
240
+ "balance trainers",
241
+ "exercise balls",
242
+ "compression tops",
243
+ "zipper closure",
244
+ "soft lures",
245
+ "hammocks",
246
+ "stove accessories",
247
+ "dry bags",
248
+ "shin guards",
249
+ "reflective gear",
250
+ "training gloves",
251
+ "boat plumbing",
252
+ "cue sticks",
253
+ "pet collars",
254
+ "boat trailer accessories",
255
+ "diving masks",
256
+ "mineral crystal",
257
+ "backpack accessories",
258
+ "gun slings",
259
+ "caps",
260
+ "novelty headwear",
261
+ "ice fishing",
262
+ "camping shelters",
263
+ "trekking poles",
264
+ "pennants",
265
+ "shells",
266
+ "family camping tents",
267
+ "halters",
268
+ "masks",
269
+ "fleece",
270
+ "two-piece suits",
271
+ "cheerleading",
272
+ "safety glasses",
273
+ "saddle pads",
274
+ "stand-up paddleboarding",
275
+ "made in usa",
276
+ "soccer equipment",
277
+ "stems",
278
+ "derailleurs",
279
+ "batting gloves",
280
+ "fly fishing",
281
+ "scarves",
282
+ "floormats",
283
+ "bangladesh",
284
+ "bike bells",
285
+ "air guns",
286
+ "standard balls",
287
+ "officially licensed by the nfl",
288
+ "bits",
289
+ "cart bags",
290
+ "camouflage accessories",
291
+ "complete sets",
292
+ "beach towels",
293
+ "gun cleaning kits",
294
+ "grill accessories",
295
+ "punching bags",
296
+ "snowmobiling",
297
+ "football gear",
298
+ "bike racks",
299
+ "water bottle cages",
300
+ "tees",
301
+ "badminton",
302
+ "maintenance supplies",
303
+ "exercise bikes",
304
+ "plaques",
305
+ "bowling balls",
306
+ "seat posts",
307
+ "trucks",
308
+ "pedometers",
309
+ "umbrellas",
310
+ "wall clocks",
311
+ "broadheads",
312
+ "shafts",
313
+ "internal frame backpacks",
314
+ "toy vehicles",
315
+ "sailing",
316
+ "tumblers",
317
+ "license plate covers",
318
+ "knives",
319
+ "backpacking tents",
320
+ "basketballs",
321
+ "irons",
322
+ "bingo equipment",
323
+ "goalkeeper gloves",
324
+ "knee pads",
325
+ "sun shelters",
326
+ "fixed-blade knives",
327
+ "wall banners",
328
+ "tactical bag accessories",
329
+ "cranksets",
330
+ "snowshoeing",
331
+ "sights",
332
+ "cricket",
333
+ "headlamps",
334
+ "rash guards",
335
+ "bindings",
336
+ "straps",
337
+ "car flags",
338
+ "tables",
339
+ "kayaks",
340
+ "shop tools",
341
+ "home gyms",
342
+ "triathlon",
343
+ "whistles",
344
+ "golf gear",
345
+ "braided line",
346
+ "hybrid clubs",
347
+ "car magnets",
348
+ "bags",
349
+ "footballs",
350
+ "dumbbells",
351
+ "visors",
352
+ "hunting arrows",
353
+ "ties",
354
+ "kick scooters",
355
+ "pepper spray",
356
+ "optics mounts",
357
+ "button-down shirts",
358
+ "precise swiss-quartz movement",
359
+ "flying discs",
360
+ "protective padding",
361
+ "treadmill belts",
362
+ "roller skates",
363
+ "sets",
364
+ "wakeboarding",
365
+ "can coolers",
366
+ "synthetic",
367
+ "clothing sets",
368
+ "snorkeling packages",
369
+ "belts",
370
+ "mountain bikes",
371
+ "basketball equipment",
372
+ "taillights",
373
+ "camping cookware",
374
+ "tools",
375
+ "hand strengtheners",
376
+ "hunting hats",
377
+ "softball mitts",
378
+ "spotting scopes",
379
+ "made in us",
380
+ "sledding",
381
+ "air mattresses",
382
+ "breeches",
383
+ "foam rollers",
384
+ "inline skates",
385
+ "targets",
386
+ "brake pads",
387
+ "indonesia",
388
+ "sleeping bag accessories",
389
+ "exercise mats",
390
+ "flights",
391
+ "baseball equipment",
392
+ "flies",
393
+ "racquet strings",
394
+ "duffle bags",
395
+ "dresses",
396
+ "cornhole sets",
397
+ "beer glasses",
398
+ "baseballs",
399
+ "bibs",
400
+ "skirts",
401
+ "mini helmets",
402
+ "chainrings",
403
+ "acrylic",
404
+ "protective body equipment",
405
+ "sticks",
406
+ "folding chairs",
407
+ "brakes",
408
+ "cable locks",
409
+ "sleeping pads",
410
+ "pins",
411
+ "snowshoes",
412
+ "fly tying materials",
413
+ "cruiser bikes",
414
+ "bobbleheads",
415
+ "vests",
416
+ "air rifles",
417
+ "dry boxes",
418
+ "tactical vests",
419
+ "hunting bags",
420
+ "diving fins",
421
+ "blankets",
422
+ "propellers",
423
+ "mouthguards",
424
+ "kids' helmets",
425
+ "slow-pitch softball bats",
426
+ "brake levers",
427
+ "wrestling",
428
+ "stand bags",
429
+ "classic fit",
430
+ "hand warmers",
431
+ "fairway woods",
432
+ "charms",
433
+ "waist trimmers",
434
+ "monofilament line",
435
+ "decoys",
436
+ "rings",
437
+ "entry mats",
438
+ "deck hardware",
439
+ "poker chips",
440
+ "harnesses",
441
+ "paddles",
442
+ "pistol cases",
443
+ "headgear",
444
+ "cleaners",
445
+ "games",
446
+ "trailer hitch covers",
447
+ "racquetball",
448
+ "tops",
449
+ "fins",
450
+ "lighters",
451
+ "magazines",
452
+ "fire starters",
453
+ "rugby",
454
+ "basketball court equipment",
455
+ "rod holders",
456
+ "board bags",
457
+ "blinds",
458
+ "briefs",
459
+ "jammers",
460
+ "navigation lights",
461
+ "bowstrings",
462
+ "forks",
463
+ "skinsuits",
464
+ "outfielder's mitts",
465
+ "cycling computers",
466
+ "elliptical trainers",
467
+ "kayak accessories",
468
+ "bike baskets",
469
+ "benches",
470
+ "headlight-taillight combinations",
471
+ "handlebar bags",
472
+ "headphones",
473
+ "fletches",
474
+ "treadmills",
475
+ "grip tape",
476
+ "hubs",
477
+ "first aid kits",
478
+ "bed-in-a-bag",
479
+ "stand-up paddleboards",
480
+ "rubber sole",
481
+ "made in the usa and imported",
482
+ "fenders",
483
+ "snowboards",
484
+ "bbs",
485
+ "outboard motors",
486
+ "quivers",
487
+ "floor pumps",
488
+ "outdoor statues",
489
+ "pet jerseys",
490
+ "trampolines",
491
+ "importado",
492
+ "racquet grips",
493
+ "wraps",
494
+ "inline skate parts",
495
+ "one size fits most",
496
+ "tote bags",
497
+ "swing trainers",
498
+ "sports water bottle accessories",
499
+ "rope",
500
+ "cuff links",
501
+ "pet t-shirts",
502
+ "bait rigs",
503
+ "full suits",
504
+ "squash",
505
+ "bars",
506
+ "coasters",
507
+ "hockey equipment",
508
+ "night vision",
509
+ "chains",
510
+ "full sized helmets",
511
+ "kettlebells",
512
+ "sauna suits",
513
+ "towables",
514
+ "seating",
515
+ "trolling motors",
516
+ "hand wraps",
517
+ "cargo racks",
518
+ "polarized",
519
+ "weight belts",
520
+ "nylon",
521
+ "usa",
522
+ "mat bags",
523
+ "kayak hardware",
524
+ "skis",
525
+ "scents",
526
+ "armwarmers",
527
+ "midrange discs",
528
+ "bearings",
529
+ "snow sleds",
530
+ "nocks",
531
+ "display cases",
532
+ "medicine balls",
533
+ "locking carabiners",
534
+ "foosball",
535
+ "tent stakes",
536
+ "lamps",
537
+ "balance boards",
538
+ "anchors",
539
+ "markers",
540
+ "seat packs",
541
+ "goals",
542
+ "foot gear",
543
+ "fly line",
544
+ "rackets",
545
+ "tackle boxes",
546
+ "spoons",
547
+ "sandals",
548
+ "batting helmets",
549
+ "ice skates",
550
+ "pet dresses",
551
+ "cooler accessories",
552
+ "bilge pumps",
553
+ "el salvador",
554
+ "roller skate parts",
555
+ "road bikes",
556
+ "pilates",
557
+ "valve caps",
558
+ "boats",
559
+ "standard flights",
560
+ "soccer field equipment",
561
+ "bike pack accessories",
562
+ "fast-pitch softball bats",
563
+ "rocker switches",
564
+ "gun stocks",
565
+ "lunch boxes",
566
+ "made in usa or imported",
567
+ "hunting dog equipment",
568
+ "handlebar tape",
569
+ "screen printed graphics",
570
+ "catcher's mitts",
571
+ "golf club bag accessories",
572
+ "leather",
573
+ "golf club head covers",
574
+ "complete paintball sets",
575
+ "canoeing",
576
+ "fly tying equipment",
577
+ "poles",
578
+ "open fire cookware",
579
+ "elastic closure",
580
+ "softballs",
581
+ "team logo embroidered on left chest",
582
+ "bottom brackets",
583
+ "stabilizers",
584
+ "magnets",
585
+ "pull-up bars",
586
+ "dry flies",
587
+ "sneakers",
588
+ "court equipment",
589
+ "recurve bows",
590
+ "webbing",
591
+ "tree stands",
592
+ "field equipment",
593
+ "bowling roller bags",
594
+ "field hockey",
595
+ "rigging",
596
+ "trailers",
597
+ "compound bows",
598
+ "pull on closure",
599
+ "girths",
600
+ "diving lights",
601
+ "frame-mounted pumps",
602
+ "diploma frames",
603
+ "earmuffs",
604
+ "turkey",
605
+ "pickleball",
606
+ "fishing kayaks",
607
+ "golf umbrellas",
608
+ "quality japanese-quartz movement",
609
+ "release aids",
610
+ "one size fits all",
611
+ "bmx",
612
+ "climbing holds",
613
+ "snorkels",
614
+ "bodyboards",
615
+ "aprons",
616
+ "reins",
617
+ "stun guns",
618
+ "steering equipment",
619
+ "exercise machine attachments",
620
+ "fencing",
621
+ "earplugs",
622
+ "men's",
623
+ "bait traps",
624
+ "cases",
625
+ "cooking utensils",
626
+ "luggage tags",
627
+ "magazine loaders",
628
+ "basketball gear",
629
+ "medals",
630
+ "throw pillows",
631
+ "sleepwear",
632
+ "tree stand accessories",
633
+ "swivels",
634
+ "bike mirrors",
635
+ "barrels",
636
+ "air gun pellets",
637
+ "air hockey",
638
+ "computer mouse pads",
639
+ "kids' tricycles",
640
+ "golf carts",
641
+ "headsets",
642
+ "photomints",
643
+ "bow maintenance accessories",
644
+ "footprints",
645
+ "bumper stickers",
646
+ "electric bicycles",
647
+ "blocks",
648
+ "skate bags",
649
+ "heavy bags",
650
+ "cornhole bags",
651
+ "ski bags",
652
+ "baseball gear",
653
+ "volleyballs",
654
+ "stopwatches",
655
+ "slingshots",
656
+ "made by reebok",
657
+ "children's inline skates",
658
+ "weights",
659
+ "targeting arrows",
660
+ "short sleeve",
661
+ "stirrups",
662
+ "gun brushes",
663
+ "diving gloves",
664
+ "bath accessories",
665
+ "picture frames",
666
+ "handcuffs",
667
+ "plugs",
668
+ "bow cases",
669
+ "cots",
670
+ "flatware",
671
+ "camping pillows",
672
+ "non-polarized",
673
+ "swiss quartz movement",
674
+ "shot glasses",
675
+ "elbow pads",
676
+ "leashes",
677
+ "tool kits",
678
+ "tank tops",
679
+ "plates",
680
+ "divot tools",
681
+ "skates",
682
+ "dice",
683
+ "resistance trainers",
684
+ "drawstring bags",
685
+ "drawstring closure",
686
+ "poly-cotton",
687
+ "plastic frame",
688
+ "brand new",
689
+ "recoil pads",
690
+ "seat clamps",
691
+ "suspension",
692
+ "shoulder pads",
693
+ "comforters",
694
+ "optics accessories",
695
+ "shifters",
696
+ "weight racks",
697
+ "interior lights",
698
+ "pet bandanas",
699
+ "nonlocking carabiners",
700
+ "figure skates",
701
+ "water filters",
702
+ "hybrid bikes",
703
+ "playground balls",
704
+ "rod racks",
705
+ "inflatable rafts",
706
+ "points",
707
+ "billiard balls",
708
+ "bag gloves",
709
+ "throwing equipment",
710
+ "cross-country skiing",
711
+ "attractants",
712
+ "rims",
713
+ "replacement wheels",
714
+ "bat accessories",
715
+ "fuel filters",
716
+ "ankle weights",
717
+ "crossbows",
718
+ "ninja weapons",
719
+ "stuff sacks",
720
+ "officially licensed by the nba",
721
+ "ice spearing equipment",
722
+ "bike covers",
723
+ "spurs",
724
+ "u-locks",
725
+ "kids' accessories",
726
+ "emergency fire starters",
727
+ "the north face size chart",
728
+ "self-inflating pads",
729
+ "tailgating toss games",
730
+ "golf bag towels",
731
+ "fight gloves",
732
+ "weight vests",
733
+ "shift levers",
734
+ "made in the usa",
735
+ "suspension forks",
736
+ "emblems",
737
+ "plastic lens",
738
+ "adjustable benches",
739
+ "officially licensed by the nhl",
740
+ "moisture wicking",
741
+ "optics rings",
742
+ "folding bikes",
743
+ "hockey gear",
744
+ "regulators",
745
+ "training fins",
746
+ "ladders",
747
+ "roller hockey",
748
+ "inversion equipment",
749
+ "canteens",
750
+ "emergency blankets",
751
+ "car rack accessories",
752
+ "steering wheel covers",
753
+ "bocce",
754
+ "cue chalk",
755
+ "fuel tanks",
756
+ "arm guards",
757
+ "lasers",
758
+ "hand wipe with damp cloth",
759
+ "officially licensed by the ncaa",
760
+ "heads",
761
+ "multifunction tools",
762
+ "batteries",
763
+ "shorty suits",
764
+ "predator",
765
+ "compression socks",
766
+ "front derailleurs",
767
+ "topographic maps",
768
+ "rests",
769
+ "regulator accessories",
770
+ "decoy accessories",
771
+ "shoe covers",
772
+ "singlets",
773
+ "poms",
774
+ "pillowcases",
775
+ "shuttlecocks",
776
+ "riding gloves",
777
+ "shovels",
778
+ "underwear",
779
+ "indoor bike storage",
780
+ "fluorocarbon line",
781
+ "paintballs",
782
+ "battery chargers",
783
+ "badge holders",
784
+ "paddle accessories",
785
+ "laser rangefinders",
786
+ "punching bag accessories",
787
+ "foosball accessories",
788
+ "bingo cards",
789
+ "deer",
790
+ "poker sets",
791
+ "seat covers",
792
+ "boat fenders",
793
+ "distance balls",
794
+ "canopies",
795
+ "officially licensed merchandise",
796
+ "vietnam",
797
+ "dry clean only",
798
+ "carry bags",
799
+ "children's roller skates",
800
+ "swim vests",
801
+ "duck",
802
+ "whips",
803
+ "pens",
804
+ "freestyle boards",
805
+ "open-hem sleeves",
806
+ "safety gear",
807
+ "bow slings",
808
+ "stunt scooters",
809
+ "aquatic fitness equipment",
810
+ "painting supplies",
811
+ "screen print graphics",
812
+ "thailand",
813
+ "tire covers",
814
+ "catcher chest protectors",
815
+ "fitted",
816
+ "fishing gloves",
817
+ "boot bags",
818
+ "made in usa and imported",
819
+ "taiwan",
820
+ "scent eliminators",
821
+ "gun cases",
822
+ "bingo daubers",
823
+ "bike frames",
824
+ "belt displays",
825
+ "wet flies",
826
+ "pet leashes",
827
+ "water bottles",
828
+ "lines",
829
+ "headstalls",
830
+ "luggage",
831
+ "tanks",
832
+ "practice nets",
833
+ "skate accessories",
834
+ "hitting nets",
835
+ "wax",
836
+ "wakeboards",
837
+ "pro boxing gloves",
838
+ "starter sets",
839
+ "flags",
840
+ "gun lubrication",
841
+ "shower curtains",
842
+ "football field equipment",
843
+ "pushup stands",
844
+ "backcountry equipment",
845
+ "tablet accessories",
846
+ "rangefinders",
847
+ "fixed gear bikes",
848
+ "tent tarps",
849
+ "bathroom towels",
850
+ "unitards",
851
+ "chalk bags",
852
+ "youth sizes 8-20",
853
+ "original packaging",
854
+ "korea",
855
+ "dartboards",
856
+ "leaders",
857
+ "seating accessories",
858
+ "foosball tables",
859
+ "cue racks",
860
+ "screenprint decoration",
861
+ "shooter sleeves",
862
+ "plumbing fittings",
863
+ "swaziland",
864
+ "chain locks",
865
+ "line spooling accessories",
866
+ "helmet accessories",
867
+ "alarm clocks",
868
+ "food processing",
869
+ "foot warmers",
870
+ "speed skates",
871
+ "mp3 player accessories",
872
+ "loaders",
873
+ "reflectors",
874
+ "bowls",
875
+ "rib knit collar",
876
+ "muff pocket",
877
+ "hunting knife sharpeners",
878
+ "marker maintenance equipment",
879
+ "bowling totes",
880
+ "embroidered logos",
881
+ "putting mats",
882
+ "lob wedges",
883
+ "shuffleboard",
884
+ "sleeve patches",
885
+ "made by outerstuff",
886
+ "lap counters",
887
+ "durable",
888
+ "quartz movement with digital display",
889
+ "combination tables",
890
+ "ball polishers",
891
+ "nicaragua",
892
+ "game feeders",
893
+ "pong games",
894
+ "air pistols",
895
+ "machine washable, line dry, no bleach",
896
+ "liners",
897
+ "protective flooring",
898
+ "practice balls",
899
+ "replacement parts",
900
+ "stomp pads",
901
+ "embroidered graphics",
902
+ "made by adidas",
903
+ "sand wedges",
904
+ "boresighters",
905
+ "kickboards",
906
+ "scratch resistant, shatter resistant sapphimax crystal",
907
+ "billiard cloth",
908
+ "co2 pumps",
909
+ "flasks",
910
+ "girdles",
911
+ "tumbling mats",
912
+ "polyester lining",
913
+ "brake calipers",
914
+ "bmx bikes",
915
+ "buoyancy compensators",
916
+ "fan packs",
917
+ "rubber",
918
+ "windbreakers",
919
+ "bushings",
920
+ "japanese quartz movement",
921
+ "croquet",
922
+ "cables",
923
+ "sheets",
924
+ "seats",
925
+ "collars",
926
+ "officially licensed by mlb",
927
+ "weapon stands",
928
+ "goalposts",
929
+ "travel covers",
930
+ "leads",
931
+ "comfort bikes",
932
+ "traction cleats",
933
+ "table covers",
934
+ "slow-pitch softballs",
935
+ "swiss chronograph movement",
936
+ "bimini tops",
937
+ "locks",
938
+ "handgun scopes",
939
+ "cue tips",
940
+ "workstands",
941
+ "field dressing accessories",
942
+ "waste baskets",
943
+ "gaiters",
944
+ "vibration dampeners",
945
+ "reservoirs",
946
+ "youth bow sets",
947
+ "tracksuits",
948
+ "groin protectors",
949
+ "wrist weights",
950
+ "child carrier trailers",
951
+ "ball retrievers",
952
+ "date function",
953
+ "ballet equipment",
954
+ "v-neck tee",
955
+ "rowers",
956
+ "surfboards",
957
+ "made in china",
958
+ "ring toss",
959
+ "pack covers",
960
+ "slim fit",
961
+ "backboard components",
962
+ "bait storage",
963
+ "pitching machines",
964
+ "bike lube",
965
+ "whitewater kayaks",
966
+ "snow tubes",
967
+ "gauges",
968
+ "spotlights",
969
+ "bike horns",
970
+ "dive skins",
971
+ "synthetic sole",
972
+ "practice swords",
973
+ "holsters",
974
+ "trophy mounts",
975
+ "disc brake sets",
976
+ "showers",
977
+ "bed pillows",
978
+ "night vision monoculars",
979
+ "officially licensed nfl product",
980
+ "officially licensed by major league baseball",
981
+ "step platforms",
982
+ "cleaning tools",
983
+ "crew neck jersey tee",
984
+ "compression sleeves",
985
+ "batting trainers",
986
+ "tank accessories",
987
+ "buckles",
988
+ "mexico",
989
+ "batting tees",
990
+ "step machines",
991
+ "horns",
992
+ "accessory kits",
993
+ "downriggers",
994
+ "made in the usa or imported",
995
+ "diving hoods",
996
+ "chalk",
997
+ "ultimate",
998
+ "chest protectors",
999
+ "punch mitts",
1000
+ "rotors",
1001
+ "hang dry",
1002
+ "altimeters",
1003
+ "loader accessories",
1004
+ "screen print decoration",
1005
+ "stools",
1006
+ "leg machines",
1007
+ "bridles",
1008
+ "shotguns",
1009
+ "laptop bags",
1010
+ "ball racks",
1011
+ "grip repair kits",
1012
+ "vintage feel",
1013
+ "saws",
1014
+ "hangers",
1015
+ "water purifiers",
1016
+ "bear protection",
1017
+ "kids' protective gear",
1018
+ "ice augers",
1019
+ "diving electronics",
1020
+ "button closure",
1021
+ "reel care accessories",
1022
+ "protective mineral crystal dial window",
1023
+ "barstools",
1024
+ "adult",
1025
+ "headset spacers",
1026
+ "speedometers",
1027
+ "shoe bags",
1028
+ "cabinets",
1029
+ "rubbers",
1030
+ "leader rigging",
1031
+ "hockey pucks",
1032
+ "vibration platform machines",
1033
+ "racing skates",
1034
+ "gun solvents",
1035
+ "camping grills",
1036
+ "desk caddies",
1037
+ "hard hats",
1038
+ "diving boots",
1039
+ "first baseman's mitts",
1040
+ "arm machines",
1041
+ "game table accessories",
1042
+ "slacklines",
1043
+ "battery switches",
1044
+ "screenprint",
1045
+ "bodysuits",
1046
+ "single clubs",
1047
+ "shore power cords",
1048
+ "computer mice",
1049
+ "speed bags",
1050
+ "wool",
1051
+ "control cables",
1052
+ "hand grips",
1053
+ "straight bottom hem",
1054
+ "dumbbell racks",
1055
+ "traction pads",
1056
+ "shuffleboard accessories",
1057
+ "mess kits",
1058
+ "outdoor volleyballs",
1059
+ "goalkeeper equipment",
1060
+ "thailand/vietnam",
1061
+ "thermoses",
1062
+ "elk",
1063
+ "diving packages",
1064
+ "insert tape",
1065
+ "wipe with damp cloth",
1066
+ "80/20 cotton/polyester fleece",
1067
+ "trailer lights",
1068
+ "stainless steel case with stainless-steel band",
1069
+ "portable",
1070
+ "neck gaiters",
1071
+ "meet equipment",
1072
+ "trunks",
1073
+ "floor mats",
1074
+ "trailer winches",
1075
+ "rim brake sets",
1076
+ "paddleboard accessories",
1077
+ "open-hem sleeves; adidas performance",
1078
+ "fish scales",
1079
+ "uniquely designed team slippers",
1080
+ "discuses",
1081
+ "lantern accessories",
1082
+ "progressive fashion with vanguard sports cultures",
1083
+ "reel replacement parts",
1084
+ "dock guards",
1085
+ "fuel-flow instruments",
1086
+ "spokes",
1087
+ "shackles",
1088
+ "t-ball bats",
1089
+ "pack pockets",
1090
+ "made in the usa!",
1091
+ "indoor volleyballs",
1092
+ "expedition tents",
1093
+ "megaphones",
1094
+ "rigid forks",
1095
+ "trainer accessories",
1096
+ "screen printed in the usa",
1097
+ "not water resistant",
1098
+ "nose clips",
1099
+ "full zip hoody",
1100
+ "adult/unisex.",
1101
+ "bocce sets",
1102
+ "marker boards",
1103
+ "skimboards",
1104
+ "freeride boards",
1105
+ "embroidered team logo",
1106
+ "gun rails",
1107
+ "longbows",
1108
+ "sapphire crystal",
1109
+ "poker tables",
1110
+ "screen print logo",
1111
+ "gun racks",
1112
+ "wrist guards",
1113
+ "track jackets",
1114
+ "longeing equipment",
1115
+ "chin straps",
1116
+ "authentic",
1117
+ "valances",
1118
+ "fitness trampolines",
1119
+ "casino prize wheels",
1120
+ "aquatic gloves",
1121
+ "billiards",
1122
+ "unicycles",
1123
+ "stringing kits",
1124
+ "pegs",
1125
+ "set-in sleeves",
1126
+ "made by majestic",
1127
+ "scratch-resistant-sapphire crystal",
1128
+ "quality products",
1129
+ "detailed graphic artwork design",
1130
+ "paddling clothing",
1131
+ "shelters",
1132
+ "laces",
1133
+ "pulleys",
1134
+ "horseshoes",
1135
+ "officially licensed by nfl",
1136
+ "saddle blankets",
1137
+ "lightweight",
1138
+ "chronograph",
1139
+ "bingo sets",
1140
+ "remotes",
1141
+ "machine wash cold",
1142
+ "tire repair kits",
1143
+ "golf bracelets",
1144
+ "waterskis",
1145
+ "mascot costumes",
1146
+ "machine wash cold; tumble dry low",
1147
+ "replacement cleats",
1148
+ "wire terminals",
1149
+ "compression sacks",
1150
+ "card shufflers",
1151
+ "boomerangs",
1152
+ "jumping trainers",
1153
+ "quality embroidery",
1154
+ "trailer accessories",
1155
+ "rib protectors",
1156
+ "full athletic fit",
1157
+ "pellets",
1158
+ "suspension service parts",
1159
+ "parts kits",
1160
+ "officially licensed by the mlb",
1161
+ "adjustable",
1162
+ "boxing pads",
1163
+ "dri-power moisture wicking fabric",
1164
+ "toggle switches",
1165
+ "pogo sticks",
1166
+ "race equipment",
1167
+ "stainless-steel case; black dial; date function",
1168
+ "enclosures",
1169
+ "leg warmers",
1170
+ "licensed collegiate product",
1171
+ "tap dancing equipment",
1172
+ "duffles",
1173
+ "rooftop racks",
1174
+ "water pressure pumps",
1175
+ "japanese quartz movement with analog display",
1176
+ "skorts",
1177
+ "curtains",
1178
+ "in-ground",
1179
+ "card sleeves",
1180
+ "hitting mats",
1181
+ "card albums",
1182
+ "binoculars",
1183
+ "desert dry moisture management polo",
1184
+ "storage",
1185
+ "swim fins",
1186
+ "standard weight benches",
1187
+ "stainless steel case",
1188
+ "attacker shafts",
1189
+ "fitness planners",
1190
+ "scorebooks",
1191
+ "silk eye bags",
1192
+ "wire",
1193
+ "air fresheners",
1194
+ "gun cloths",
1195
+ "dock cleats",
1196
+ "desk lamps",
1197
+ "quartz movement with analog display",
1198
+ "field player gloves",
1199
+ "fast-pitch softballs",
1200
+ "bat racks",
1201
+ "optics covers",
1202
+ "precise and high-quality swiss-quartz movement",
1203
+ "night lights",
1204
+ "quickdraws",
1205
+ "capri pants",
1206
+ "electronic basketball",
1207
+ "foam pads",
1208
+ "personal care products",
1209
+ "mirrors",
1210
+ "machine washable, tumble dry low heat",
1211
+ "regular fit",
1212
+ "spikes",
1213
+ "candles",
1214
+ "facemasks",
1215
+ "pucks",
1216
+ "football helmets",
1217
+ "flag football belts",
1218
+ "treadmill motors",
1219
+ "scent accessories",
1220
+ "handbags",
1221
+ "paperweights",
1222
+ "toasters",
1223
+ "standard bases",
1224
+ "wind socks",
1225
+ "mask defoggers",
1226
+ "caster boards",
1227
+ "finger tabs",
1228
+ "fabric",
1229
+ "spray skirts",
1230
+ "bib shorts",
1231
+ "high quality",
1232
+ "drysuits",
1233
+ "tagless label, eliminates scratching",
1234
+ "double needle stitching",
1235
+ "ball storage",
1236
+ "tank covers",
1237
+ "messenger bags",
1238
+ "precise japanese-quartz movement",
1239
+ "pull-on closure",
1240
+ "spoke decorations",
1241
+ "weapon cases",
1242
+ "billiard lighting",
1243
+ "power cages",
1244
+ "sliding pads",
1245
+ "short sleeve basic crew neck tee",
1246
+ "buckle closure",
1247
+ "slap straps",
1248
+ "risers",
1249
+ "raglan sleeves",
1250
+ "support your favorite nhl team",
1251
+ "parts",
1252
+ "ncaa licensed product",
1253
+ "tie-downs",
1254
+ "fitness circles",
1255
+ "catcher helmets",
1256
+ "table tennis sets",
1257
+ "water sports accessories",
1258
+ "gaffs",
1259
+ "jacks",
1260
+ "exercise ball accessories",
1261
+ "forearm guards",
1262
+ "adjustable plastic snapback cap",
1263
+ "swim belts",
1264
+ "face guards",
1265
+ "poker table tops",
1266
+ "padded shorts",
1267
+ "officially licensed product",
1268
+ "snorkel vests",
1269
+ "hearing enhancement aids",
1270
+ "unstrung",
1271
+ "chain guards",
1272
+ "made by new era",
1273
+ "cotton blend",
1274
+ "polyester-blend",
1275
+ "rear shocks",
1276
+ "by adidas",
1277
+ "quickly",
1278
+ "tetherball",
1279
+ "gun snakes",
1280
+ "goose",
1281
+ "net systems",
1282
+ "climbing protection",
1283
+ "shot puts",
1284
+ "training cones",
1285
+ "foam wedges",
1286
+ "marker buoys",
1287
+ "windsurfing",
1288
+ "agility ladders",
1289
+ "training putters",
1290
+ "polycarbonate lens",
1291
+ "kneeboarding",
1292
+ "cornhole boards",
1293
+ "clips",
1294
+ "short sleeves",
1295
+ "desert dry polo",
1296
+ "basic bows",
1297
+ "fleece lining",
1298
+ "tip-ups",
1299
+ "gun holders",
1300
+ "outdoor skates",
1301
+ "short-sleeve shirt",
1302
+ "fishing belts",
1303
+ "co2 systems",
1304
+ "slim flights",
1305
+ "dri-fit",
1306
+ "sweatpants",
1307
+ "indoor surfboard storage",
1308
+ "water helmets",
1309
+ "elastic waistband",
1310
+ "dip stands",
1311
+ "calorie counters",
1312
+ "horse driving equipment",
1313
+ "ladder ball",
1314
+ "performance wear, loose fit",
1315
+ "swiss quartz movement with analog display",
1316
+ "knee high socks",
1317
+ "digital gauges",
1318
+ "indoor kayak storage",
1319
+ "shoulder-to-shoulder taping",
1320
+ "adjustable closure",
1321
+ "wall-mount",
1322
+ "eggs",
1323
+ "roulette equipment",
1324
+ "dog packs",
1325
+ "olympic weight benches",
1326
+ "surfboard racks",
1327
+ "pet harnesses",
1328
+ "machine wash, tumble dry",
1329
+ "made in pakistan",
1330
+ "hecho en ee. uu. e importado",
1331
+ "side entry pockets",
1332
+ "child seats",
1333
+ "officially licensed.",
1334
+ "computer accessories",
1335
+ "self fabric neck band",
1336
+ "utility cord",
1337
+ "spoke tools",
1338
+ "durable mineral crystal",
1339
+ "nipples",
1340
+ "crops",
1341
+ "made with techno-dry",
1342
+ "ankle guards",
1343
+ "shortboards",
1344
+ "women's balls",
1345
+ "classic style hood with drawstring",
1346
+ "official nba product",
1347
+ "tagless heat-seal neck label",
1348
+ "hockey sticks",
1349
+ "padding supplies",
1350
+ "grease",
1351
+ "weather monitors",
1352
+ "external frame backpacks",
1353
+ "great gift for sport fans!",
1354
+ "automatic movement",
1355
+ "pockets",
1356
+ "coverseamed neck double-needle hem",
1357
+ "cotton-blend",
1358
+ "spike wrenches",
1359
+ "unisex",
1360
+ "composite frame",
1361
+ "kicking targets",
1362
+ "crewneck",
1363
+ "bells",
1364
+ "replacement lenses",
1365
+ "preshrunk",
1366
+ "premium knit cap",
1367
+ "39thirty flex fit cap",
1368
+ "mitt accessories",
1369
+ "water globes",
1370
+ "workout shorts",
1371
+ "analog-quartz movement",
1372
+ "heatgear",
1373
+ "machine wash and dry",
1374
+ "sleeveless suits",
1375
+ "cotton/polyester",
1376
+ "pouch pocket",
1377
+ "scoop neck tee",
1378
+ "rib knit cuffs and waistband",
1379
+ "golf gift sets",
1380
+ "motor flushers",
1381
+ "patented one-fit sizing",
1382
+ "tagless technology for a better fit",
1383
+ "nike",
1384
+ "strung",
1385
+ "magnified date window at 3:00",
1386
+ "outdoor thermometers",
1387
+ "sais",
1388
+ "double-end bags",
1389
+ "fly tying kits",
1390
+ "plastic balls",
1391
+ "bean bag chairs",
1392
+ "moisture-wicking finish",
1393
+ "kicking shields",
1394
+ "embroidered logo",
1395
+ "two front pockets",
1396
+ "reversible",
1397
+ "thailand - vietnam",
1398
+ "bangladesh/pakistan",
1399
+ "material:spandex",
1400
+ "goal targets",
1401
+ "canoes",
1402
+ "steering wheels",
1403
+ "india",
1404
+ "waterproof",
1405
+ "comfortable",
1406
+ "mailboxes",
1407
+ "black",
1408
+ "fixed gear bike frames",
1409
+ "coverstiched seams",
1410
+ "canvas",
1411
+ "paper cups",
1412
+ "snap back",
1413
+ "no fur",
1414
+ "great quality jewelry!",
1415
+ "perfect for every day use",
1416
+ "nylon lining",
1417
+ "chain tension idlers",
1418
+ "alarm",
1419
+ "machine wash cold, air dry",
1420
+ "mounts",
1421
+ "rails",
1422
+ "japanese-quartz movement",
1423
+ "lesotho",
1424
+ "embroidered team graphics"
1425
+ ]
interactive/pyvis_graph.py CHANGED
@@ -117,7 +117,8 @@ def generate_network(kb, node_id, max_nodes=10, num_hops='2'):
117
  if num_hops == "2":
118
  edge_index, edge_types = get_one_hop(kb, node_id, max_nodes)
119
  neighbor_nodes = torch.unique(edge_index).tolist()
120
- neighbor_nodes.remove(node_id)
 
121
 
122
  for neighbor_node in neighbor_nodes:
123
  e_index, e_type = get_one_hop(kb, neighbor_node, max_nodes=1)
@@ -134,6 +135,8 @@ def generate_network(kb, node_id, max_nodes=10, num_hops='2'):
134
  edge_index = torch.cat([edge_index, add_edge_index], dim=1)
135
  edge_types = torch.cat([edge_types, add_edge_types], dim=0)
136
 
 
 
137
  node_ids, relabel_edge_index, _, _ = relabel(
138
  torch.arange(kb.num_nodes()), edge_index, batch=torch.zeros(kb.num_nodes())
139
  )
@@ -157,6 +160,8 @@ def generate_network(kb, node_id, max_nodes=10, num_hops='2'):
157
  font={"align": "middle", "size": 10},
158
  )
159
  for idx in range(relabel_edge_index.size(-1)):
 
 
160
  if indirected:
161
  net.add_edge(
162
  relabel_edge_index[0][idx].item(),
@@ -195,7 +200,7 @@ def get_text_html(kb, node_id):
195
  font-family: SF Pro Text, SF Pro Icons, Helvetica Neue, Helvetica, Arial, sans-serif;">{text}</div>"""
196
 
197
 
198
- def get_subgraph_html(kb, kb_name, node_id, max_nodes=10, num_hops=1):
199
  network = generate_network(kb, node_id, max_nodes, num_hops)
200
 
201
  nodes = network[0]
@@ -271,5 +276,4 @@ def main():
271
 
272
 
273
  if __name__ == "__main__":
274
-
275
  main()
 
117
  if num_hops == "2":
118
  edge_index, edge_types = get_one_hop(kb, node_id, max_nodes)
119
  neighbor_nodes = torch.unique(edge_index).tolist()
120
+ if node_id in neighbor_nodes:
121
+ neighbor_nodes.remove(node_id)
122
 
123
  for neighbor_node in neighbor_nodes:
124
  e_index, e_type = get_one_hop(kb, neighbor_node, max_nodes=1)
 
135
  edge_index = torch.cat([edge_index, add_edge_index], dim=1)
136
  edge_types = torch.cat([edge_types, add_edge_types], dim=0)
137
 
138
+ # add a self-loop for node_id to avoid isolated node
139
+ edge_index = torch.concat([edge_index, torch.LongTensor([[node_id], [node_id]])], dim=1)
140
  node_ids, relabel_edge_index, _, _ = relabel(
141
  torch.arange(kb.num_nodes()), edge_index, batch=torch.zeros(kb.num_nodes())
142
  )
 
160
  font={"align": "middle", "size": 10},
161
  )
162
  for idx in range(relabel_edge_index.size(-1)):
163
+ if relabel_edge_index[0][idx].item() == relabel_edge_index[1][idx].item():
164
+ continue
165
  if indirected:
166
  net.add_edge(
167
  relabel_edge_index[0][idx].item(),
 
200
  font-family: SF Pro Text, SF Pro Icons, Helvetica Neue, Helvetica, Arial, sans-serif;">{text}</div>"""
201
 
202
 
203
+ def get_subgraph_html(kb, kb_name, node_id, max_nodes=10, num_hops='1'):
204
  network = generate_network(kb, node_id, max_nodes, num_hops)
205
 
206
  nodes = network[0]
 
276
 
277
 
278
  if __name__ == "__main__":
 
279
  main()
src/benchmarks/get_semistruct.py CHANGED
@@ -7,17 +7,18 @@ def get_semistructured_data(name, root='data/', download_processed=True, **kwarg
7
  if name == 'amazon':
8
  categories = ['Sports_and_Outdoors']
9
  kb = AmazonSemiStruct(root=data_root,
10
- categories=categories,
11
- meta_link_types=['brand'],
12
- download_processed=download_processed,
13
- **kwargs
14
- )
15
  if name == 'primekg':
16
  kb = PrimeKGSemiStruct(root=data_root,
17
- download_processed=download_processed,
18
- **kwargs)
19
 
20
  if name == 'mag':
21
  kb = MagSemiStruct(root=data_root,
22
- download_processed=download_processed)
23
- return kb
 
 
7
  if name == 'amazon':
8
  categories = ['Sports_and_Outdoors']
9
  kb = AmazonSemiStruct(root=data_root,
10
+ categories=categories,
11
+ meta_link_types=['brand', 'category'],
12
+ download_processed=download_processed,
13
+ **kwargs
14
+ )
15
  if name == 'primekg':
16
  kb = PrimeKGSemiStruct(root=data_root,
17
+ download_processed=download_processed,
18
+ **kwargs)
19
 
20
  if name == 'mag':
21
  kb = MagSemiStruct(root=data_root,
22
+ download_processed=download_processed,
23
+ **kwargs)
24
+ return kb
src/benchmarks/semistruct/amazon.py CHANGED
@@ -20,7 +20,6 @@ PROCESSED_DATASET = {
20
  "file": "amazon_processed.zip",
21
  }
22
 
23
-
24
  class AmazonSemiStruct(SemiStructureKB):
25
 
26
  REVIEW_CATEGORIES = set(['Amazon_Fashion','All_Beauty','Appliances',
@@ -49,6 +48,8 @@ class AmazonSemiStruct(SemiStructureKB):
49
  'Office_Products', 'Patio_Lawn_and_Garden', 'Pet_Supplies', 'Sports_and_Outdoors',
50
  'Tools_and_Home_Improvement', 'Toys_and_Games', 'Video_Games'])
51
 
 
 
52
  link_columns = ['also_buy', 'also_view']
53
  review_columns = ['reviewerID', 'summary', 'reviewText', 'vote', 'overall', 'verified', 'reviewTime']
54
  qa_columns = ['questionType', 'answerType', 'question', 'answer', 'answerTime']
@@ -56,12 +57,13 @@ class AmazonSemiStruct(SemiStructureKB):
56
  'rank', 'details', 'description']
57
  candidate_types = ['product']
58
  node_attr_dict = {'product': ['title', 'dimensions', 'weight', 'description', 'features', 'reviews', 'Q&A'],
59
- 'brand': ['brand_name']}
 
60
 
61
  def __init__(self,
62
  root,
63
  categories: list,
64
- meta_link_types=['brand'],
65
  max_entries=25,
66
  download_processed=True,
67
  **kwargs):
@@ -104,6 +106,8 @@ class AmazonSemiStruct(SemiStructureKB):
104
  print(f'Load cached graph with meta link types {meta_link_types}')
105
  processed_data = load_files(cache_path)
106
  else:
 
 
107
  processed_data = self._process_raw(categories)
108
  if meta_link_types:
109
  # customize the graph by adding meta links
@@ -113,10 +117,10 @@ class AmazonSemiStruct(SemiStructureKB):
113
  def __getitem__(self, idx):
114
  idx = int(idx)
115
  node_info = self.node_info[idx]
116
- try:
117
- dimensions, weight = node.details.dictionary.product_dimensions.split(' ; ')
118
- node_info['dimensions'], node_info['weight'] = dimensions, weight
119
- except: pass
120
  node = Node()
121
  register_node(node, node_info)
122
  return node
@@ -167,6 +171,8 @@ class AmazonSemiStruct(SemiStructureKB):
167
 
168
  if self.node_type_dict[int(self.node_types[idx])] == 'brand':
169
  return f'brand name: {self[idx].brand_name}'
 
 
170
 
171
  node = self[idx]
172
  doc = f'- product: {node.title}\n'
@@ -268,29 +274,50 @@ class AmazonSemiStruct(SemiStructureKB):
268
  print(f'Check data downloading...')
269
  for category in review_categories:
270
  review_header = 'https://datarepo.eng.ucsd.edu/mcauley_group/data/amazon_v2'
271
- download_url(f'{review_header}/categoryFiles/{category}.json.gz', self.raw_data_dir)
272
- download_url(f'{review_header}/metaFiles2/meta_{category}.json.gz', self.raw_data_dir)
 
 
273
  for category in qa_categories:
274
  qa_header = 'https://datarepo.eng.ucsd.edu/mcauley_group/data/amazon/qa'
275
- download_url(f'{qa_header}/qa_{category}.json.gz', self.raw_data_dir)
 
 
276
 
277
  if not osp.exists(osp.join(self.processed_data_dir, 'node_info.pkl')):
 
278
  print('Loading data... It might take a while')
279
  # read amazon QA data
280
- df_qa = pd.concat([read_qa(osp.join(self.raw_data_dir, f'qa_{category}.json.gz'))
281
- for category in qa_categories])[['asin'] + self.qa_columns]
282
-
 
 
 
 
 
283
  # read amazon review data
284
- df_review = pd.concat([read_review(osp.join(self.raw_data_dir, f'{category}.json.gz'))
 
 
 
 
285
  for category in review_categories])[['asin'] + self.review_columns]
 
 
286
  # read amazon meta data from amazon review & amazon kdd
287
- meta_df_lst = []
288
- for category in review_categories:
289
- cat_review = read_review(osp.join(self.raw_data_dir, f'meta_{category}.json.gz'))
290
- cat_review.insert(0, 'global_category', category.replace('_', ' '))
291
- meta_df_lst.append(cat_review)
292
- df_ucsd_meta = pd.concat(meta_df_lst)
293
-
 
 
 
 
 
294
  print('Preprocessing data...')
295
  df_ucsd_meta = df_ucsd_meta.drop_duplicates(subset='asin', keep='first')
296
  df_meta = df_ucsd_meta[self.meta_columns + self.link_columns]
@@ -342,8 +369,23 @@ class AmazonSemiStruct(SemiStructureKB):
342
 
343
  n_e_types, n_n_types = len(edge_type_dict), len(node_type_dict)
344
  for i, link_type in enumerate(meta_link_types):
345
- values = np.array([self._process_brand(node_info_i[link_type]) for node_info_i in node_info.values() if link_type in node_info_i.keys()])
346
- indices = np.array([idx for idx, node_info_i in enumerate(node_info.values()) if link_type in node_info_i.keys()])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
 
348
  cur_n_nodes = len(node_info)
349
  node_type_dict[n_n_types + i] = link_type
@@ -398,6 +440,14 @@ class AmazonSemiStruct(SemiStructureKB):
398
  brand = self._process_brand(clean_data(df_meta_i[column]))
399
  if len(brand) > 1:
400
  node_info[idx]['brand'] = brand
 
 
 
 
 
 
 
 
401
  else:
402
  node_info[idx][column] = clean_data(df_meta_i[column])
403
 
@@ -482,4 +532,4 @@ def read_qa(path):
482
  df[i] = d
483
  i += 1
484
  return pd.DataFrame.from_dict(df, orient='index')
485
- return getDF(path)
 
20
  "file": "amazon_processed.zip",
21
  }
22
 
 
23
  class AmazonSemiStruct(SemiStructureKB):
24
 
25
  REVIEW_CATEGORIES = set(['Amazon_Fashion','All_Beauty','Appliances',
 
48
  'Office_Products', 'Patio_Lawn_and_Garden', 'Pet_Supplies', 'Sports_and_Outdoors',
49
  'Tools_and_Home_Improvement', 'Toys_and_Games', 'Video_Games'])
50
 
51
+ sub_category = 'data/amazon/stats/category_list.json'
52
+ SUB_CATEGORIES = set(json.load(open(sub_category, 'r')))
53
  link_columns = ['also_buy', 'also_view']
54
  review_columns = ['reviewerID', 'summary', 'reviewText', 'vote', 'overall', 'verified', 'reviewTime']
55
  qa_columns = ['questionType', 'answerType', 'question', 'answer', 'answerTime']
 
57
  'rank', 'details', 'description']
58
  candidate_types = ['product']
59
  node_attr_dict = {'product': ['title', 'dimensions', 'weight', 'description', 'features', 'reviews', 'Q&A'],
60
+ 'brand': ['brand_name'],
61
+ 'category': ['category_name']}
62
 
63
  def __init__(self,
64
  root,
65
  categories: list,
66
+ meta_link_types=['category'],
67
  max_entries=25,
68
  download_processed=True,
69
  **kwargs):
 
106
  print(f'Load cached graph with meta link types {meta_link_types}')
107
  processed_data = load_files(cache_path)
108
  else:
109
+ print(f'Start processing raw data...')
110
+ print(f'{meta_link_types=}')
111
  processed_data = self._process_raw(categories)
112
  if meta_link_types:
113
  # customize the graph by adding meta links
 
117
  def __getitem__(self, idx):
118
  idx = int(idx)
119
  node_info = self.node_info[idx]
120
+ # try:
121
+ # dimensions, weight = node.details.dictionary.product_dimensions.split(' ; ')
122
+ # node_info['dimensions'], node_info['weight'] = dimensions, weight
123
+ # except: pass
124
  node = Node()
125
  register_node(node, node_info)
126
  return node
 
171
 
172
  if self.node_type_dict[int(self.node_types[idx])] == 'brand':
173
  return f'brand name: {self[idx].brand_name}'
174
+ if self.node_type_dict[int(self.node_types[idx])] == 'category':
175
+ return f'category name: {self[idx].category_name}'
176
 
177
  node = self[idx]
178
  doc = f'- product: {node.title}\n'
 
274
  print(f'Check data downloading...')
275
  for category in review_categories:
276
  review_header = 'https://datarepo.eng.ucsd.edu/mcauley_group/data/amazon_v2'
277
+ if not os.path.exists(osp.join(self.raw_data_dir, f'{category}.json.gz')):
278
+ print(f'Downloading {category} data...')
279
+ download_url(f'{review_header}/categoryFiles/{category}.json.gz', self.raw_data_dir)
280
+ download_url(f'{review_header}/metaFiles2/meta_{category}.json.gz', self.raw_data_dir)
281
  for category in qa_categories:
282
  qa_header = 'https://datarepo.eng.ucsd.edu/mcauley_group/data/amazon/qa'
283
+ if not os.path.exists(osp.join(self.raw_data_dir, f'qa_{category}.json.gz')):
284
+ print(f'Downloading {category} QA data...')
285
+ download_url(f'{qa_header}/qa_{category}.json.gz', self.raw_data_dir)
286
 
287
  if not osp.exists(osp.join(self.processed_data_dir, 'node_info.pkl')):
288
+ ckt_path = 'data/amazon/intermediate'
289
  print('Loading data... It might take a while')
290
  # read amazon QA data
291
+ df_qa_path = os.path.join(ckt_path, 'df_qa.pkl')
292
+ if os.path.exists(df_qa_path):
293
+ df_qa = pd.read_pickle(df_qa_path)
294
+ else:
295
+ df_qa = pd.concat([read_qa(osp.join(self.raw_data_dir, f'qa_{category}.json.gz'))
296
+ for category in qa_categories])[['asin'] + self.qa_columns]
297
+ df_qa.to_pickle(df_qa_path)
298
+ print('df_qa loaded')
299
  # read amazon review data
300
+ df_review_path = os.path.join(ckt_path, 'df_review.pkl')
301
+ if os.path.exists(df_review_path):
302
+ df_review = pd.read_pickle(df_review_path)
303
+ else:
304
+ df_review = pd.concat([read_review(osp.join(self.raw_data_dir, f'{category}.json.gz'))
305
  for category in review_categories])[['asin'] + self.review_columns]
306
+ df_review.to_pickle(df_review_path)
307
+ print('df_review loaded')
308
  # read amazon meta data from amazon review & amazon kdd
309
+ df_ucsd_meta_path = os.path.join(ckt_path, 'df_ucsd_meta.pkl')
310
+ if os.path.exists(df_ucsd_meta_path):
311
+ df_ucsd_meta = pd.read_pickle(df_ucsd_meta_path)
312
+ else:
313
+ meta_df_lst = []
314
+ for category in review_categories:
315
+ cat_review = read_review(osp.join(self.raw_data_dir, f'meta_{category}.json.gz'))
316
+ cat_review.insert(0, 'global_category', category.replace('_', ' '))
317
+ meta_df_lst.append(cat_review)
318
+ df_ucsd_meta = pd.concat(meta_df_lst)
319
+ df_ucsd_meta.to_pickle(df_ucsd_meta_path)
320
+ print('df_ucsd_meta loaded')
321
  print('Preprocessing data...')
322
  df_ucsd_meta = df_ucsd_meta.drop_duplicates(subset='asin', keep='first')
323
  df_meta = df_ucsd_meta[self.meta_columns + self.link_columns]
 
369
 
370
  n_e_types, n_n_types = len(edge_type_dict), len(node_type_dict)
371
  for i, link_type in enumerate(meta_link_types):
372
+ if link_type == 'brand':
373
+ values = np.array([self._process_brand(node_info_i[link_type]) for node_info_i in node_info.values() if link_type in node_info_i.keys()])
374
+ indices = np.array([idx for idx, node_info_i in enumerate(node_info.values()) if link_type in node_info_i.keys()])
375
+ elif link_type == 'category':
376
+ value_list = []
377
+ indice_list = []
378
+ for idx, node_info_i in enumerate(node_info.values()):
379
+ if link_type in node_info_i.keys():
380
+ value_list.extend(node_info_i[link_type])
381
+ indice_list.extend([idx for _ in range(len(node_info_i[link_type]))])
382
+ values = np.array(value_list)
383
+ indices = np.array(indice_list)
384
+ print(f'{link_type=}, {len(values)=}, {len(indices)=}')
385
+ # print(values[:50])
386
+ print(indices[:50])
387
+ else:
388
+ raise Exception(f'Invalid meta link type {link_type}')
389
 
390
  cur_n_nodes = len(node_info)
391
  node_type_dict[n_n_types + i] = link_type
 
440
  brand = self._process_brand(clean_data(df_meta_i[column]))
441
  if len(brand) > 1:
442
  node_info[idx]['brand'] = brand
443
+ elif column == 'category':
444
+ category_list = []
445
+ for category in df_meta_i[column]:
446
+ category = category.lower()
447
+ if category in self.SUB_CATEGORIES:
448
+ category_list.append(category)
449
+ if len(category_list) > 0:
450
+ node_info[idx]['category'] = category_list
451
  else:
452
  node_info[idx][column] = clean_data(df_meta_i[column])
453
 
 
532
  df[i] = d
533
  i += 1
534
  return pd.DataFrame.from_dict(df, orient='index')
535
+ return getDF(path)