var excludes = [ "a", "an", "in", "and", "the", "for", "of", "to", "by", "on", "only", "from", "based", "with", "using", "data", "ontology", "ontologies", "semantic", "web", "rdf" ];
var excludeMap = {};
for (var i = 0; i < excludes.length; i++) {
	excludeMap[excludes[i]] = true;
}
Exhibit.Functions["words"] = {
	f: function(args) {
		var set = new Exhibit.Set();
		
		if (args.length > 0) {
			for (var i = 0; i < args.length; i++) {
				var arg = args[i];
				if (arg.size > 0) {
					arg.forEachValue(function(v) {
						if (v != null) {
							var words = ("" + v).replace(/<.+>/g, " ").replace(/[^\w\s]/g, "").replace(/\s+/g, " ").toLowerCase().split(" ");
							for (var w = 0; w < words.length; w++) {
								var word = words[w];
								if (word.length > 0 && !(word in excludeMap)) {
									set.add(word);
								}
							}
						}
					});
				}
			}
		}
		return new Exhibit.Expression._Collection(set, "text");
	}
};
