diff options
author | zkwip | 2015-05-22 17:49:05 +0200 |
---|---|---|
committer | zkwip | 2015-05-22 17:49:05 +0200 |
commit | f2343e7d075ae293ba178c5f118e07ba78738f6a (patch) | |
tree | 006092ff6009a16fa415a87b1f813bf361a9ddd7 /app/src/main/java | |
parent | typo fix (diff) |
Added limiting options
Diffstat (limited to 'app/src/main/java')
-rw-r--r-- | app/src/main/java/org/rssin/summaries/BablukiAPI.java | 97 |
1 files changed, 90 insertions, 7 deletions
diff --git a/app/src/main/java/org/rssin/summaries/BablukiAPI.java b/app/src/main/java/org/rssin/summaries/BablukiAPI.java index 4e0e431..452faf4 100644 --- a/app/src/main/java/org/rssin/summaries/BablukiAPI.java +++ b/app/src/main/java/org/rssin/summaries/BablukiAPI.java @@ -5,18 +5,27 @@ */ package org.rssin.summaries; +import java.util.ArrayList; import org.rssin.rss.FeedItem; /** - * Java/SummaryAPI implementation of the summary tool. - * Original algorithm in python by Shlomi Babluki + * Java/SummaryAPI implementation of the Babluki summary tool. * @author Joep */ public class BablukiAPI implements SummaryAPIInterface{ LengthMode lm; - int maxchars, maxlines; + private int maxchars, maxlines; + private String sep = ". "; + /** + * + */ + public BablukiAPI() + { + maxchars = Integer.MAX_VALUE; + maxchars = Integer.MAX_VALUE; + } @Override public Summary getSummary(FeedItem f) { @@ -39,26 +48,100 @@ public class BablukiAPI implements SummaryAPIInterface{ return s; } - public String getSumText(String content, String title) + /** + * get the summary of a text + * @param content the body of the text to summarize + * @param title the title + * @return the summary + */ + private String getSumText(String content, String title) { SentenceScore[] ranks = getSentenceRanks(content); String[] paragraphs = splitIntoParagraphs(content); - String o = ""; + + //choose sentences + + ArrayList<String> sents = new ArrayList(); for(String p: paragraphs) { String sentence = getBestSentence(p,ranks); if (sentence != null) { - o += sentence.trim(); - o += ". "; + sents.add(sentence); } } + //reduce if neccesairy + + while((lm == LengthMode.LINES || lm == LengthMode.BOTH) && sents.size() > maxlines) + removeLeastSentence(sents, ranks); + + while((lm == LengthMode.CHARACTERS || lm == LengthMode.BOTH) && getTotalSize(sents, sep) > maxchars) + removeLeastSentence(sents, ranks); + + //output the sentences. + + String o = ""; + + for(String p: sents) + { + o += p.trim(); + o += sep; + } + return o; + + } + + /** + * set the string placed between each line + * @param sep string to use + */ + public void setSeperator(String sep) + { + this.sep = sep; + } + + /** + * returns the string placed between each line + * @return seperator string + */ + public String getSeperator() + { + return sep; + } + + private int getTotalSize(ArrayList<String> sents, String seperator) + { + int len = seperator.length() * sents.size(); + + for(String s: sents) + { + len += s.length(); + } + + return len; + } + + private void removeLeastSentence(ArrayList<String> sents, SentenceScore[] ranks) + { + double lowest = Double.MAX_VALUE; + int index = 0; + + for(int i=0; i<sents.size(); i++) + { + double score = getScore(formatSentence(sents.get(i)),ranks); + if (score < lowest) + { + index = i; + lowest = score; + } + } + sents.remove(index); } |