public Map<Integer, Double> getCooccurenceTags(Map<Integer, Integer> tags) {
		Map<Integer, Double> resultTags = new LinkedHashMap<Integer, Double>();
		for (Map.Entry<Integer, Integer> sourceTag : tags.entrySet()) {
			SparseVector vec = this.coocurenceMatrix.get(sourceTag.getKey());
			for (Map.Entry<Integer, Double> coocurenceEntry : vec.entrySet()) {
				double weightedValue = sourceTag.getValue() * coocurenceEntry.getValue();
				//if (tagEntry.getKey() != entry.getKey() && weightedValue > 0.0) {
				if (weightedValue > 0.0) {
					Double tagVal = resultTags.get(coocurenceEntry.getKey());
					resultTags.put(coocurenceEntry.getKey(), tagVal == null ? weightedValue : tagVal.doubleValue() + weightedValue);
				}
			}
		}
		return resultTags;
	}