- added a tag cloud to search results (using the topics)

- some refactoring of score classes
- added default package for new classes add_ymark and delete_ymark

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7251 6c8d7289-2bf4-0310-a012-ef5d649a1542
This commit is contained in:
orbiter 2010-10-15 22:01:39 +00:00
parent 7aca763ca8
commit ca738ac924
23 changed files with 118 additions and 90 deletions

View File

@ -1,17 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="env/|htdocsdefault/|proxymsg/|yacy/|env/|yacy/user/|yacy/user/|yacy/ui/|processing/domaingraph/applet/|processing/domaingraph/|api/|api/bookmarks/posts/|api/bookmarks/|api/util/|api/bookmarks/xbel/|api/bookmarks/tags/" kind="src" path="htroot"/>
<classpathentry excluding="env/|htdocsdefault/|proxymsg/|yacy/|env/|yacy/user/|yacy/user/|yacy/ui/|processing/domaingraph/applet/|processing/domaingraph/|api/|api/bookmarks/posts/|api/bookmarks/|api/util/|api/bookmarks/xbel/|api/bookmarks/tags/|api/ymarks/" kind="src" path="htroot"/>
<classpathentry kind="src" path="test"/>
<classpathentry excluding="user/|user/|ui/" kind="src" path="htroot/yacy"/>
<classpathentry kind="src" path="htroot/env"/>
<classpathentry kind="src" path="source"/>
<classpathentry kind="src" path="htroot/yacy/ui"/>
<classpathentry excluding="bookmarks/posts/|bookmarks/|util/|bookmarks/xbel/|bookmarks/tags/" kind="src" path="htroot/api"/>
<classpathentry excluding="bookmarks/posts/|bookmarks/|util/|bookmarks/xbel/|bookmarks/tags/|ymarks/" kind="src" path="htroot/api"/>
<classpathentry kind="src" path="htroot/api/bookmarks/posts"/>
<classpathentry excluding="posts/|xbel/|tags/" kind="src" path="htroot/api/bookmarks"/>
<classpathentry kind="src" path="htroot/api/util"/>
<classpathentry kind="src" path="htroot/api/bookmarks/xbel"/>
<classpathentry kind="src" path="htroot/api/bookmarks/tags"/>
<classpathentry kind="src" path="htroot/api/ymarks"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="lib/commons-io-1.4.jar"/>

View File

@ -113,7 +113,7 @@ public class Supporter {
//accumulateSupporter(Supporter, ranking, rowdef, negativeHashes, positiveHashes, yacyNewsPool.PUBLISHED_DB);
// read out surftipp array and create property entries
final Iterator<String> k = ranking.scores(false);
final Iterator<String> k = ranking.keys(false);
int i = 0;
Row.Entry row;
String url, urlhash, refid, title, description;
@ -150,7 +150,7 @@ public class Supporter {
prop.put("supporter_results_" + i + "_url", url);
prop.put("supporter_results_" + i + "_urlname", nxTools.shortenURLString(url, 60));
prop.put("supporter_results_" + i + "_urlhash", urlhash);
prop.putHTML("supporter_results_" + i + "_title", (showScore) ? ("(" + ranking.getScore(urlhash) + ") " + title) : title);
prop.putHTML("supporter_results_" + i + "_title", (showScore) ? ("(" + ranking.get(urlhash) + ") " + title) : title);
prop.putHTML("supporter_results_" + i + "_description", description);
i++;
@ -265,9 +265,9 @@ public class Supporter {
}
// consider double-entries
if (Supporter.containsKey(urlhash)) {
ranking.addScore(urlhash, score);
ranking.inc(urlhash, score);
} else {
ranking.setScore(urlhash, score);
ranking.set(urlhash, score);
Supporter.put(urlhash, entry);
}
}

View File

@ -121,7 +121,7 @@ public class Surftips {
//accumulateSurftips(surftips, ranking, rowdef, negativeHashes, positiveHashes, yacyNewsPool.PUBLISHED_DB);
// read out surftipp array and create property entries
final Iterator<String> k = ranking.scores(false);
final Iterator<String> k = ranking.keys(false);
int i = 0;
Row.Entry row;
String url, urlhash, refid, title, description;
@ -159,7 +159,7 @@ public class Surftips {
prop.putXML("surftips_results_" + i + "_url", url);
prop.putXML("surftips_results_" + i + "_urlname", nxTools.shortenURLString(url, 60));
prop.putXML("surftips_results_" + i + "_urlhash", urlhash);
prop.putXML("surftips_results_" + i + "_title", (showScore) ? ("(" + ranking.getScore(urlhash) + ") " + title) : title);
prop.putXML("surftips_results_" + i + "_title", (showScore) ? ("(" + ranking.get(urlhash) + ") " + title) : title);
prop.putHTML("surftips_results_" + i + "_description", description);
i++;
@ -327,9 +327,9 @@ public class Surftips {
}
// consider double-entries
if (surftips.containsKey(urlhash)) {
ranking.addScore(urlhash, score);
ranking.inc(urlhash, score);
} else {
ranking.setScore(urlhash, score);
ranking.set(urlhash, score);
surftips.put(urlhash, entry);
}
}

8
htroot/yacy/ui/js/jquery.tagcloud.min.js vendored Executable file
View File

@ -0,0 +1,8 @@
/*
* jQuery TagCloud 0.5.0
* Copyright (c) 2008 Ron Valstar
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function(F){var C;var A={};var G={};var L=2.399963;F.tagcloud={id:"TagCloud",version:"0.5.0",defaults:{height:null,type:"cloud",sizemax:20,sizemin:10,colormax:"00F",colormin:"B4D2FF",seed:null,power:0.5}};F.fn.extend({tagcloud:function(M){C=F.extend({},F.tagcloud.defaults,M);if(C.seed===null){C.seed=Math.ceil(Math.random()*45309714203)}switch(C.type){case"sphere":case"cloud":A={position:"relative"};G={position:"absolute",display:"block"};break;case"list":A={height:"auto"};G={position:"static",display:"inline"};break}B.setSeed(C.seed+123456);return this.each(function(f,a){var q=F(a);var R=q.find(">li");var S=R.length;var Z=q.width();var l=C.height===null?(0.004*Z*S):C.height;q.css({width:Z,height:l,listStyle:"none",margin:0,padding:0});q.css(A);var e=-2147483647;var r=2147483648;var T=-1;for(var d=0;d<S;d++){var p=F(R[d]);var n=p.attr("value")==-1?T++:p.attr("value");if(n>e){e=n}if(n<r){r=n}T=n}var b=e-r;var X=new Array();for(var d=0;d<S;d++){X[d]=d}for(var d,V,c=X.length;c;d=parseInt(B.rand(0,1000)/1000*c),V=X[--c],X[c]=X[d],X[d]=V){}T=-1;for(var d=0;d<S;d++){var p=F(R[d]);var n=p.attr("value")==-1?T++:p.attr("value");T=n;var g=((S-d-1)/(S-1));var g=(n-r)/b;var m=C.sizemin+g*(C.sizemax-C.sizemin);var N=D(C.colormin,C.colormax,g);p.css({fontSize:m,position:"absolute",color:"#"+N,margin:0,padding:0}).children().css({color:"#"+N});var Y=p.width();var h=p.height();var Q={};if(C.type!="list"){if(C.type=="cloud"){var s=B.rand(0,Z-Y);var W=X[d]*(l/S)-h/2}else{var P=Math.pow(d/S,C.power);var U=(d+Math.PI/2)*L;var s=Z/2-Y/2+0.5*Z*P*Math.sin(U);var W=l/2-h/2+0.5*l*P*Math.cos(U)}Q.left=s;Q.top=W}for(var O in G){Q[O]=G[O]}p.css(Q)}})}});var B=new function(){this.seed=23145678901;this.A=48271;this.M=2147483647;this.Q=this.M/this.A;this.R=this.M%this.A;this.oneOverM=1/this.M};B.setSeed=function(M){this.seed=M};B.next=function(){var M=this.seed/this.Q;var N=this.seed%this.Q;var O=this.A*N-this.R*M;this.seed=O+(O>0?0:this.M);return(this.seed*this.oneOverM)};B.rand=function(N,M){return Math.floor((M-N+1)*this.next()+N)};function I(M){return M.toString(16)}function K(M){return parseInt(M,16)}function H(Q){var M=Q.length==3;var O=[];for(var N=0;N<3;N++){var P=Q.substring(N*(M?1:2),(N+1)*(M?1:2));O.push(K(M?P+P:P))}return O}function J(M){var O="";for(var N=0;N<3;N++){var P=I(M[N]);if(P.length==1){P="0"+P}O+=P}return O}function D(R,S,P){var Q=H(R);var M=H(S);var O=[];for(var N=0;N<3;N++){O.push(Q[N]+Math.floor(P*(M[N]-Q[N])))}return J(O)}function E(M){if(window.console&&window.console.log){if(typeof (M)=="string"){window.console.log(M)}else{for(var N in M){window.console.log(N+": "+M[N])}}}}F.fn.TagCloud=F.fn.Tagcloud=F.fn.tagcloud})(jQuery);

8
htroot/yacy/ui/js/jquery.tinysort.min.js vendored Executable file
View File

@ -0,0 +1,8 @@
/*
* jQuery TinySort 1.0.1
* Copyright (c) 2008 Ron Valstar
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(function(C){C.tinysort={id:"TinySort",version:"1.0.1",defaults:{order:"asc",attr:"",place:"start",returns:false}};C.fn.extend({tinysort:function(I,J){if(I&&typeof (I)!="string"){J=I;I=null}var F=C.extend({},C.tinysort.defaults,J);var P={};this.each(function(T){var V=(!I||I=="")?C(this):C(this).find(I);var U=F.order=="rand"?""+Math.random():(F.attr==""?V.text():V.attr(F.attr));var S=C(this).parent();if(!P[S]){P[S]={s:[],n:[]}}if(V.length>0){P[S].s.push({s:U,e:C(this),n:T})}else{P[S].n.push({e:C(this),n:T})}});for(var H in P){var E=P[H];E.s.sort(function K(U,T){var S=U.s.toLowerCase?U.s.toLowerCase():U.s;var V=T.s.toLowerCase?T.s.toLowerCase():T.s;if(D(U.s)&&D(T.s)){S=parseFloat(U.s);V=parseFloat(T.s)}return(F.order=="asc"?1:-1)*(S<V?-1:(S>V?1:0))})}var M=[];for(var H in P){var E=P[H];var N=[];var G=C(this).length;switch(F.place){case"first":C.each(E.s,function(S,T){G=Math.min(G,T.n)});break;case"org":C.each(E.s,function(S,T){N.push(T.n)});break;case"end":G=E.n.length;break;default:G=0}var Q=[0,0];for(var L=0;L<C(this).length;L++){var O=L>=G&&L<G+E.s.length;if(A(N,L)){O=true}var R=(O?E.s:E.n)[Q[O?0:1]].e;R.parent().append(R);if(O||!F.returns){M.push(R.get(0))}Q[O?0:1]++}}return this.setArray(M)}});function D(E){return(parseFloat(E)+"")==E}function A(F,G){var E=false;C.each(F,function(I,H){if(!E){E=H==G}});return E}function B(E){if(window.console&&window.console.log){if(typeof (E)=="string"){window.console.log(E)}else{for(var F in E){window.console.log(F+": "+E[F])}}}}C.fn.TinySort=C.fn.Tinysort=C.fn.tsort=C.fn.tinysort})(jQuery);

View File

@ -13,6 +13,8 @@
<script type="text/javascript">hs.outlineType = 'rounded-white';</script>
<script src="/yacy/ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery-ui-1.7.2.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery.tagcloud.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery.tinysort.min.js" type="text/javascript"></script>
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.base.css" rel="stylesheet" />
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.theme.css" rel="stylesheet" />
<link media="screen" type="text/css" href="/yacy/ui/css/autocomplete.css" rel="stylesheet" />
@ -94,8 +96,7 @@ $(function() {
$("#sidebar2").accordion({});
$("#sidebar3").accordion({});
$("#sidebar3").accordion('activate', false);
$("#sidebar4").accordion({});
$("#sidebar4").accordion('activate', false);
$("#sidebar4").tagcloud({seed:0,sizemin:10,sizemax:20,height:60}).find("li").tsort();
$("#sidebarAbout").accordion({});
$("#search").focus();
});

View File

@ -8,6 +8,14 @@
</div>
#(/cat-location)#
#(nav-topics)#::
<div style="float: right; margin-top:5px; width: 220px; height: 60px">
<div><ul id="sidebar4" style="padding-left: 0px;">#{element}#
<li value="#[count]#">#[url]#</li>
#{/element}#</ul></div>
</div>
#(/nav-topics)#
#(nav-domains)#::
<div id="sidebar1" style="float: right; margin-top:5px; width: 220px;">
<h3 style="padding-left:25px;">Domain Navigator</h3>
@ -35,15 +43,6 @@
</div>
#(/nav-authors)#
#(nav-topics)#::
<div id="sidebar4" style="float: right; margin-top:5px; width: 220px;">
<h3 style="padding-left:25px;">Topic Navigator</h3>
<div><ul style="padding-left: 0px;">#{element}#
<li>#[url]#</li>
#{/element}#</ul></div>
</div>
#(/nav-topics)#
#(nav-about)#::
<div id="sidebarAbout" style="float: right; margin-top:5px; width: 220px;">
<h3 style="padding-left:25px;">#[headline]#</h3>

View File

@ -130,7 +130,7 @@ public class yacysearchtrailer {
}
// topics navigator
List<Navigator.Item> topicNavigator = theSearch.getTopicNavigator(10);
List<Navigator.Item> topicNavigator = theSearch.getTopicNavigator(30);
if (topicNavigator == null || topicNavigator.isEmpty()) {
topicNavigator = new ArrayList<Navigator.Item>();
prop.put("nav-topics", "0");
@ -144,7 +144,9 @@ public class yacysearchtrailer {
if (/*(theQuery == null) ||*/ (theQuery.queryString == null)) break;
if (e != null && e.name != null) {
prop.putHTML("nav-topics_element_" + i + "_name", e.name);
prop.put("nav-topics_element_" + i + "_url", "<a href=\"" + QueryParams.navurl("html", 0, display, theQuery, theQuery.queryStringForUrl() + "+" + e.name, theQuery.urlMask.toString(), theQuery.navigators) + "\">" + e.name + " (" + e.count + ")</a>");
prop.put("nav-topics_element_" + i + "_url",
"<a href=\"" + QueryParams.navurl("html", 0, display, theQuery, theQuery.queryStringForUrl() + "+" + e.name, theQuery.urlMask.toString(), theQuery.navigators) + "\">" + e.name + "</a>");
//+"<a href=\"" + QueryParams.navurl("html", 0, display, theQuery, theQuery.queryStringForUrl() + "+-" + e.name, theQuery.urlMask.toString(), theQuery.navigators) + "\">-</a>")*/;
prop.putJSON("nav-topics_element_" + i + "_url-json", QueryParams.navurl("json", 0, display, theQuery, theQuery.queryStringForUrl() + "+" + e.name, theQuery.urlMask.toString(), theQuery.navigators));
prop.put("nav-topics_element_" + i + "_count", e.count);
prop.put("nav-topics_element_" + i + "_modifier", e.name);

View File

@ -85,7 +85,7 @@ public final class ResultURLs {
try {
final DynamicScore<String> domains = getDomains(stackType);
if (domains != null) {
domains.incScore(e.metadata().url().getHost());
domains.inc(e.metadata().url().getHost());
}
} catch (final Exception ex) {
System.out.println("INTERNAL ERROR in newEntry/3: " + ex.toString());
@ -117,7 +117,7 @@ public final class ResultURLs {
*/
public Iterator<String> domains(final EventOrigin stack) {
assert getDomains(stack) != null : "getDomains(" + stack + ") = null";
return getDomains(stack).scores(false);
return getDomains(stack).keys(false);
}
public int deleteDomain(final EventOrigin stack, String host, String hosthash) {
@ -132,7 +132,7 @@ public final class ResultURLs {
if (urlhash == null || urlhash.substring(6).equals(hosthash)) i.remove();
}
assert getDomains(stack) != null : "getDomains(" + stack + ") = null";
return getDomains(stack).deleteScore(host);
return getDomains(stack).delete(host);
}
/**
@ -144,7 +144,7 @@ public final class ResultURLs {
public int domainCount(final EventOrigin stack, String domain) {
assert domain != null : "domain = null";
assert getDomains(stack) != null : "getDomains(" + stack + ") = null";
return getDomains(stack).getScore(domain);
return getDomains(stack).get(domain);
}
/**

View File

@ -132,13 +132,13 @@ public class DidYouMean {
for (final String s: preSorted) {
if (System.currentTimeMillis() > timelimit) break;
if (scored.size() >= 2 * preSortSelection) break;
scored.addScore(s, index.count(Word.word2hash(s)));
scored.inc(s, index.count(Word.word2hash(s)));
}
SortedSet<String> countSorted = Collections.synchronizedSortedSet(new TreeSet<String>(new indexSizeComparator()));
int wc = index.count(Word.word2hash(this.word)); // all counts must be greater than this
while (scored.size() > 0 && countSorted.size() < preSortSelection) {
String s = scored.getMaxObject();
int score = scored.deleteScore(s);
String s = scored.getMaxKey();
int score = scored.delete(s);
if (s.length() >= MinimumOutputWordLength && score > wc) countSorted.add(s);
if (System.currentTimeMillis() > timelimit) break;
}

View File

@ -78,7 +78,7 @@ public class DidYouMeanLibrary {
if (word == null) return;
word = word.trim().toLowerCase();
if (word.length() < commonWordsMinLength) return;
commonWords.incScore(word);
commonWords.inc(word);
if (commonWords.size() >= commonWordsMaxSize) {
commonWords.shrinkToMaxSize(commonWordsMaxSize / 2);
}

View File

@ -610,11 +610,11 @@ public final class MetadataRepository implements Iterable<byte[]> {
// order elements by size
DynamicScore<String> s = new ScoreCluster<String>();
for (Map.Entry<String, hashStat> e: map.entrySet()) {
s.addScore(e.getValue().urlhash, e.getValue().count);
s.inc(e.getValue().urlhash, e.getValue().count);
}
// fetch urls from the database to determine the host in clear text
Iterator<String> j = s.scores(false); // iterate urlhash-examples in reverse order (biggest first)
Iterator<String> j = s.keys(false); // iterate urlhash-examples in reverse order (biggest first)
URIMetadataRow urlref;
String urlhash;
count += 10; // make some more to prevent that we have to do this again after deletions too soon.
@ -630,7 +630,7 @@ public final class MetadataRepository implements Iterable<byte[]> {
if (statsDump == null) return new ArrayList<hostStat>().iterator(); // some other operation has destroyed the object
comps = urlref.metadata();
url = comps.url();
statsDump.add(new hostStat(url.getHost(), url.getPort(), urlhash.substring(6), s.getScore(urlhash)));
statsDump.add(new hostStat(url.getHost(), url.getPort(), urlhash.substring(6), s.get(urlhash)));
count--;
if (count == 0) break;
}

View File

@ -620,7 +620,7 @@ public final class RankingProcess extends Thread {
// create a list of words that had been computed by statistics over all
// words that appeared in the url or the description of all urls
if (!this.query.navigators.equals("all") && this.query.navigators.indexOf("topics") < 0) return new ArrayList<Navigator.Item>(0);
List<Navigator.Item> result = this.ref.entries(10);
List<Navigator.Item> result = this.ref.entries(count);
if (result.size() < 2) result.clear(); // navigators with one entry are not useful
return result;
}

View File

@ -166,7 +166,7 @@ public class ReferenceOrder {
final Iterator<Map.Entry<String, Integer>> di = doms0.entrySet().iterator();
while (di.hasNext()) {
entry = di.next();
doms.addScore(entry.getKey(), (entry.getValue()).intValue());
doms.inc(entry.getKey(), (entry.getValue()).intValue());
}
if (!doms.isEmpty()) maxdomcount = doms.getMaxScore();
} catch (InterruptedException e) {
@ -184,7 +184,7 @@ public class ReferenceOrder {
}
public int authority(final byte[] urlHash) {
return (doms.getScore(new String(urlHash, 6, 6)) << 8) / (1 + this.maxdomcount);
return (doms.get(new String(urlHash, 6, 6)) << 8) / (1 + this.maxdomcount);
}
/**

View File

@ -72,7 +72,7 @@ public class PeerSelection {
if (seed == null || seed.hash == null) continue;
if (!seed.getFlagAcceptRemoteIndex()) continue; // probably a robinson peer
if (Log.isFine("PLASMA")) Log.logFine("PLASMA", "selectPeers/DHTorder: " + seed.hash + ":" + seed.getName() + "/ score " + c);
ranking.addScore(seed.hash, 2 * c);
ranking.inc(seed.hash, 2 * c);
regularSeeds.put(seed.hash, seed);
c--;
}
@ -351,13 +351,13 @@ public class PeerSelection {
ys = s.next();
if ((ys != null) && (ys.get(yacySeed.LASTSEEN, "").length() > 10)) try {
absage = Math.abs(System.currentTimeMillis() + DateFormatter.dayMillis - ys.getLastSeenUTC());
seedScore.addScore(ys.hash, (int) absage); // the higher absage, the older is the peer
seedScore.inc(ys.hash, (int) absage); // the higher absage, the older is the peer
} catch (final Exception e) {}
}
// result is now in the score object; create a result vector
final Map<String, yacySeed> result = new HashMap<String, yacySeed>();
final Iterator<String> it = seedScore.scores(up);
final Iterator<String> it = seedScore.keys(up);
int c = 0;
while ((c < count) && (it.hasNext())) {
c++;

View File

@ -206,7 +206,7 @@ public class yacySearch extends Thread {
if (!seed.getFlagAcceptRemoteIndex()) continue; // probably a robinson peer
score = (int) Math.round(Math.random() * ((c / 3) + 3));
if (Log.isFine("PLASMA")) Log.logFine("PLASMA", "selectPeers/RWIcount: " + seed.hash + ":" + seed.getName() + ", RWIcount=" + seed.getWordCount() + ", score " + score);
ranking.addScore(seed.hash, score);
ranking.inc(seed.hash, score);
regularSeeds.put(seed.hash, seed);
c--;
}
@ -221,12 +221,12 @@ public class yacySearch extends Thread {
String specialized = seed.getPeerTags().toString();
if (!specialized.equals("[*]")) Log.logInfo("PLASMA", "selectPeers/PeerTags: " + seed.hash + ":" + seed.getName() + ", is specialized peer for " + specialized);
regularSeeds.remove(seed.hash);
ranking.deleteScore(seed.hash);
ranking.delete(seed.hash);
matchingSeeds.put(seed.hash, seed);
} else if (seed.getFlagAcceptRemoteIndex() && seed.getAge() < 1) { // the 'workshop feature'
Log.logInfo("PLASMA", "selectPeers/Age: " + seed.hash + ":" + seed.getName() + ", is newbie, age = " + seed.getAge());
regularSeeds.remove(seed.hash);
ranking.deleteScore(seed.hash);
ranking.delete(seed.hash);
matchingSeeds.put(seed.hash, seed);
}
}
@ -235,7 +235,7 @@ public class yacySearch extends Thread {
seedcount = Math.min(ranking.size(), seedcount);
final yacySeed[] result = new yacySeed[seedcount + matchingSeeds.size()];
c = 0;
Iterator<String> iters = ranking.scores(false); // higher are better
Iterator<String> iters = ranking.keys(false); // higher are better
while (iters.hasNext() && c < seedcount) {
seed = regularSeeds.get(iters.next());
seed.selectscore = c;

View File

@ -22,10 +22,10 @@ package net.yacy.cora.storage;
public interface DynamicScore<E> extends StaticScore<E> {
public void incScore(final E obj);
public void inc(final E obj);
public void inc(final E obj, final int incrementScore);
public void decScore(final E obj);
public void addScore(final E obj, final int incrementScore);
public void dec(final E obj);
public void dec(final E obj, final int incrementScore);
}

View File

@ -81,7 +81,8 @@ public class IntScore implements Comparable<IntScore>, Comparator<IntScore> {
}
public int hashCode() {
return (int) (this.value ^ (this.value >>> 32));
return this.value;
// return (int) (this.value ^ (this.value >>> 32)); // hash code for long values
}
public int compareTo(IntScore o) {

View File

@ -186,15 +186,15 @@ public final class ScoreCluster<E> implements DynamicScore<E> {
return map.isEmpty();
}
public synchronized void incScore(final E obj) {
addScore(obj, 1);
public synchronized void inc(final E obj) {
inc(obj, 1);
}
public synchronized void decScore(final E obj) {
addScore(obj, -1);
public synchronized void dec(final E obj) {
inc(obj, -1);
}
public void setScore(final E obj, final int newScore) {
public void set(final E obj, final int newScore) {
if (obj == null) return;
synchronized (this) {
Long usk = map.remove(obj); // get unique score key, old entry is not needed any more
@ -228,7 +228,7 @@ public final class ScoreCluster<E> implements DynamicScore<E> {
gcount += newScore;
}
public void addScore(final E obj, final int incrementScore) {
public void inc(final E obj, final int incrementScore) {
if (obj == null) return;
synchronized (this) {
Long usk = map.remove(obj); // get unique score key, old entry is not needed any more
@ -262,8 +262,12 @@ public final class ScoreCluster<E> implements DynamicScore<E> {
// increase overall counter
gcount += incrementScore;
}
public void dec(final E obj, final int incrementScore) {
inc(obj, -incrementScore);
}
public int deleteScore(final E obj) {
public int delete(final E obj) {
// deletes entry and returns previous score
if (obj == null) return 0;
final Long usk;
@ -284,11 +288,11 @@ public final class ScoreCluster<E> implements DynamicScore<E> {
return oldScore;
}
public synchronized boolean existsScore(final E obj) {
public synchronized boolean containsKey(final E obj) {
return map.containsKey(obj);
}
public int getScore(final E obj) {
public int get(final E obj) {
if (obj == null) return 0;
final Long cs;
synchronized (this) {
@ -308,12 +312,12 @@ public final class ScoreCluster<E> implements DynamicScore<E> {
return (int) ((pam.firstKey().longValue() & 0xFFFFFFFF00000000L) >> 32);
}
public synchronized E getMaxObject() {
public synchronized E getMaxKey() {
if (map.isEmpty()) return null;
return pam.get(pam.lastKey());
}
public synchronized E getMinObject() {
public synchronized E getMinKey() {
if (map.isEmpty()) return null;
return pam.get(pam.firstKey());
}
@ -322,7 +326,7 @@ public final class ScoreCluster<E> implements DynamicScore<E> {
return map + " / " + pam;
}
public synchronized Iterator<E> scores(final boolean up) {
public synchronized Iterator<E> keys(final boolean up) {
if (up) return new simpleScoreIterator<E>();
return new reverseScoreIterator<E>();
}
@ -405,7 +409,7 @@ public final class ScoreCluster<E> implements DynamicScore<E> {
for (int i = 0; i < count; i++) {
r = random.nextInt();
mem[i] = r;
s.addScore("score#" + r, r);
s.inc("score#" + r, r);
c += r;
}
@ -413,18 +417,18 @@ public final class ScoreCluster<E> implements DynamicScore<E> {
int p;
for (int i = 0; i < (count / 2); i++) {
p = (int) (random.nextFloat() * count);
if (s.existsScore("score#" + mem[p])) {
if (s.containsKey("score#" + mem[p])) {
System.out.println("delete score#" + mem[p]);
s.deleteScore("score#" + mem[p]);
s.delete("score#" + mem[p]);
c -= mem[p];
}
}
}
System.out.println("result:");
Iterator<String> i = s.scores(true);
Iterator<String> i = s.keys(true);
while (i.hasNext()) System.out.println("up: " + i.next());
i = s.scores(false);
i = s.keys(false);
while (i.hasNext()) System.out.println("down: " + i.next());
System.out.println("finished create. time = " + (System.currentTimeMillis() - time));

View File

@ -95,7 +95,7 @@ public class ScoreMap<E> implements DynamicScore<E> {
return map.isEmpty();
}
public void incScore(final E obj) {
public void inc(final E obj) {
if (obj == null) return;
synchronized (this) {
IntScore score = this.map.get(obj);
@ -109,7 +109,7 @@ public class ScoreMap<E> implements DynamicScore<E> {
gcount++;
}
public void decScore(final E obj) {
public void dec(final E obj) {
if (obj == null) return;
synchronized (this) {
IntScore score = this.map.get(obj);
@ -123,7 +123,7 @@ public class ScoreMap<E> implements DynamicScore<E> {
gcount--;
}
public void setScore(final E obj, final int newScore) {
public void set(final E obj, final int newScore) {
if (obj == null) return;
synchronized (this) {
IntScore score = this.map.get(obj);
@ -138,7 +138,7 @@ public class ScoreMap<E> implements DynamicScore<E> {
gcount += newScore;
}
public void addScore(final E obj, final int incrementScore) {
public void inc(final E obj, final int incrementScore) {
if (obj == null) return;
synchronized (this) {
IntScore score = this.map.get(obj);
@ -152,7 +152,11 @@ public class ScoreMap<E> implements DynamicScore<E> {
gcount += incrementScore;
}
public int deleteScore(final E obj) {
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 IntScore score;
@ -166,11 +170,11 @@ public class ScoreMap<E> implements DynamicScore<E> {
return score.intValue();
}
public synchronized boolean existsScore(final E obj) {
public synchronized boolean containsKey(final E obj) {
return map.containsKey(obj);
}
public int getScore(final E obj) {
public int get(final E obj) {
if (obj == null) return 0;
final IntScore score;
synchronized (this) {
@ -202,7 +206,7 @@ public class ScoreMap<E> implements DynamicScore<E> {
return minScore;
}
public E getMaxObject() {
public E getMaxKey() {
if (map.isEmpty()) return null;
E maxObject = null;
int maxScore = Integer.MIN_VALUE;
@ -215,7 +219,7 @@ public class ScoreMap<E> implements DynamicScore<E> {
return maxObject;
}
public E getMinObject() {
public E getMinKey() {
if (map.isEmpty()) return null;
E minObject = null;
int minScore = Integer.MAX_VALUE;
@ -232,7 +236,7 @@ public class ScoreMap<E> implements DynamicScore<E> {
return map.toString();
}
public Iterator<E> scores(boolean up) {
public Iterator<E> keys(boolean up) {
synchronized (this) {
// re-organize entries
TreeMap<IntScore, Set<E>> m = new TreeMap<IntScore, Set<E>>();

View File

@ -44,24 +44,24 @@ public interface StaticScore<E> {
public boolean isEmpty();
public void setScore(final E obj, final int newScore);
public void set(final E obj, final int newScore);
public int deleteScore(final E obj);
public int delete(final E obj);
public boolean existsScore(final E obj);
public boolean containsKey(final E obj);
public int getScore(final E obj);
public int get(final E obj);
public int getMaxScore();
public int getMinScore();
public E getMaxObject();
public E getMaxKey();
public E getMinObject();
public E getMinKey();
public String toString();
public Iterator<E> scores(final boolean up);
public Iterator<E> keys(final boolean up);
}

View File

@ -120,7 +120,7 @@ public class MapDataMining extends MapHeap {
if (sortfields != null && cluster != null) for (int i = 0; i < sortfields.length; i++) {
cell = map.get(sortfields[i]);
if (cell != null) cluster[i].setScore(new String(mapnameb), ScoreCluster.object2score(cell));
if (cell != null) cluster[i].set(new String(mapnameb), ScoreCluster.object2score(cell));
}
if (longaccfields != null && longaccumulator != null) for (int i = 0; i < longaccfields.length; i++) {
@ -246,7 +246,7 @@ public class MapDataMining extends MapHeap {
cell = map.get(sortfields[i]);
if (cell != null) {
cluster = sortClusterMap.get(sortfields[i]);
cluster.setScore(key, ScoreCluster.object2score(cell));
cluster.set(key, ScoreCluster.object2score(cell));
sortClusterMap.put(sortfields[i], cluster);
}
}
@ -282,7 +282,7 @@ public class MapDataMining extends MapHeap {
StaticScore<String> cluster;
for (int i = 0; i < sortfields.length; i++) {
cluster = sortClusterMap.get(sortfields[i]);
cluster.deleteScore(key);
cluster.delete(key);
sortClusterMap.put(sortfields[i], cluster);
}
}
@ -293,7 +293,7 @@ public class MapDataMining extends MapHeap {
final StaticScore<String> cluster = sortClusterMap.get(field);
if (cluster == null) return null; // sort field does not exist
//System.out.println("DEBUG: cluster for field " + field + ": " + cluster.toString());
return new string2bytearrayIterator(cluster.scores(up));
return new string2bytearrayIterator(cluster.keys(up));
}
public static class string2bytearrayIterator implements Iterator<byte[]> {

View File

@ -611,18 +611,18 @@ public final class yacy {
while (ef.hasMoreElements()) {
f = ef.nextElement();
h = f.getName().substring(0, Word.commonHashLength).getBytes();
hs.addScore(h, (int) f.length());
hs.inc(h, (int) f.length());
}
// list the hashes in reverse order
Log.logInfo("GEN-WORDSTAT", "listing words in reverse size order...");
String w;
final Iterator<byte[]> i = hs.scores(false);
final Iterator<byte[]> i = hs.keys(false);
while (i.hasNext()) {
h = i.next();
w = words.get(h);
if (w == null) System.out.print("# " + h); else System.out.print(w);
System.out.println(" - " + hs.getScore(h));
System.out.println(" - " + hs.get(h));
}
// finished