aboutsummaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
authorzkwip2015-05-22 17:49:05 +0200
committerzkwip2015-05-22 17:49:05 +0200
commitf2343e7d075ae293ba178c5f118e07ba78738f6a (patch)
tree006092ff6009a16fa415a87b1f813bf361a9ddd7 /app/src/main
parenttypo fix (diff)
Added limiting options
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/org/rssin/summaries/BablukiAPI.java97
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);
}