fork download
  1. import java.util.HashMap;
  2. import java.util.HashSet;
  3. import java.util.Map;
  4. import java.util.Set;
  5. import java.util.stream.Collectors;
  6.  
  7. class Test
  8. {
  9. private static Map<String, Integer> tagToIgnores = new HashMap<>();
  10. private static Map<String, Integer> tagToUsage = new HashMap<>();
  11.  
  12. static
  13. {
  14. tagToIgnores.put("c#", 23790);
  15. tagToIgnores.put("php", 23721);
  16. tagToIgnores.put("java", 22250);
  17. tagToIgnores.put("android", 22201);
  18. tagToIgnores.put("asp.net", 17320);
  19. tagToIgnores.put("c++", 15191);
  20. tagToIgnores.put("python", 14869);
  21. tagToIgnores.put(".net", 13293);
  22. tagToIgnores.put("ruby", 12691);
  23. tagToIgnores.put("ios", 11896);
  24. tagToIgnores.put("ruby-on-rails", 11819);
  25. tagToIgnores.put("iphone", 10955);
  26. tagToIgnores.put("javascript", 10078);
  27. tagToIgnores.put("objective-c", 8587);
  28. tagToIgnores.put("vb.net", 7892);
  29. tagToIgnores.put("c", 7767);
  30. tagToIgnores.put("jquery", 6939);
  31. tagToIgnores.put("delphi", 6563);
  32. tagToIgnores.put("django", 6423);
  33. tagToIgnores.put("perl", 5925);
  34. tagToIgnores.put("asp.net-mvc", 5887);
  35. tagToIgnores.put("flash", 5569);
  36. tagToIgnores.put("mysql", 5142);
  37. tagToIgnores.put("windows", 5131);
  38. tagToIgnores.put("facebook", 4851);
  39. tagToIgnores.put("r", 4629);
  40. tagToIgnores.put("wpf", 4484);
  41. tagToIgnores.put("visual-studio", 4392);
  42. tagToIgnores.put("angularjs", 4298);
  43. tagToIgnores.put("flex", 4186);
  44. tagToIgnores.put("sql-server", 4108);
  45. tagToIgnores.put("wordpress", 4076);
  46. tagToIgnores.put("silverlight", 4016);
  47. tagToIgnores.put("oracle", 4005);
  48. tagToIgnores.put("css", 3972);
  49. tagToIgnores.put("haskell", 3752);
  50. tagToIgnores.put("scala", 3737);
  51. tagToIgnores.put("html", 3663);
  52. tagToIgnores.put("vba", 3624);
  53. tagToIgnores.put("sql", 3359);
  54. tagToIgnores.put("node.js", 3232);
  55. tagToIgnores.put("matlab", 3220);
  56. tagToIgnores.put("sharepoint", 3108);
  57. tagToIgnores.put("eclipse", 3073);
  58. tagToIgnores.put("xcode", 3068);
  59. tagToIgnores.put("swift", 3065);
  60. tagToIgnores.put("angular", 2956);
  61. tagToIgnores.put("spring", 2890);
  62. tagToIgnores.put("linux", 2875);
  63. tagToIgnores.put("macos", 2804);
  64.  
  65. tagToUsage.put("c#", 1286491);
  66. tagToUsage.put("php", 1263058);
  67. tagToUsage.put("java", 1515802);
  68. tagToUsage.put("android", 1173706);
  69. tagToUsage.put("asp.net", 342947);
  70. tagToUsage.put("c++", 605528);
  71. tagToUsage.put("python", 1114060);
  72. tagToUsage.put(".net", 279901);
  73. tagToUsage.put("ruby", 202463);
  74. tagToUsage.put("ios", 591066);
  75. tagToUsage.put("ruby-on-rails", 303176);
  76. tagToUsage.put("iphone", 219814);
  77. tagToUsage.put("javascript", 1763733);
  78. tagToUsage.put("objective-c", 286812);
  79. tagToUsage.put("vb.net", 122490);
  80. tagToUsage.put("c", 296656);
  81. tagToUsage.put("jquery", 944680);
  82. tagToUsage.put("delphi", 43337);
  83. tagToUsage.put("django", 190837);
  84. tagToUsage.put("perl", 61725);
  85. tagToUsage.put("asp.net-mvc", 178208);
  86. tagToUsage.put("flash", 35282);
  87. tagToUsage.put("mysql", 550486);
  88. tagToUsage.put("windows", 127560);
  89. tagToUsage.put("facebook", 83210);
  90. tagToUsage.put("r", 276465);
  91. tagToUsage.put("wpf", 147423);
  92. tagToUsage.put("visual-studio", 85729);
  93. tagToUsage.put("angularjs", 257148);
  94. tagToUsage.put("flex", 24297);
  95. tagToUsage.put("sql-server", 253505);
  96. tagToUsage.put("wordpress", 145586);
  97. tagToUsage.put("silverlight", 27515);
  98. tagToUsage.put("oracle", 106795);
  99. tagToUsage.put("css", 574065);
  100. tagToUsage.put("haskell", 39976);
  101. tagToUsage.put("scala", 86886);
  102. tagToUsage.put("html", 804877);
  103. tagToUsage.put("vba", 139729);
  104. tagToUsage.put("sql", 479302);
  105. tagToUsage.put("node.js", 262844);
  106. tagToUsage.put("matlab", 82398);
  107. tagToUsage.put("sharepoint", 24236);
  108. tagToUsage.put("eclipse", 115751);
  109. tagToUsage.put("xcode", 130502);
  110. tagToUsage.put("swift", 221958);
  111. tagToUsage.put("angular", 153902);
  112. tagToUsage.put("spring", 147214);
  113. tagToUsage.put("linux", 173188);
  114. tagToUsage.put("macos", 90234);
  115. }
  116.  
  117. public static void main(String[] args)
  118. {
  119. final double averageFreq = tagToIgnores.values().stream().mapToInt(x -> x).average().orElse(0);
  120. final double averageUsage = tagToUsage.values().stream().mapToInt(x -> x).average().orElse(0);
  121.  
  122. final Map<String, Double> tagToNormalisedIgnores = tagToIgnores.entrySet()
  123. .stream()
  124. .collect(Collectors.toMap(Map.Entry::getKey, v -> v.getValue() / averageFreq));
  125.  
  126. final Map<String, Double> tagToNormalisedUsage = tagToUsage.entrySet()
  127. .stream()
  128. .collect(Collectors.toMap(Map.Entry::getKey, v -> v.getValue() / averageUsage));
  129.  
  130. final double similarity = cosineSimilarity(tagToNormalisedIgnores, tagToNormalisedUsage);
  131. System.out.println(similarity);
  132. System.out.println();
  133.  
  134.  
  135. final Map<String, Double> tagToDiff = new HashMap<>();
  136. for (final String tag : tagToNormalisedIgnores.keySet())
  137. {
  138. double diff = tagToNormalisedIgnores.get(tag) - tagToNormalisedUsage.get(tag);
  139. tagToDiff.put(tag, diff);
  140. }
  141. tagToDiff.entrySet().stream()
  142. .sorted(Map.Entry.comparingByValue())
  143. .forEach(System.out::println);
  144. }
  145.  
  146. private static double cosineSimilarity(Map<String, Double> a, Map<String, Double> b)
  147. {
  148. final Set<String> intersection = new HashSet<>(a.keySet());
  149. intersection.retainAll(b.keySet());
  150.  
  151. double dotProduct = 0, magnitudeA = 0, magnitudeB = 0;
  152.  
  153. for (String item : intersection) {
  154. dotProduct += a.get(item) * b.get(item);
  155. }
  156. for (String k : a.keySet()) {
  157. magnitudeA += Math.pow(a.get(k), 2);
  158. }
  159. for (String k : b.keySet()) {
  160. magnitudeB += Math.pow(b.get(k), 2);
  161. }
  162. return dotProduct / Math.sqrt(magnitudeA * magnitudeB);
  163. }
  164. }
Success #stdin #stdout 0.18s 2249728KB
stdin
Standard input is empty
stdout
0.8491376330293606

javascript=-3.4483760137962687
html=-1.6976975129079275
jquery=-1.6427959311647533
java=-1.1630527929353662
python=-1.0514340363884729
css=-1.0307223131018295
sql=-0.8549228736433856
mysql=-0.8117372652480911
c#=-0.337034124217642
node.js=-0.28465252302870464
php=-0.28261974629541253
android=-0.2416793029393749
swift=-0.19588597674892733
sql-server=-0.14324730015057452
r=-0.1364861438430588
angularjs=-0.1279521013253736
linux=-0.08878330674595541
ios=-0.026858206316774602
angular=-0.025740959776942463
spring=-0.016346493373397386
xcode=0.052567460394544796
eclipse=0.09323909615860027
vba=0.1012143068852851
macos=0.126804744872855
wordpress=0.14522099519834297
wpf=0.19430086642043298
matlab=0.20318072032609627
c=0.22455301918775117
oracle=0.24102583319651388
scala=0.2595134208923015
asp.net-mvc=0.2967083986249241
django=0.33347789173710907
windows=0.333906486721583
sharepoint=0.34609274417622427
visual-studio=0.3494428423804226
objective-c=0.3599076282539395
c++=0.37052312068189175
haskell=0.38873490379278347
facebook=0.41709527871486446
silverlight=0.45751437703026926
flex=0.4887685361645861
perl=0.6176802188083449
flash=0.6422294516349092
vb.net=0.7135063248214386
ruby-on-rails=0.7437822997821084
delphi=0.7520926475436067
iphone=0.8553998770887196
.net=1.0022245693771021
ruby=1.1324910108396733
asp.net=1.3648258522410086