SHARE
TWEET

Untitled

a guest Apr 23rd, 2019 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.           final TLongArrayList validPairs = validPairsHolder.get();
  2.           validPairs.reset();
  3.           double qualityThreshold = 0.7;//Math.cos(Math.PI / 2.5);
  4.  
  5. //          for (int u = 0; u < cooc.length(); u++) {
  6. //            Vec vecA = symDecomp.get(u);
  7. //            qualityThreshold += VecTools.cosine(sym_i, vecA);
  8. //          }
  9. //          qualityThreshold /= cooc.length();
  10. //          qualityThreshold = Math.max(0, qualityThreshold);
  11.           double[] counters = new double[cooc.length()];
  12.           Arrays.fill(counters, Double.NaN);
  13.           for (int u = 0; u < cooc.length(); u++) {
  14.             final Vec vecU = symDecomp.get(u);
  15.             final double norm_u = VecTools.norm(vecU);
  16.             if (norm_u < minimumNorm)
  17.               continue;
  18.             counters[u] = unpackWeight(cooc, u);
  19.             for (int v = u + 1; v < cooc.length(); v++) {
  20.               final Vec vecV = symDecomp.get(v);
  21.               final double norm_v = VecTools.norm(vecV);
  22.               if (norm_v < minimumNorm)
  23.                 continue;
  24.               if (VecTools.multiply(vecU, vecV) / norm_u / norm_v > qualityThreshold) {
  25.                 validPairs.add(((long) (u + 1) << 32) | (v + 1));
  26.                 validPairs.add(((long) (v + 1) << 32) | (u + 1));
  27.               }
  28.             }
  29.           }
  30.           validPairs.sort();
  31.           validPairs.forEach(p -> {
  32.             final int u = (int) (p >>> 32) - 1;
  33.             final int v = (int) (p & 0xFFFFFFFFL) - 1;
  34.             counters[u] += unpackWeight(cooc, v);
  35.             return true;
  36.           });
  37.           List<TIntHashSet> clusters = new ArrayList<>();
  38.           List<List<String>> wordClusters = new ArrayList<>();
  39.           while (true) {
  40.             int max = ArrayTools.max(counters);
  41.             if (max < 0)
  42.               break;
  43.             counters[max] = Double.NaN;
  44.             final TIntHashSet cluster = new TIntHashSet();
  45.             final List<String> wordsCluster = new ArrayList<>();
  46.             cluster.add(max);
  47.             wordsCluster.add(dict().get(max).toString());
  48.             { // form cluster
  49.               int index = -validPairs.binarySearch((long) (max + 1) << 32) - 1;
  50.               long limit = ((long) (max + 2) << 32);
  51.               long p;
  52.               while (index < validPairs.size() && (p = validPairs.getQuick(index)) < limit) {
  53.                 int v = (int) (p & 0xFFFFFFFFL) - 1;
  54.                 if (!Double.isNaN(counters[v])) {
  55.                   counters[v] = Double.NaN;
  56.                   cluster.add(v);
  57.                   wordsCluster.add(dict().get(unpackB(cooc, v)).toString());
  58.                 }
  59.                 index++;
  60.               }
  61.             }
  62.             validPairs.forEach(new TLongProcedure() {
  63.               int current = 0;
  64.               float currentWeight;
  65.               @Override
  66.               public boolean execute(long p) { // update counters
  67.                 int u = (int) (p >>> 32) - 1;
  68.                 int v = (int) (p & 0xFFFFFFFFL) - 1;
  69.                 if (u != current) {
  70.                   current = u;
  71.                   currentWeight = cluster.contains(u) ? unpackWeight(cooc, u) : 0.f;
  72.                 }
  73.                 if (currentWeight != 0f)
  74.                   counters[v] -= currentWeight;
  75.                 return true;
  76.               }
  77.             });
  78.             clusters.add(cluster);
  79.             if (cluster.size() == 1)
  80.               continue;
  81.  
  82.             wordClusters.add(wordsCluster);
  83.           }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top