jwzimmer-zz / tv-tropes

UVM Stat 287 Final Project repo - network of tropes from TV Tropes wiki
MIT License
2 stars 3 forks source link

Make a network based on their explicit structure decisions #16

Closed jwzimmer-zz closed 3 years ago

jwzimmer-zz commented 3 years ago

Based on https://github.com/jwzimmer/tv-tropes/tree/main/their_structure.

ACTUAL NETWORK TIME MAYBE????

jwzimmer-zz commented 3 years ago

These are the examples given in the Sister Tropes page: [{'IdiotBall', 'PyrrhicVillainy', 'ConflictBall', 'VillainBall'}, {'BigNo', 'ChewingTheScenery', 'LargeHam'}, {'ImpracticallyFancyOutfit', 'ErmineCapeEffect'}, {'RoyalsWhoActuallyDoSomething', 'LadyOfWar'}, {'ItTastesLikeFeet', 'LethalChef'}, {'OneJudgeToRuleThemAll', 'GoldenSnitch'}, {'HideousHangoverCure', 'GargleBlaster'}, {'LoadsAndLoadsOfCharacters', 'CastOfSnowflakes'}, {'GenocideBackfire', 'NiceJobBreakingItHerod'}, {'BulletproofHumanShield', 'HumanShield'}, {'EvilCounterpart', 'EvilKnockoff', 'EvilTwin', 'CriminalDoppelganger', 'IdenticalStranger', 'AlternateUniverse'}, {'DescendingCeiling', 'DeathTrap', 'TheWallsAreClosingIn'}, {'ParodySue', 'TheAce', 'TakeThat'}, {'ShamelessFanserviceGirl', 'ReluctantFanserviceGirl', 'InnocentFanserviceGirl'}, {'NonPoweredCostumedHero', 'Batman', 'BadassNormal'}, {'FlawExploitation', 'BatmanGambit', 'XanatosGambit', 'MortonsFork'}, {'UnnecessarilyLargeVessel', 'StarshipLuxurious'}, {'EscapePod', 'DropPod', 'BoardingParty', 'DynamicEntry', 'BoardingPod', 'ItsRainingMen'}, {'PassedInTheirSleep', 'SlainInTheirSleep', 'ExactlyWhatItSaysOnTheTin', 'PeacefulInDeath', 'SplitAtBirth', 'yk_activity.php?interval=.25'}, {'GotVolunteered', 'WhyAreYouLookingAtMeLikeThat'}, {'SoreLoser', 'UnsportsmanlikeGloating'}, {'GreenHillZone', 'TheLostWoods', 'PlatformGame', 'PalmtreePanic'}, {'DecadentCourt', 'KingOnHisDeathbed', 'SuccessionCrisis'}, {'PlatonicLifePartners', 'HeterosexualLifePartners'}, {'HalloweenTown', 'BleakLevel', 'BigBoosHaunt'}, {'PicturePerfectPresentation', 'Dissolve', 'AgeCut'}, {'CoupleThemeNaming', 'ThemeTwinNaming', 'FamilyThemeNaming', 'RhymingNames', 'RhymeThemeNaming'}, {'MiniDungeon', 'DiscOneFinalBoss', 'BonusDungeon', 'BonusBoss', 'LegacyBossBattle', 'AllTheWorldsAreAStage', 'MiniBoss', 'NostalgiaLevel', 'FinalExamBoss', 'DiscOneFinalDungeon'}, {'TheMovie', 'DeathByAdaptation', 'DiesDifferentlyInAdaptation'}]

jwzimmer-zz commented 3 years ago

@nguyenhphilip it's our first network!!!

Screen Shot 2020-10-28 at 6 19 38 PM

It's all the tropes listed as being sister tropes. I think. If I did it right. (sistertropes.gml from https://github.com/jwzimmer/tv-tropes/commit/e45eb63754215c61adcc0db6b04851c04924aaee)

jwzimmer-zz commented 3 years ago

Edgelist from super tropes: https://tvtropes.org/pmwiki/pmwiki.php/Main/SuperTrope (I added a "SuperTrope" node with an edge to each super trope example; I included super tropes NOT in the trope master list; I did not include sub tropes that were not in the trope master list)

[('SuperTropes', 'ActionHero'), ('ActionHero', 'ActionGirl'), ('ActionHero', 'HollywoodActionHero'), ('ActionHero', 'NerdActionHero'), ('ActionHero', 'ActionPet'), ('SuperTropes', 'AnomalousArt'), ('AnomalousArt', 'CreepyChangingPainting'), ('AnomalousArt', 'LivingStatue'), ('AnomalousArt', 'PhantomZonePicture'), ('AnomalousArt', 'PortalPicture'), ('AnomalousArt', 'SpookyPainting'), ('SuperTropes', 'AppropriateAnimalAttire'), ('SuperTropes', 'AssPull'), ('AssPull', 'DiabolusExMachina'), ('AssPull', 'DeusExMachina'), ('SuperTropes', 'BiggerIsBetter'), ('SuperTropes', 'BodySnatcher'), ('BodySnatcher', 'FreakyFridayFlip'), ('BodySnatcher', 'RaisedAsAHost'), ('BodySnatcher', 'PuppeteerParasite'), ('BodySnatcher', 'FreakyFridaySabotage'), ('BodySnatcher', 'GrandTheftMe'), ('BodySnatcher', 'BodySurf'), ('BodySnatcher', 'PeoplePuppets'), ('BodySnatcher', 'DemonicPossession'), ('BodySnatcher', 'CloneByConversion'), ('BodySnatcher', 'FamilialBodySnatcher'), ('SuperTropes', 'Cap'), ('Cap', 'ArbitraryAugmentationLimit'), ('Cap', 'ArbitraryHeadcountLimit'), ('Cap', 'CharacterNameLimits'), ('Cap', 'AbsurdlyHighLevelCap'), ('Cap', 'AbsurdlyLowLevelCap'), ('Cap', 'OneBulletAtATime'), ('SuperTropes', 'Characters'), ('SuperTropes', 'CharacterFocus'), ('CharacterFocus', 'ADayInTheLimelight'), ('SuperTropes', 'ChekhovsGun'), ('SuperTropes', 'TheChosenOne'), ('TheChosenOne', 'ThePoorlyChosenOne'), ('TheChosenOne', 'OnlyTheChosenMayRide'), ('TheChosenOne', 'TheChosenWannabe'), ('TheChosenOne', 'TheChosenZero'), ('TheChosenOne', 'TheUnchosenOne'), ('TheChosenOne', 'MultipleChoiceChosen'), ('TheChosenOne', 'TheChooserOfTheOne'), ('TheChosenOne', 'LegacyOfTheChosen'), ('TheChosenOne', 'OnlyTheChosenMayWield'), ('TheChosenOne', 'TheChosenPeople'), ('TheChosenOne', 'ItSucksToBeTheChosenOne'), ('TheChosenOne', 'BirthmarkOfDestiny'), ('TheChosenOne', 'TheChosenMany'), ('SuperTropes', 'CloserToEarth'), ('CloserToEarth', 'WhiteMaleLead'), ('CloserToEarth', 'MagicalNegro'), ('CloserToEarth', 'MagicalAsian'), ('SuperTropes', 'Conflict'), ('SuperTropes', 'DeathFromAbove'), ('DeathFromAbove', 'ColonyDrop'), ('DeathFromAbove', 'OrbitalBombardment'), ('DeathFromAbove', 'KillSat'), ('SuperTropes', 'EatingTheEnemy'), ('EatingTheEnemy', 'CannibalismSuperpower'), ('EatingTheEnemy', 'YouAreWhoYouEat'), ('EatingTheEnemy', 'FedToTheBeast'), ('SuperTropes', 'EldritchAbomination'), ('EldritchAbomination', 'AnimalisticAbomination'), ('EldritchAbomination', 'AdaptationalAbomination'), ('EldritchAbomination', 'UndeadAbomination'), ('EldritchAbomination', 'EldritchStarship'), ('EldritchAbomination', 'HumanoidAbomination'), ('EldritchAbomination', 'MechanicalAbomination'), ('EldritchAbomination', 'EldritchLocation'), ('EldritchAbomination', 'BotanicalAbomination'), ('EldritchAbomination', 'AdorableAbomination'), ('SuperTropes', 'TheFace'), ('TheFace', 'TeamMom'), ('TheFace', 'TeamDad'), ('TheFace', 'TheChick'), ('TheFace', 'TheHeart'), ('SuperTropes', 'AFriendInNeed'), ('AFriendInNeed', 'GreaterNeedThanMine'), ('AFriendInNeed', 'IGotYouCovered'), ('AFriendInNeed', 'ChangedMyMindKid'), ('AFriendInNeed', 'FinancialTestOfFriendship'), ('AFriendInNeed', 'GoodSamaritan'), ('SuperTropes', 'IdealHero'), ('IdealHero', 'CaptainPatriotic'), ('IdealHero', 'KnightInShiningArmor'), ('IdealHero', 'AllLovingHero'), ('IdealHero', 'TheCape'), ('SuperTropes', 'Jerkass'), ('Jerkass', 'JerkWithAHeartOfJerk'), ('SuperTropes', 'JourneyToTheSky'), ('JourneyToTheSky', 'CallOfTheWildBlueYonder'), ('JourneyToTheSky', 'ScalingTheSummit'), ('JourneyToTheSky', 'TowerOfBabel'), ('SuperTropes', 'LikeFatherLikeSon'), ('LikeFatherLikeSon', 'InTheBlood'), ('LikeFatherLikeSon', 'DaddysLittleVillain'), ('LikeFatherLikeSon', 'SharedFamilyQuirks'), ('LikeFatherLikeSon', 'PursuingParentalPerils'), ('LikeFatherLikeSon', 'HeroicLineage'), ('LikeFatherLikeSon', 'GenerationXerox'), ('LikeFatherLikeSon', 'LineageComesFromTheFather'), ('LikeFatherLikeSon', 'NotSoDifferent'), ('LikeFatherLikeSon', 'LamarckWasRight'), ('LikeFatherLikeSon', 'TurnOutLikeHisFather'), ('LikeFatherLikeSon', 'FollowInMyFootsteps'), ('LikeFatherLikeSon', 'SecretLegacy'), ('LikeFatherLikeSon', 'LoserSonOfLoserDad'), ('LikeFatherLikeSon', 'OverlordJr'), ('SuperTropes', 'LivingADoubleLife'), ('SuperTropes', 'MacGuffin'), ('MacGuffin', 'ArtifactOfDoom'), ('MacGuffin', 'MacGuffinLocation'), ('MacGuffin', 'LivingMacGuffin'), ('MacGuffin', 'PlotCoupon'), ('SuperTropes', 'MakingLoveInAllTheWrongPlaces'), ('MakingLoveInAllTheWrongPlaces', 'ProfessionalsDoItOnDesks'), ('MakingLoveInAllTheWrongPlaces', 'ZeroGSpot'), ('MakingLoveInAllTheWrongPlaces', 'MileHighClub'), ('MakingLoveInAllTheWrongPlaces', 'TwoPersonPoolParty'), ('MakingLoveInAllTheWrongPlaces', 'ElevatorGoingDown'), ('MakingLoveInAllTheWrongPlaces', 'AutoErotica'), ('SuperTropes', 'NatureIsNotAToy'), ('NatureIsNotAToy', 'ThePowerOfTheSun'), ('SuperTropes', 'NoHarmRequirement'), ('NoHarmRequirement', 'BringItBackAlive'), ('NoHarmRequirement', 'CantKillYouStillNeedYou'), ('NoHarmRequirement', 'IWantThemAlive'), ('NoHarmRequirement', 'SheatheYourSword'), ('SuperTropes', 'PinkMeansFeminine'), ('PinkMeansFeminine', 'PrincessesPreferPink'), ('PinkMeansFeminine', 'PinkGirlBlueBoy'), ('SuperTropes', 'Plot'), ('SuperTropes', 'PrettyBoy'), ('SuperTropes', 'RemovingTheRival'), ('RemovingTheRival', 'MurderTheHypotenuse'), ('RemovingTheRival', 'CripplingTheCompetition'), ('SuperTropes', 'RuleOfIndex'), ('SuperTropes', 'SecretIdentity'), ('SuperTropes', 'ShadesOfConflict'), ('ShadesOfConflict', 'BlackAndWhiteInsanity'), ('ShadesOfConflict', 'BlackAndWhiteMorality'), ('ShadesOfConflict', 'GreyAndGrayMorality'), ('SuperTropes', 'ShowDontTell'), ('ShowDontTell', 'InformedAttribute'), ('ShowDontTell', 'ThatMakesMeFeelAngry'), ('SuperTropes', 'SignificantWardrobeShift'), ('SignificantWardrobeShift', 'GoodCostumeSwitch'), ('SignificantWardrobeShift', 'ExpositoryHairstyleChange'), ('SignificantWardrobeShift', 'ImportantHaircut'), ('SignificantWardrobeShift', 'EvilCostumeSwitch'), ('SuperTropes', 'ThreeApproachSystem'), ('ThreeApproachSystem', 'BalanceSpeedStrengthTrio'), ('ThreeApproachSystem', 'DamagerHealerTank'), ('ThreeApproachSystem', 'CombatDiplomacyStealth'), ('ThreeApproachSystem', 'PhysicalMysticalTechnological'), ('ThreeApproachSystem', 'FighterMageThief'), ('SuperTropes', 'TropicalIslandAdventure'), ('TropicalIslandAdventure', 'WelcomeToTheCaribbeanMon'), ('TropicalIslandAdventure', 'AlohaHawaii'), ('TropicalIslandAdventure', 'HulaAndLuaus'), ('TropicalIslandAdventure', 'EastIndies'), ('SuperTropes', 'ATrueHero'), ('ATrueHero', 'TheRealHeroes'), ('SuperTropes', 'UpsettingTheBalance'), ('UpsettingTheBalance', 'TheProblemWithFightingDeath'), ('UpsettingTheBalance', 'ButterflyOfDoom'), ('UpsettingTheBalance', 'BalanceBetweenGoodAndEvil')]

jwzimmer-zz commented 3 years ago

It's kind of almost readable!

Screen Shot 2020-10-29 at 12 39 29 PM
nguyenhphilip commented 3 years ago

image

lol mine is not exactly readable but I was messing around with different link prediction algorithms and 'community detection' might be one we're interested in. basically it's exactly like it sounds - it's an algorithm that detects clusters of nodes by taking out nodes with high 'betweenness centrality' (i think), nodes that would link from one "community" to another, or in our case from one trope to another. I don't know the exact details yet but i'm betting there's some parameter that you can set to have the algorithm try and detect say n communities.

I wrote a helper Class that makes it easy to run some basic network stats, and I also added a function to create a network based on n randomly selected tropes.

Here's some of them:

image

image

and some prediction stuff!:

image

jwzimmer-zz commented 3 years ago

Awesome! What file is this in? Presumably I can extend the functionality based on what you've already done?

Update on this specific issue: so, the relationship between the nodes in https://tvtropes.org/pmwiki/pmwiki.php/Main/SubTrope is not as consistent as the other articles (super trope, sister trope, trope trope)... in those, the formatting would be like e.g. first trope in a bullet point is the super trope, everything else in that bullet is a sub trope. or whatever). So, given the inconsistent formatting, I just skipped the SubTrope page unless we think it's worth putting extra effort into?

So, since we have some basic graphs and edgelists based on these pages, I'm gonna call this done. : )