refactoring: moved all score-related classes to new ranking package

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7889 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 14 years ago
parent a0d5e7b6e6
commit 51cf697acd

@ -34,8 +34,8 @@ import net.yacy.cora.date.GenericFormatter;
import net.yacy.cora.document.ASCII;
import net.yacy.cora.document.UTF8;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.cora.storage.ConcurrentScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ConcurrentScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.kelondro.data.meta.DigestURI;
import net.yacy.kelondro.index.Row;
import net.yacy.kelondro.index.Row.Entry;

@ -33,8 +33,8 @@ import java.util.Iterator;
import net.yacy.cora.date.GenericFormatter;
import net.yacy.cora.document.UTF8;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.cora.storage.ConcurrentScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ConcurrentScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.kelondro.data.meta.DigestURI;
import net.yacy.kelondro.index.Row;
import net.yacy.kelondro.index.Row.Entry;

@ -42,8 +42,8 @@ import net.yacy.cora.document.UTF8;
import net.yacy.cora.protocol.Domains;
import net.yacy.cora.protocol.HeaderFramework;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.cora.services.federated.yacy.CacheStrategy;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.storage.WeakPriorityBlockingQueue;
import net.yacy.kelondro.data.meta.DigestURI;
import net.yacy.kelondro.data.word.WordReference;

@ -27,7 +27,7 @@
import java.util.Iterator;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.document.LibraryProvider;
import net.yacy.kelondro.util.EventTracker;
import de.anomic.search.QueryParams;

@ -34,8 +34,8 @@ import java.util.concurrent.ConcurrentHashMap;
import net.yacy.cora.document.ASCII;
import net.yacy.cora.document.UTF8;
import net.yacy.cora.storage.ClusteredScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ClusteredScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.kelondro.data.meta.DigestURI;
import net.yacy.kelondro.data.meta.URIMetadataRow;
import net.yacy.kelondro.logging.Log;

@ -7,8 +7,8 @@ import java.util.SortedSet;
import java.util.TreeSet;
import java.util.concurrent.LinkedBlockingQueue;
import net.yacy.cora.storage.ReversibleScoreMap;
import net.yacy.cora.storage.ClusteredScoreMap;
import net.yacy.cora.ranking.ClusteredScoreMap;
import net.yacy.cora.ranking.ReversibleScoreMap;
import net.yacy.document.LibraryProvider;
import net.yacy.kelondro.data.word.Word;
import net.yacy.kelondro.data.word.WordReference;

@ -33,8 +33,8 @@ import java.util.List;
import java.util.Map;
import net.yacy.cora.document.ASCII;
import net.yacy.cora.storage.OrderedScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.OrderedScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.kelondro.index.BinSearch;
import net.yacy.kelondro.index.RowSpaceExceededException;
import net.yacy.kelondro.logging.Log;

@ -42,8 +42,8 @@ import net.yacy.cora.document.ASCII;
import net.yacy.cora.document.MultiProtocolURI;
import net.yacy.cora.document.UTF8;
import net.yacy.cora.protocol.http.HTTPClient;
import net.yacy.cora.storage.ConcurrentScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ConcurrentScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.cora.storage.WeakPriorityBlockingQueue;
import net.yacy.document.parser.html.CharacterCoding;
import net.yacy.kelondro.data.meta.DigestURI;

@ -42,9 +42,9 @@ import java.util.regex.Pattern;
import net.yacy.cora.document.ASCII;
import net.yacy.cora.document.MultiProtocolURI;
import net.yacy.cora.protocol.Scanner;
import net.yacy.cora.storage.ClusteredScoreMap;
import net.yacy.cora.storage.ConcurrentScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ClusteredScoreMap;
import net.yacy.cora.ranking.ConcurrentScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.cora.storage.WeakPriorityBlockingQueue;
import net.yacy.cora.storage.WeakPriorityBlockingQueue.ReverseElement;
import net.yacy.document.Condenser;

@ -33,7 +33,7 @@ import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.Semaphore;
import net.yacy.cora.storage.ConcurrentScoreMap;
import net.yacy.cora.ranking.ConcurrentScoreMap;
import net.yacy.document.Condenser;
import net.yacy.document.LargeNumberCache;
import net.yacy.kelondro.data.meta.DigestURI;

@ -33,8 +33,8 @@ import java.util.regex.Pattern;
import net.yacy.cora.document.MultiProtocolURI;
import net.yacy.cora.protocol.ResponseHeader;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.cora.services.federated.yacy.CacheStrategy;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.storage.WeakPriorityBlockingQueue;
import net.yacy.cora.storage.WeakPriorityBlockingQueue.ReverseElement;
import net.yacy.document.Condenser;

@ -37,7 +37,7 @@ import java.util.concurrent.TimeUnit;
import net.yacy.cora.document.ASCII;
import net.yacy.cora.document.UTF8;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.document.LargeNumberCache;
import net.yacy.kelondro.data.word.WordReference;
import net.yacy.kelondro.data.word.WordReferenceFactory;

@ -35,8 +35,8 @@ import java.util.SortedMap;
import net.yacy.cora.date.AbstractFormatter;
import net.yacy.cora.document.ASCII;
import net.yacy.cora.storage.ConcurrentScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ConcurrentScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.kelondro.data.word.Word;
import net.yacy.kelondro.index.HandleSet;
import net.yacy.kelondro.index.RowSpaceExceededException;

@ -22,11 +22,12 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.cora.storage;
package net.yacy.cora.ranking;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractScoreMap<E> implements ScoreMap<E> {
/**

@ -22,7 +22,7 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.cora.storage;
package net.yacy.cora.ranking;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@ -34,6 +34,7 @@ import java.util.SortedMap;
import java.util.TreeMap;
import net.yacy.cora.document.UTF8;
import net.yacy.cora.storage.OutOfLimitsException;
public final class ClusteredScoreMap<E> extends AbstractScoreMap<E> implements ReversibleScoreMap<E> {

@ -22,7 +22,7 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.cora.storage;
package net.yacy.cora.ranking;
import java.util.ArrayList;
import java.util.HashSet;
@ -35,6 +35,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
public class ConcurrentScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<E> {
protected final ConcurrentHashMap<E, AtomicLong> map; // a mapping from a reference to the cluster key

@ -11,18 +11,18 @@
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program in the file lgpl21.txt
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.cora.storage;
package net.yacy.cora.ranking;
import java.util.ArrayList;
import java.util.Comparator;
@ -38,31 +38,33 @@ import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicInteger;
public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<E> {
protected final Map<E, AtomicInteger> map; // a mapping from a reference to the cluster key
public OrderedScoreMap(Comparator<? super E> comparator) {
public OrderedScoreMap(final Comparator<? super E> comparator) {
if (comparator == null) {
map = new HashMap<E, AtomicInteger>();
this.map = new HashMap<E, AtomicInteger>();
} else {
map = new TreeMap<E, AtomicInteger>(comparator);
this.map = new TreeMap<E, AtomicInteger>(comparator);
}
}
public Iterator<E> iterator() {
return map.keySet().iterator();
return this.map.keySet().iterator();
}
public synchronized void clear() {
map.clear();
this.map.clear();
}
/**
* shrink the cluster to a demanded size
* @param maxsize
*/
public void shrinkToMaxSize(int maxsize) {
public void shrinkToMaxSize(final int maxsize) {
if (this.map.size() <= maxsize) return;
int minScore = getMinScore();
while (this.map.size() > maxsize) {
@ -70,14 +72,14 @@ public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<
shrinkToMinScore(minScore);
}
}
/**
* shrink the cluster in such a way that the smallest score is equal or greater than a given minScore
* @param minScore
*/
public void shrinkToMinScore(int minScore) {
synchronized (map) {
Iterator<Map.Entry<E, AtomicInteger>> i = this.map.entrySet().iterator();
public void shrinkToMinScore(final int minScore) {
synchronized (this.map) {
final Iterator<Map.Entry<E, AtomicInteger>> i = this.map.entrySet().iterator();
Map.Entry<E, AtomicInteger> entry;
while (i.hasNext()) {
entry = i.next();
@ -85,32 +87,32 @@ public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<
}
}
}
public int size() {
synchronized (map) {
return map.size();
synchronized (this.map) {
return this.map.size();
}
}
/**
* return true if the size of the score map is smaller then the given size
* @param size
* @return
*/
public boolean sizeSmaller(int size) {
if (map.size() < size) return true;
synchronized (map) {
return map.size() < size;
public boolean sizeSmaller(final int size) {
if (this.map.size() < size) return true;
synchronized (this.map) {
return this.map.size() < size;
}
}
public boolean isEmpty() {
if (map.isEmpty()) return true;
synchronized (map) {
return map.isEmpty();
if (this.map.isEmpty()) return true;
synchronized (this.map) {
return this.map.isEmpty();
}
}
public void inc(final E obj) {
if (obj == null) return;
AtomicInteger score = this.map.get(obj);
@ -118,7 +120,7 @@ public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<
score.incrementAndGet();
return;
}
synchronized (map) {
synchronized (this.map) {
score = this.map.get(obj);
if (score == null) {
this.map.put(obj, new AtomicInteger(1));
@ -127,11 +129,11 @@ public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<
}
score.incrementAndGet();
}
public void dec(final E obj) {
if (obj == null) return;
AtomicInteger score;
synchronized (map) {
synchronized (this.map) {
score = this.map.get(obj);
if (score == null) {
this.map.put(obj, new AtomicInteger(-1));
@ -140,24 +142,24 @@ public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<
}
score.decrementAndGet();
}
public void set(final E obj, final int newScore) {
if (obj == null) return;
AtomicInteger score;
synchronized (map) {
synchronized (this.map) {
score = this.map.get(obj);
if (score == null) {
this.map.put(obj, new AtomicInteger(newScore));
return;
}
}
}
score.getAndSet(newScore);
}
public void inc(final E obj, final int incrementScore) {
if (obj == null) return;
AtomicInteger score;
synchronized (map) {
synchronized (this.map) {
score = this.map.get(obj);
if (score == null) {
this.map.put(obj, new AtomicInteger(incrementScore));
@ -165,50 +167,50 @@ public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<
}
score.addAndGet(incrementScore);
}
public void dec(final E obj, final int incrementScore) {
inc(obj, -incrementScore);
}
public int delete(final E obj) {
// deletes entry and returns previous score
if (obj == null) return 0;
final AtomicInteger score;
synchronized (map) {
score = map.remove(obj);
synchronized (this.map) {
score = this.map.remove(obj);
if (score == null) return 0;
}
return score.intValue();
}
public boolean containsKey(final E obj) {
synchronized (map) {
return map.containsKey(obj);
synchronized (this.map) {
return this.map.containsKey(obj);
}
}
public int get(final E obj) {
if (obj == null) return 0;
final AtomicInteger score;
synchronized (map) {
score = map.get(obj);
synchronized (this.map) {
score = this.map.get(obj);
}
if (score == null) return 0;
return score.intValue();
}
public SortedMap<E, AtomicInteger> tailMap(E obj) {
public SortedMap<E, AtomicInteger> tailMap(final E obj) {
if (this.map instanceof TreeMap) {
return ((TreeMap<E, AtomicInteger>) this.map).tailMap(obj);
}
throw new UnsupportedOperationException("map must have comparator");
}
private int getMinScore() {
if (map.isEmpty()) return -1;
if (this.map.isEmpty()) return -1;
int minScore = Integer.MAX_VALUE;
synchronized (map) {
for (Map.Entry<E, AtomicInteger> entry: this.map.entrySet()) if (entry.getValue().intValue() < minScore) {
synchronized (this.map) {
for (final Map.Entry<E, AtomicInteger> entry: this.map.entrySet()) if (entry.getValue().intValue() < minScore) {
minScore = entry.getValue().intValue();
}
}
@ -217,15 +219,15 @@ public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<
@Override
public String toString() {
return map.toString();
return this.map.toString();
}
public Iterator<E> keys(boolean up) {
synchronized (map) {
public Iterator<E> keys(final boolean up) {
synchronized (this.map) {
// re-organize entries
TreeMap<Integer, Set<E>> m = new TreeMap<Integer, Set<E>>();
final TreeMap<Integer, Set<E>> m = new TreeMap<Integer, Set<E>>();
Set<E> s;
for (Map.Entry<E, AtomicInteger> entry: this.map.entrySet()) {
for (final Map.Entry<E, AtomicInteger> entry: this.map.entrySet()) {
s = m.get(entry.getValue().intValue());
if (s == null) {
s = this.map instanceof TreeMap ? new TreeSet<E>(((TreeMap<E, AtomicInteger>) this.map).comparator()) : new HashSet<E>();
@ -235,19 +237,19 @@ public class OrderedScoreMap<E> extends AbstractScoreMap<E> implements ScoreMap<
s.add(entry.getKey());
}
}
// flatten result
List<E> l = new ArrayList<E>(this.map.size());
for (Set<E> f: m.values()) {
for (E e: f) l.add(e);
final List<E> l = new ArrayList<E>(this.map.size());
for (final Set<E> f: m.values()) {
for (final E e: f) l.add(e);
}
if (up) return l.iterator();
// optionally reverse list
List<E> r = new ArrayList<E>(l.size());
final List<E> r = new ArrayList<E>(l.size());
for (int i = l.size() - 1; i >= 0; i--) r.add(l.get(i));
return r.iterator();
}
}
}

@ -22,7 +22,8 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.cora.storage;
package net.yacy.cora.ranking;
public interface ReversibleScoreMap<E> extends ScoreMap<E> {

@ -26,7 +26,6 @@ package net.yacy.cora.ranking;
import java.util.Comparator;
import net.yacy.cora.storage.ScoreMap;
public class ScoreComparator<E extends Comparable<E>> implements Comparator<E>
{

@ -22,7 +22,7 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.yacy.cora.storage;
package net.yacy.cora.ranking;
import java.util.Iterator;
import java.util.List;

@ -32,10 +32,10 @@ import java.util.concurrent.ConcurrentHashMap;
import net.yacy.cora.document.RSSMessage;
import net.yacy.cora.protocol.http.HTTPClient;
import net.yacy.cora.ranking.ConcurrentScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.cora.services.federated.opensearch.SRURSSConnector;
import net.yacy.cora.services.federated.yacy.CacheStrategy;
import net.yacy.cora.storage.ConcurrentScoreMap;
import net.yacy.cora.storage.ScoreMap;
public class SearchHub {

@ -36,7 +36,7 @@ import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.zip.GZIPInputStream;
import net.yacy.cora.storage.OrderedScoreMap;
import net.yacy.cora.ranking.OrderedScoreMap;
import net.yacy.kelondro.logging.Log;
import net.yacy.kelondro.util.MemoryControl;

@ -45,7 +45,7 @@ import java.util.regex.Pattern;
import javax.swing.event.EventListenerList;
import net.yacy.cora.document.MultiProtocolURI;
import net.yacy.cora.storage.ClusteredScoreMap;
import net.yacy.cora.ranking.ClusteredScoreMap;
import net.yacy.document.SentenceReader;
import net.yacy.document.parser.htmlParser;
import net.yacy.document.parser.html.Evaluation.Element;

@ -36,7 +36,7 @@ import java.util.Set;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import net.yacy.cora.storage.ClusteredScoreMap;
import net.yacy.cora.ranking.ClusteredScoreMap;
import net.yacy.kelondro.logging.Log;
import net.yacy.kelondro.util.MemoryControl;

@ -35,9 +35,9 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import net.yacy.cora.document.UTF8;
import net.yacy.cora.storage.ConcurrentScoreMap;
import net.yacy.cora.storage.ClusteredScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.cora.ranking.ClusteredScoreMap;
import net.yacy.cora.ranking.ConcurrentScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.kelondro.index.RowSpaceExceededException;
import net.yacy.kelondro.logging.Log;
import net.yacy.kelondro.order.ByteOrder;

@ -50,9 +50,9 @@ import net.yacy.cora.document.ASCII;
import net.yacy.cora.protocol.ClientIdentification;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.cora.protocol.http.HTTPClient;
import net.yacy.cora.ranking.OrderedScoreMap;
import net.yacy.cora.ranking.ScoreMap;
import net.yacy.cora.storage.Array;
import net.yacy.cora.storage.OrderedScoreMap;
import net.yacy.cora.storage.ScoreMap;
import net.yacy.gui.YaCyApp;
import net.yacy.gui.framework.Browser;
import net.yacy.kelondro.blob.MapDataMining;

Loading…
Cancel
Save