The following page is originally based on a white paper by Rasmus Bro and Neal Gallagher from Eigenvector, Inc.