import com.aliasi.cluster.Clusterer; import com.aliasi.cluster.CompleteLinkClusterer; import com.aliasi.cluster.HierarchicalClusterer; import com.aliasi.cluster.Dendrogram; import com.aliasi.cluster.SingleLinkClusterer; import com.aliasi.spell.EditDistance; import com.aliasi.spell.FixedWeightEditDistance; import com.aliasi.util.Distance; import java.util.Set; import java.util.HashSet; public class StringEdits { static final Distance EDIT_DISTANCE = new EditDistance(false); public static void main(String[] args) { // parse out input set Set inputSet = new HashSet(); for (String s : args[0].split(",")) inputSet.add(s); // set up max distance int maxDistance = args.length == 1 ? Integer.MAX_VALUE : Integer.parseInt(args[1]); // dump off-diagonal upper triangular distance matrix for (String s1 : inputSet) for (String s2: inputSet) if (s1.compareTo(s2) < 0) System.out.println("distance(" + s1 + "," + s2 + ")=" + EDIT_DISTANCE.distance(s1,s2)); // Single-Link Clusterer HierarchicalClusterer slClusterer = new SingleLinkClusterer(maxDistance, EDIT_DISTANCE); // Complete-Link Clusterer HierarchicalClusterer clClusterer = new CompleteLinkClusterer(maxDistance, EDIT_DISTANCE); // Hierarchical Clustering Dendrogram slDendrogram = slClusterer.hierarchicalCluster(inputSet); System.out.println("\nSingle Link Dendrogram"); System.out.println(slDendrogram.prettyPrint()); Dendrogram clDendrogram = clClusterer.hierarchicalCluster(inputSet); System.out.println("\nComplete Link Dendrogram"); System.out.println(clDendrogram.prettyPrint()); // Dendrograms to Clusterings System.out.println("\nComplete Link Clusterings"); for (int k = 1; k <= clDendrogram.size(); ++k) { Set> clKClustering = clDendrogram.partitionK(k); System.out.println(k + " " + clKClustering); } System.out.println("\nSingle Link Clusterings"); for (int k = 1; k <= slDendrogram.size(); ++k) { Set> slKClustering = slDendrogram.partitionK(k); System.out.println(k + " " + slKClustering); } Set> clClustering = clClusterer.cluster(inputSet); System.out.println("\n\nComplete Link Clustering"); System.out.println(clClustering); Set> slClustering = slClusterer.cluster(inputSet); System.out.println("\nSingle Link Clustering"); System.out.println(slClustering); } }