/*******************************************************************************
* Copyright 2013
* Ubiquitous Knowledge Processing (UKP) Lab
* Technische Universität Darmstadt
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.tudarmstadt.ukp.csniper.webapp.statistics;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import de.tudarmstadt.ukp.csniper.webapp.evaluation.EvaluationRepository;
import de.tudarmstadt.ukp.csniper.webapp.evaluation.model.EvaluationItem;
import de.tudarmstadt.ukp.csniper.webapp.evaluation.model.EvaluationResult;
import de.tudarmstadt.ukp.csniper.webapp.statistics.SortableAggregatedEvaluationResultDataProvider;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/databaseContext.xml")
public class KappaTest
{
private final static String CORRECT = "Correct";
private final static String WRONG = "Wrong";
private final static String EMPTY = "";
private String collectionId = "testCollection";
private String type = "testType";
@Resource(name = "evaluationRepository")
private EvaluationRepository service;
SortableAggregatedEvaluationResultDataProvider dataProvider;
// TODO if we need kappa, repair the test first before uncommenting
@Ignore("Test fails in Maven build - in Eclipse it works...")
@Test
public void testKappa()
{
// setupResults();
// dataProvider = new SortableAggregatedEvaluationResultDataProvider(service, collectionId,
// type);
// dataProvider.setFilters(ResultFilter.valuesAsSet());
//
// double[] expecteds = new double[6];
// expecteds[0] = 0; // user1,user2: this is 0 because pe = pa (user1 rated all as correct)
// expecteds[1] = 0; // user1,user3: this is 0 because pe = pa (user1 rated all as correct)
// expecteds[2] = 0; // user1,user4: this is 0 because pe = pa (user1 rated all as correct)
// expecteds[3] = -0.8;// user2,user3: negative because agreement is even less than by chance
// expecteds[4] = -0.5;// user2,user4: negative because agreement is even less than by chance
// expecteds[5] = 0.4; // user3,user4
//
// double[] actuals = dataProvider.getKappaStatistics();
//
// assertArrayEquals(expecteds, actuals, 0.01);
}
private void setupResults()
{
List<EvaluationItem> dummyItems = new ArrayList<EvaluationItem>();
List<EvaluationResult> results = new ArrayList<EvaluationResult>();
dummyItems.add(new EvaluationItem(collectionId, "Doc1", type, 0, 1, "text1"));
dummyItems.add(new EvaluationItem(collectionId, "Doc2", type, 0, 1, "text2"));
dummyItems.add(new EvaluationItem(collectionId, "Doc3", type, 0, 1, "text3"));
dummyItems.add(new EvaluationItem(collectionId, "Doc4", type, 0, 1, "text4"));
// user1
results.add(new EvaluationResult(dummyItems.get(0), "user1", CORRECT));
// user4 empty for item1, so this should not count
results.add(new EvaluationResult(dummyItems.get(1), "user1", CORRECT));
results.add(new EvaluationResult(dummyItems.get(2), "user1", CORRECT));
results.add(new EvaluationResult(dummyItems.get(3), "user1", CORRECT));
// user2
results.add(new EvaluationResult(dummyItems.get(0), "user2", CORRECT));
// user4 empty for item1, so this should not count
results.add(new EvaluationResult(dummyItems.get(1), "user2", CORRECT));
results.add(new EvaluationResult(dummyItems.get(2), "user2", WRONG));
results.add(new EvaluationResult(dummyItems.get(3), "user2", WRONG));
// user3
results.add(new EvaluationResult(dummyItems.get(0), "user3", WRONG));
// user4 empty for item1, so this should not count
results.add(new EvaluationResult(dummyItems.get(1), "user3", CORRECT));
results.add(new EvaluationResult(dummyItems.get(2), "user3", CORRECT));
results.add(new EvaluationResult(dummyItems.get(3), "user3", CORRECT));
// user4
results.add(new EvaluationResult(dummyItems.get(0), "user4", WRONG));
results.add(new EvaluationResult(dummyItems.get(1), "user4", EMPTY));
results.add(new EvaluationResult(dummyItems.get(2), "user4", CORRECT));
results.add(new EvaluationResult(dummyItems.get(3), "user4", WRONG));
dummyItems = service.writeEvaluationItems(dummyItems);
service.writeEvaluationResults(results);
}
}