/*
* Carrot2 project.
*
* Copyright (C) 2002-2016, Dawid Weiss, Stanisław Osiński.
* All rights reserved.
*
* Refer to the full license file "carrot2.LICENSE"
* in the root folder of the repository checkout or at:
* http://www.carrot2.org/carrot2.LICENSE
*/
package org.carrot2.examples.source;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
import org.carrot2.core.Controller;
import org.carrot2.core.ControllerFactory;
import org.carrot2.core.IClusteringAlgorithm;
import org.carrot2.core.IDocumentSource;
import org.carrot2.core.ProcessingResult;
import org.carrot2.examples.ConsoleFormatter;
import org.carrot2.examples.SampleDocumentData;
/**
* This example shows how to write and use custom components: {@link IDocumentSource} and
* {@link IClusteringAlgorithm}.
*/
public class ExampleCustomComponents
{
public static void main(String [] args)
{
/*
* Create a pooling controller (reuses components).
*/
final Controller controller = ControllerFactory.createPooling();
try {
final Map<String, Object> params = new HashMap<String, Object>();
/*
* Add attributes relevant to the source and algorithm we will be
* using. Note the builder classes are generated by annotation
* processor (which must be in the compiler's classpath!).
*/
/*
* An alternative strategy is to put relevant attribute keys in the
* map directly but it can be tedious.
*/
ModuloDocumentSourceDescriptor.attributeBuilder(params)
.query("dummy")
.results(10)
.documents(SampleDocumentData.DOCUMENTS_DATA_MINING)
.modulo(2)
.analyzer(new WhitespaceAnalyzer());
ByFirstTitleLetterClusteringAlgorithmDescriptor.attributeBuilder(params)
.caseSensitive(false);
/*
* Invoke processing on the controller and display the result.
*/
final ProcessingResult result = controller.process(params,
ModuloDocumentSource.class,
ByFirstTitleLetterClusteringAlgorithm.class);
ConsoleFormatter.displayResults(result);
} finally {
controller.dispose();
}
}
}