Carrot2

Substring comparator (and others?) must comply with Comparator contract.

Details

Description

The new default sort for collections in JDK1.7 (TimSort) verifies Comparator contract and throws an exception if not fulfilled.

      at java.util.TimSort.mergeHi(Unknown Source)
       at java.util.TimSort.mergeAt(Unknown Source)
       at java.util.TimSort.mergeCollapse(Unknown Source)
       at java.util.TimSort.sort(Unknown Source)
       at java.util.TimSort.sort(Unknown Source)
       at java.util.Arrays.sort(Unknown Source)
       at java.util.Collections.sort(Unknown Source)
       at
org.carrot2.text.preprocessing.PhraseExtractor.extractPhrases(PhraseExtractor.java:106)
       at
org.carrot2.text.preprocessing.pipeline.CompletePreprocessingPipeline.preprocess(CompletePreprocessingPipeline.java:58)
       at
org.carrot2.text.preprocessing.pipeline.BasicPreprocessingPipeline.preprocess(BasicPreprocessingPipeline.java:92)
       at
org.carrot2.clustering.lingo.LingoClusteringAlgorithm.cluster(LingoClusteringAlgorithm.java:198)
       at
org.carrot2.clustering.lingo.LingoClusteringAlgorithm.access$0(LingoClusteringAlgorithm.java:195)
       at
org.carrot2.clustering.lingo.LingoClusteringAlgorithm$1.process(LingoClusteringAlgorithm.java:177)
       at
org.carrot2.text.clustering.MultilingualClustering.clusterByLanguage(MultilingualClustering.java:223)
       at
org.carrot2.text.clustering.MultilingualClustering.process(MultilingualClustering.java:111)
       at
org.carrot2.clustering.lingo.LingoClusteringAlgorithm.process(LingoClusteringAlgorithm.java:170)
       at
org.carrot2.core.ControllerUtils.performProcessing(ControllerUtils.java:102)
       at org.carrot2.core.Controller.process(Controller.java:347)
       at org.carrot2.core.Controller.process(Controller.java:239)
       at org.carrot2.examples.clustering.Test2.main(Test2.java:147)

Activity

Hide
Dawid Weiss added a comment -

A quick workaround is to use legacy sort by adding a JVM switch: -Djava.util.Arrays.useLegacyMergeSort=true

Show
Dawid Weiss added a comment - A quick workaround is to use legacy sort by adding a JVM switch: -Djava.util.Arrays.useLegacyMergeSort=true
Hide
Dawid Weiss added a comment -

Changing priority to minor as it affects unstable JREs only.

Show
Dawid Weiss added a comment - Changing priority to minor as it affects unstable JREs only.
Hide
Dawid Weiss added a comment -

Fixed in trunk and on the maint. branch.

Show
Dawid Weiss added a comment - Fixed in trunk and on the maint. branch.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: