From c10c4e0f4d262c228cac3028b52d277e9f393da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Kohlsch=C3=BCtter?= Date: Sun, 30 Nov 2014 16:51:29 -0800 Subject: [PATCH] Getting ready for boilerpipe 2.0 Moved from Ant to Maven. Automatic code formatting (mvn java-formatter:format) Automatic license headers (mvn license:format) Move NekoHTML into private package to prevent dependency collisions. Some cosmetic changes (javadocs). New package name. --- .classpath | 10 - .gitignore | 6 + .project | 17 - INSTALL.txt | 2 - LICENSE | 15 + LICENSE.txt | 18 - NOTICE | 15 + NOTICE.txt | 24 - README.md | 6 + boilerpipe-common/pom.xml | 35 + .../boilerpipe/BoilerpipeDocumentSource.java | 27 + .../boilerpipe/BoilerpipeExtractor.java | 65 + .../boilerpipe/BoilerpipeFilter.java | 30 +- .../boilerpipe/BoilerpipeInput.java | 22 +- .../BoilerpipeProcessingException.java | 32 +- .../conditions/TextBlockCondition.java | 25 +- .../boilerpipe/document/Image.java | 108 ++ .../boilerpipe/document/TextBlock.java | 283 ++++ .../boilerpipe/document/TextDocument.java | 132 ++ .../document/TextDocumentStatistics.java | 62 + .../boilerpipe/document/package-info.java | 4 + .../estimators/SimpleEstimator.java | 61 + .../extractors/ArticleExtractor.java | 64 + .../extractors/ArticleSentencesExtractor.java | 45 + .../extractors/CanolaExtractor.java | 94 ++ .../extractors/CommonExtractors.java | 56 + .../extractors/DefaultExtractor.java | 47 + .../boilerpipe/extractors/ExtractorBase.java | 110 ++ .../extractors/KeepEverythingExtractor.java | 25 +- .../KeepEverythingWithMinKWordsExtractor.java | 44 + .../extractors/LargestContentExtractor.java | 50 + .../extractors/NumWordsRulesExtractor.java | 43 + .../boilerpipe/extractors/package-info.java | 4 + .../filters/debug/PrintDebugFilter.java | 66 + .../english/DensityRulesClassifier.java | 110 ++ .../filters/english/HeuristicFilterBase.java | 28 +- .../IgnoreBlocksAfterContentFilter.java | 78 ++ ...IgnoreBlocksAfterContentFromEndFilter.java | 74 ++ .../KeepLargestFulltextBlockFilter.java | 81 ++ .../english/MinFulltextWordsFilter.java | 59 + .../english/NumWordsRulesClassifier.java | 110 ++ .../english/TerminatingBlocksFinder.java | 109 ++ .../filters/english/package-info.java | 7 + .../heuristics/AddPrecedingLabelsFilter.java | 82 ++ .../heuristics/ArticleMetadataFilter.java | 62 + .../heuristics/BlockProximityFusion.java | 122 ++ .../filters/heuristics/ContentFusion.java | 72 ++ .../DocumentTitleMatchClassifier.java | 170 +++ .../ExpandTitleToContentFilter.java | 70 + .../heuristics/KeepLargestBlockFilter.java | 117 ++ .../filters/heuristics/LabelFusion.java | 87 ++ ...LargeBlockSameTagLevelToContentFilter.java | 70 + .../filters/heuristics/ListAtEndFilter.java | 57 + .../SimpleBlockFusionProcessor.java | 67 + .../TrailingHeadlineToBoilerplateFilter.java | 64 + .../filters/heuristics/package-info.java | 4 + .../simple/BoilerplateBlockFilter.java | 64 + .../filters/simple/InvertedFilter.java | 44 +- .../simple/LabelToBoilerplateFilter.java | 57 + .../filters/simple/LabelToContentFilter.java | 53 + .../MarkEverythingBoilerplateFilter.java | 49 + .../simple/MarkEverythingContentFilter.java | 48 + .../filters/simple/MinClauseWordsFilter.java | 108 ++ .../filters/simple/MinWordsFilter.java | 53 + .../simple/SplitParagraphBlocksFilter.java | 79 ++ .../simple/SurroundingToContentFilter.java | 77 ++ .../filters/simple/package-info.java | 5 + .../labels/ConditionalLabelAction.java | 29 +- .../boilerpipe/labels/DefaultLabels.java | 46 + .../boilerpipe/labels/LabelAction.java | 41 +- .../kohlschutter/boilerpipe/package-info.java | 4 + .../sax/BoilerpipeHTMLContentHandler.java | 441 +++++++ .../boilerpipe/sax/BoilerpipeHTMLParser.java | 75 ++ .../boilerpipe/sax/BoilerpipeSAXInput.java | 72 ++ .../boilerpipe/sax/CommonTagActions.java | 343 +++++ .../boilerpipe/sax/DefaultTagActionMap.java | 81 ++ .../boilerpipe/sax/HTMLDocument.java | 56 + .../boilerpipe/sax/HTMLFetcher.java | 91 ++ .../boilerpipe/sax/HTMLHighlighter.java | 503 ++++++++ .../boilerpipe/sax/ImageExtractor.java | 278 ++++ .../boilerpipe/sax/InputSourceable.java | 28 + .../boilerpipe/sax/MarkupTagAction.java | 118 ++ .../boilerpipe/sax/TagAction.java | 22 +- .../boilerpipe/sax/TagActionMap.java | 59 + .../boilerpipe/sax/package-info.java | 5 + .../boilerpipe/util/UnicodeTokenizer.java | 40 + .../boilerpipe/util/package-info.java | 5 + boilerpipe-demo/pom.xml | 23 + .../boilerpipe/demo/HTMLHighlightDemo.java | 56 + .../boilerpipe/demo/ImageExtractorDemo.java | 54 + .../boilerpipe/demo/Oneliner.java | 44 + .../boilerpipe/demo/UsingSAX.java | 49 + .../boilerpipe/demo/package-info.java | 5 + boilerpipe.pom | 34 - build.xml | 193 --- eclipse-formatter-config.xml | 291 +++++ javadoc/1.0/allclasses-frame.html | 103 -- javadoc/1.0/allclasses-noframe.html | 103 -- javadoc/1.0/constant-values.html | 186 --- .../l3s/boilerpipe/BoilerpipeExtractor.html | 324 ----- .../de/l3s/boilerpipe/BoilerpipeFilter.html | 228 ---- .../de/l3s/boilerpipe/BoilerpipeInput.html | 223 ---- .../BoilerpipeProcessingException.html | 290 ----- .../class-use/BoilerpipeExtractor.html | 239 ---- .../class-use/BoilerpipeFilter.html | 484 ------- .../boilerpipe/class-use/BoilerpipeInput.html | 181 --- .../BoilerpipeProcessingException.html | 597 --------- .../de/l3s/boilerpipe/document/TextBlock.html | 648 ---------- .../boilerpipe/document/TextBlockLabel.html | 305 ----- .../l3s/boilerpipe/document/TextDocument.html | 404 ------ .../document/class-use/TextBlock.html | 286 ----- .../document/class-use/TextBlockLabel.html | 144 --- .../document/class-use/TextDocument.html | 564 -------- .../boilerpipe/document/package-frame.html | 36 - .../boilerpipe/document/package-summary.html | 184 --- .../l3s/boilerpipe/document/package-tree.html | 153 --- .../l3s/boilerpipe/document/package-use.html | 298 ----- .../extractors/ArticleExtractor.html | 339 ----- .../extractors/ArticleSentencesExtractor.html | 338 ----- .../extractors/DefaultExtractor.html | 338 ----- .../boilerpipe/extractors/ExtractorBase.html | 400 ------ .../extractors/KeepEverythingExtractor.html | 284 ---- .../KeepEverythingWithMinKWordsExtractor.html | 283 ---- .../extractors/LargestContentExtractor.html | 307 ----- .../extractors/NumWordsRulesExtractor.html | 339 ----- .../class-use/ArticleExtractor.html | 198 --- .../class-use/ArticleSentencesExtractor.html | 198 --- .../class-use/DefaultExtractor.html | 198 --- .../extractors/class-use/ExtractorBase.html | 231 ---- .../class-use/KeepEverythingExtractor.html | 182 --- .../KeepEverythingWithMinKWordsExtractor.html | 144 --- .../class-use/LargestContentExtractor.html | 198 --- .../class-use/NumWordsRulesExtractor.html | 198 --- .../boilerpipe/extractors/package-frame.html | 46 - .../extractors/package-summary.html | 205 --- .../boilerpipe/extractors/package-tree.html | 156 --- .../boilerpipe/extractors/package-use.html | 209 --- .../english/DensityRulesClassifier.html | 363 ------ .../IgnoreBlocksAfterContentFilter.html | 377 ------ .../KeepLargestFulltextBlockFilter.html | 357 ------ .../english/MinFulltextWordsFilter.html | 373 ------ .../english/NumWordsRulesClassifier.html | 363 ------ .../english/TerminatingBlocksFinder.html | 336 ----- .../class-use/DensityRulesClassifier.html | 197 --- .../IgnoreBlocksAfterContentFilter.html | 197 --- .../KeepLargestFulltextBlockFilter.html | 181 --- .../class-use/MinFulltextWordsFilter.html | 197 --- .../class-use/NumWordsRulesClassifier.html | 197 --- .../class-use/TerminatingBlocksFinder.html | 197 --- .../filters/english/package-frame.html | 42 - .../filters/english/package-summary.html | 207 --- .../filters/english/package-tree.html | 159 --- .../filters/english/package-use.html | 210 --- .../heuristics/BlockProximityFusion.html | 335 ----- .../DocumentTitleMatchClassifier.html | 276 ---- .../ExpandTitleToContentFilter.html | 337 ----- .../heuristics/KeepLargestBlockFilter.html | 313 ----- .../SimpleBlockFusionProcessor.html | 334 ----- .../class-use/BlockProximityFusion.html | 189 --- .../DocumentTitleMatchClassifier.html | 144 --- .../class-use/ExpandTitleToContentFilter.html | 197 --- .../class-use/KeepLargestBlockFilter.html | 181 --- .../class-use/SimpleBlockFusionProcessor.html | 197 --- .../filters/heuristics/package-frame.html | 40 - .../filters/heuristics/package-summary.html | 194 --- .../filters/heuristics/package-tree.html | 158 --- .../filters/heuristics/package-use.html | 190 --- .../simple/BoilerplateBlockFilter.html | 334 ----- .../filters/simple/InvertedFilter.html | 277 ---- .../simple/MarkEverythingContentFilter.html | 277 ---- .../filters/simple/MinClauseWordsFilter.html | 330 ----- .../filters/simple/MinWordsFilter.html | 274 ---- .../simple/SplitParagraphBlocksFilter.html | 338 ----- .../class-use/BoilerplateBlockFilter.html | 197 --- .../simple/class-use/InvertedFilter.html | 181 --- .../MarkEverythingContentFilter.html | 181 --- .../class-use/MinClauseWordsFilter.html | 181 --- .../simple/class-use/MinWordsFilter.html | 144 --- .../class-use/SplitParagraphBlocksFilter.html | 197 --- .../filters/simple/package-frame.html | 42 - .../filters/simple/package-summary.html | 196 --- .../filters/simple/package-tree.html | 159 --- .../filters/simple/package-use.html | 196 --- .../1.0/de/l3s/boilerpipe/package-frame.html | 47 - .../de/l3s/boilerpipe/package-summary.html | 197 --- .../1.0/de/l3s/boilerpipe/package-tree.html | 165 --- .../1.0/de/l3s/boilerpipe/package-use.html | 314 ----- .../sax/BoilerpipeHTMLContentHandler.html | 609 --------- .../boilerpipe/sax/BoilerpipeHTMLParser.html | 371 ------ .../boilerpipe/sax/BoilerpipeSAXInput.html | 280 ---- .../l3s/boilerpipe/sax/HTMLHighlighter.html | 302 ----- .../BoilerpipeHTMLContentHandler.html | 144 --- .../sax/class-use/BoilerpipeHTMLParser.html | 144 --- .../sax/class-use/BoilerpipeSAXInput.html | 144 --- .../sax/class-use/HTMLHighlighter.html | 144 --- .../de/l3s/boilerpipe/sax/package-frame.html | 38 - .../l3s/boilerpipe/sax/package-summary.html | 188 --- .../de/l3s/boilerpipe/sax/package-tree.html | 163 --- .../de/l3s/boilerpipe/sax/package-use.html | 144 --- .../l3s/boilerpipe/util/UnicodeTokenizer.html | 264 ---- .../util/class-use/UnicodeTokenizer.html | 144 --- .../de/l3s/boilerpipe/util/package-frame.html | 32 - .../l3s/boilerpipe/util/package-summary.html | 176 --- .../de/l3s/boilerpipe/util/package-tree.html | 153 --- .../de/l3s/boilerpipe/util/package-use.html | 144 --- javadoc/1.0/deprecated-list.html | 146 --- javadoc/1.0/help-doc.html | 223 ---- javadoc/1.0/index-all.html | 715 ----------- javadoc/1.0/index.html | 39 - javadoc/1.0/overview-frame.html | 56 - javadoc/1.0/overview-summary.html | 188 --- javadoc/1.0/overview-tree.html | 194 --- javadoc/1.0/package-list | 8 - javadoc/1.0/resources/inherit.gif | Bin 57 -> 0 bytes javadoc/1.0/serialized-form.html | 166 --- javadoc/1.0/stylesheet.css | 29 - javadoc/1.1/allclasses-frame.html | 141 -- javadoc/1.1/allclasses-noframe.html | 141 -- javadoc/1.1/constant-values.html | 186 --- .../l3s/boilerpipe/BoilerpipeExtractor.html | 324 ----- .../de/l3s/boilerpipe/BoilerpipeFilter.html | 228 ---- .../de/l3s/boilerpipe/BoilerpipeInput.html | 223 ---- .../BoilerpipeProcessingException.html | 290 ----- .../class-use/BoilerpipeExtractor.html | 281 ---- .../class-use/BoilerpipeFilter.html | 527 -------- .../boilerpipe/class-use/BoilerpipeInput.html | 181 --- .../BoilerpipeProcessingException.html | 634 --------- .../conditions/TextBlockCondition.html | 218 ---- .../class-use/TextBlockCondition.html | 179 --- .../boilerpipe/conditions/package-frame.html | 32 - .../conditions/package-summary.html | 157 --- .../boilerpipe/conditions/package-tree.html | 151 --- .../boilerpipe/conditions/package-use.html | 170 --- .../de/l3s/boilerpipe/document/TextBlock.html | 746 ----------- .../l3s/boilerpipe/document/TextDocument.html | 404 ------ .../document/TextDocumentStatistics.html | 293 ----- .../document/class-use/TextBlock.html | 390 ------ .../document/class-use/TextDocument.html | 631 --------- .../class-use/TextDocumentStatistics.html | 182 --- .../boilerpipe/document/package-frame.html | 36 - .../boilerpipe/document/package-summary.html | 183 --- .../l3s/boilerpipe/document/package-tree.html | 154 --- .../l3s/boilerpipe/document/package-use.html | 367 ------ .../estimators/SimpleEstimator.html | 274 ---- .../estimators/class-use/SimpleEstimator.html | 180 --- .../boilerpipe/estimators/package-frame.html | 32 - .../estimators/package-summary.html | 157 --- .../boilerpipe/estimators/package-tree.html | 153 --- .../boilerpipe/estimators/package-use.html | 170 --- .../extractors/ArticleExtractor.html | 339 ----- .../extractors/ArticleSentencesExtractor.html | 338 ----- .../extractors/CanolaExtractor.html | 361 ------ .../extractors/CommonExtractors.html | 300 ----- .../extractors/DefaultExtractor.html | 338 ----- .../boilerpipe/extractors/ExtractorBase.html | 400 ------ .../extractors/KeepEverythingExtractor.html | 284 ---- .../KeepEverythingWithMinKWordsExtractor.html | 283 ---- .../extractors/LargestContentExtractor.html | 307 ----- .../extractors/NumWordsRulesExtractor.html | 339 ----- .../class-use/ArticleExtractor.html | 206 --- .../class-use/ArticleSentencesExtractor.html | 198 --- .../extractors/class-use/CanolaExtractor.html | 206 --- .../class-use/CommonExtractors.html | 144 --- .../class-use/DefaultExtractor.html | 206 --- .../extractors/class-use/ExtractorBase.html | 242 ---- .../class-use/KeepEverythingExtractor.html | 190 --- .../KeepEverythingWithMinKWordsExtractor.html | 144 --- .../class-use/LargestContentExtractor.html | 198 --- .../class-use/NumWordsRulesExtractor.html | 198 --- .../boilerpipe/extractors/package-frame.html | 50 - .../extractors/package-summary.html | 216 ---- .../boilerpipe/extractors/package-tree.html | 156 --- .../boilerpipe/extractors/package-use.html | 218 ---- .../english/DensityRulesClassifier.html | 363 ------ .../IgnoreBlocksAfterContentFilter.html | 377 ------ .../KeepLargestFulltextBlockFilter.html | 357 ------ .../english/MinFulltextWordsFilter.html | 373 ------ .../english/NumWordsRulesClassifier.html | 363 ------ .../english/TerminatingBlocksFinder.html | 336 ----- .../class-use/DensityRulesClassifier.html | 197 --- .../IgnoreBlocksAfterContentFilter.html | 197 --- .../KeepLargestFulltextBlockFilter.html | 181 --- .../class-use/MinFulltextWordsFilter.html | 197 --- .../class-use/NumWordsRulesClassifier.html | 197 --- .../class-use/TerminatingBlocksFinder.html | 197 --- .../filters/english/package-frame.html | 42 - .../filters/english/package-summary.html | 207 --- .../filters/english/package-tree.html | 159 --- .../filters/english/package-use.html | 210 --- .../heuristics/BlockProximityFusion.html | 335 ----- .../DocumentTitleMatchClassifier.html | 276 ---- .../ExpandTitleToContentFilter.html | 337 ----- .../heuristics/KeepLargestBlockFilter.html | 313 ----- .../SimpleBlockFusionProcessor.html | 334 ----- .../class-use/BlockProximityFusion.html | 189 --- .../DocumentTitleMatchClassifier.html | 144 --- .../class-use/ExpandTitleToContentFilter.html | 197 --- .../class-use/KeepLargestBlockFilter.html | 181 --- .../class-use/SimpleBlockFusionProcessor.html | 197 --- .../filters/heuristics/package-frame.html | 40 - .../filters/heuristics/package-summary.html | 194 --- .../filters/heuristics/package-tree.html | 158 --- .../filters/heuristics/package-use.html | 190 --- .../simple/BoilerplateBlockFilter.html | 334 ----- .../filters/simple/InvertedFilter.html | 277 ---- .../simple/LabelToBoilerplateFilter.html | 274 ---- .../filters/simple/LabelToContentFilter.html | 274 ---- .../simple/MarkEverythingContentFilter.html | 277 ---- .../filters/simple/MinClauseWordsFilter.html | 330 ----- .../filters/simple/MinWordsFilter.html | 274 ---- .../simple/SplitParagraphBlocksFilter.html | 338 ----- .../class-use/BoilerplateBlockFilter.html | 197 --- .../simple/class-use/InvertedFilter.html | 181 --- .../class-use/LabelToBoilerplateFilter.html | 144 --- .../class-use/LabelToContentFilter.html | 144 --- .../MarkEverythingContentFilter.html | 181 --- .../class-use/MinClauseWordsFilter.html | 181 --- .../simple/class-use/MinWordsFilter.html | 144 --- .../class-use/SplitParagraphBlocksFilter.html | 197 --- .../filters/simple/package-frame.html | 46 - .../filters/simple/package-summary.html | 204 --- .../filters/simple/package-tree.html | 161 --- .../filters/simple/package-use.html | 196 --- .../labels/ConditionalLabelAction.html | 293 ----- .../l3s/boilerpipe/labels/DefaultLabels.html | 305 ----- .../de/l3s/boilerpipe/labels/LabelAction.html | 318 ----- .../class-use/ConditionalLabelAction.html | 144 --- .../labels/class-use/DefaultLabels.html | 144 --- .../labels/class-use/LabelAction.html | 214 ---- .../l3s/boilerpipe/labels/package-frame.html | 36 - .../boilerpipe/labels/package-summary.html | 166 --- .../l3s/boilerpipe/labels/package-tree.html | 155 --- .../de/l3s/boilerpipe/labels/package-use.html | 190 --- .../1.1/de/l3s/boilerpipe/package-frame.html | 47 - .../de/l3s/boilerpipe/package-summary.html | 197 --- .../1.1/de/l3s/boilerpipe/package-tree.html | 165 --- .../1.1/de/l3s/boilerpipe/package-use.html | 320 ----- .../sax/BoilerpipeHTMLContentHandler.html | 703 ---------- .../boilerpipe/sax/BoilerpipeHTMLParser.html | 392 ------ .../boilerpipe/sax/BoilerpipeSAXInput.html | 307 ----- .../CommonTagActions.BlockTagLabelAction.html | 298 ----- .../sax/CommonTagActions.Chained.html | 301 ----- ...CommonTagActions.InlineTagLabelAction.html | 298 ----- .../l3s/boilerpipe/sax/CommonTagActions.html | 397 ------ .../boilerpipe/sax/DefaultTagActionMap.html | 330 ----- .../de/l3s/boilerpipe/sax/HTMLDocument.html | 312 ----- .../de/l3s/boilerpipe/sax/HTMLFetcher.html | 233 ---- .../l3s/boilerpipe/sax/HTMLHighlighter.html | 533 -------- .../l3s/boilerpipe/sax/InputSourceable.html | 217 ---- .../1.1/de/l3s/boilerpipe/sax/TagAction.html | 253 ---- .../de/l3s/boilerpipe/sax/TagActionMap.html | 339 ----- .../BoilerpipeHTMLContentHandler.html | 271 ---- .../sax/class-use/BoilerpipeHTMLParser.html | 181 --- .../sax/class-use/BoilerpipeSAXInput.html | 144 --- .../CommonTagActions.BlockTagLabelAction.html | 144 --- .../class-use/CommonTagActions.Chained.html | 144 --- ...CommonTagActions.InlineTagLabelAction.html | 144 --- .../sax/class-use/CommonTagActions.html | 144 --- .../sax/class-use/DefaultTagActionMap.html | 144 --- .../sax/class-use/HTMLDocument.html | 181 --- .../boilerpipe/sax/class-use/HTMLFetcher.html | 144 --- .../sax/class-use/HTMLHighlighter.html | 191 --- .../sax/class-use/InputSourceable.html | 181 --- .../boilerpipe/sax/class-use/TagAction.html | 305 ----- .../sax/class-use/TagActionMap.html | 212 --- .../de/l3s/boilerpipe/sax/package-frame.html | 67 - .../l3s/boilerpipe/sax/package-summary.html | 242 ---- .../de/l3s/boilerpipe/sax/package-tree.html | 180 --- .../de/l3s/boilerpipe/sax/package-use.html | 210 --- .../l3s/boilerpipe/util/UnicodeTokenizer.html | 264 ---- .../util/class-use/UnicodeTokenizer.html | 144 --- .../de/l3s/boilerpipe/util/package-frame.html | 32 - .../l3s/boilerpipe/util/package-summary.html | 176 --- .../de/l3s/boilerpipe/util/package-tree.html | 153 --- .../de/l3s/boilerpipe/util/package-use.html | 144 --- javadoc/1.1/deprecated-list.html | 161 --- javadoc/1.1/help-doc.html | 223 ---- javadoc/1.1/index-all.html | 963 -------------- javadoc/1.1/index.html | 39 - javadoc/1.1/overview-frame.html | 62 - javadoc/1.1/overview-summary.html | 200 --- javadoc/1.1/overview-tree.html | 211 --- javadoc/1.1/package-list | 11 - javadoc/1.1/resources/inherit.gif | Bin 57 -> 0 bytes javadoc/1.1/serialized-form.html | 202 --- javadoc/1.1/stylesheet.css | 29 - javadoc/1.2/allclasses-frame.html | 163 --- javadoc/1.2/allclasses-noframe.html | 163 --- javadoc/1.2/constant-values.html | 210 --- .../boilerpipe/BoilerpipeDocumentSource.html | 212 --- .../l3s/boilerpipe/BoilerpipeExtractor.html | 324 ----- .../de/l3s/boilerpipe/BoilerpipeFilter.html | 228 ---- .../de/l3s/boilerpipe/BoilerpipeInput.html | 223 ---- .../BoilerpipeProcessingException.html | 290 ----- .../boilers/StructureAwareBoiler.html | 284 ---- .../class-use/StructureAwareBoiler.html | 180 --- .../l3s/boilerpipe/boilers/package-frame.html | 32 - .../boilerpipe/boilers/package-summary.html | 157 --- .../l3s/boilerpipe/boilers/package-tree.html | 153 --- .../l3s/boilerpipe/boilers/package-use.html | 170 --- .../class-use/BoilerpipeDocumentSource.html | 181 --- .../class-use/BoilerpipeExtractor.html | 289 ----- .../class-use/BoilerpipeFilter.html | 593 --------- .../boilerpipe/class-use/BoilerpipeInput.html | 181 --- .../BoilerpipeProcessingException.html | 743 ----------- .../conditions/TextBlockCondition.html | 218 ---- .../class-use/TextBlockCondition.html | 207 --- .../boilerpipe/conditions/package-frame.html | 32 - .../conditions/package-summary.html | 157 --- .../boilerpipe/conditions/package-tree.html | 151 --- .../boilerpipe/conditions/package-use.html | 190 --- .../de/l3s/boilerpipe/document/TextBlock.html | 812 ------------ .../l3s/boilerpipe/document/TextDocument.html | 404 ------ .../document/TextDocumentStatistics.html | 293 ----- .../document/class-use/TextBlock.html | 390 ------ .../document/class-use/TextDocument.html | 732 ----------- .../class-use/TextDocumentStatistics.html | 182 --- .../boilerpipe/document/package-frame.html | 36 - .../boilerpipe/document/package-summary.html | 183 --- .../l3s/boilerpipe/document/package-tree.html | 154 --- .../l3s/boilerpipe/document/package-use.html | 386 ------ .../estimators/SimpleEstimator.html | 274 ---- .../estimators/class-use/SimpleEstimator.html | 180 --- .../boilerpipe/estimators/package-frame.html | 32 - .../estimators/package-summary.html | 157 --- .../boilerpipe/estimators/package-tree.html | 153 --- .../boilerpipe/estimators/package-use.html | 170 --- .../extractors/ArticleExtractor.html | 339 ----- .../extractors/ArticleSentencesExtractor.html | 338 ----- .../extractors/CanolaExtractor.html | 361 ------ .../extractors/CommonExtractors.html | 320 ----- .../extractors/DefaultExtractor.html | 338 ----- .../boilerpipe/extractors/ExtractorBase.html | 400 ------ .../extractors/KeepEverythingExtractor.html | 284 ---- .../KeepEverythingWithMinKWordsExtractor.html | 283 ---- .../extractors/LargestContentExtractor.html | 307 ----- .../extractors/LargestContentExtractor2.html | 307 ----- .../extractors/NumWordsRulesExtractor.html | 339 ----- .../class-use/ArticleExtractor.html | 206 --- .../class-use/ArticleSentencesExtractor.html | 198 --- .../extractors/class-use/CanolaExtractor.html | 206 --- .../class-use/CommonExtractors.html | 144 --- .../class-use/DefaultExtractor.html | 206 --- .../extractors/class-use/ExtractorBase.html | 250 ---- .../class-use/KeepEverythingExtractor.html | 190 --- .../KeepEverythingWithMinKWordsExtractor.html | 144 --- .../class-use/LargestContentExtractor.html | 206 --- .../class-use/LargestContentExtractor2.html | 198 --- .../class-use/NumWordsRulesExtractor.html | 198 --- .../boilerpipe/extractors/package-frame.html | 52 - .../extractors/package-summary.html | 220 ---- .../boilerpipe/extractors/package-tree.html | 156 --- .../boilerpipe/extractors/package-use.html | 224 ---- .../CopyOfTerminatingBlocksFinder.html | 336 ----- .../english/DensityRulesClassifier.html | 363 ------ .../IgnoreBlocksAfterContentFilter.html | 395 ------ ...IgnoreBlocksAfterContentFromEndFilter.html | 319 ----- .../KeepLargestFulltextBlockFilter.html | 361 ------ .../english/MinFulltextWordsFilter.html | 373 ------ .../english/NumWordsRulesClassifier.html | 363 ------ .../english/TerminatingBlocksFinder.html | 336 ----- .../CopyOfTerminatingBlocksFinder.html | 197 --- .../class-use/DensityRulesClassifier.html | 197 --- .../IgnoreBlocksAfterContentFilter.html | 205 --- ...IgnoreBlocksAfterContentFromEndFilter.html | 181 --- .../KeepLargestFulltextBlockFilter.html | 181 --- .../class-use/MinFulltextWordsFilter.html | 197 --- .../class-use/NumWordsRulesClassifier.html | 197 --- .../class-use/TerminatingBlocksFinder.html | 197 --- .../filters/english/package-frame.html | 46 - .../filters/english/package-summary.html | 217 ---- .../filters/english/package-tree.html | 161 --- .../filters/english/package-use.html | 224 ---- .../heuristics/AddPrecedingLabelsFilter.html | 332 ----- .../heuristics/ArticleMetadataFilter.html | 269 ---- .../heuristics/BlockProximityFusion.html | 373 ------ .../filters/heuristics/ContentFusion.html | 304 ----- .../DocumentTitleMatchClassifier.html | 298 ----- .../ExpandTitleToContentFilter.html | 337 ----- .../heuristics/KeepLargestBlockFilter.html | 333 ----- .../filters/heuristics/LabelFusion.html | 314 ----- .../SimpleBlockFusionProcessor.html | 334 ----- .../class-use/AddPrecedingLabelsFilter.html | 189 --- .../class-use/ArticleMetadataFilter.html | 181 --- .../class-use/BlockProximityFusion.html | 205 --- .../heuristics/class-use/ContentFusion.html | 181 --- .../DocumentTitleMatchClassifier.html | 144 --- .../class-use/ExpandTitleToContentFilter.html | 197 --- .../class-use/KeepLargestBlockFilter.html | 189 --- .../heuristics/class-use/LabelFusion.html | 181 --- .../class-use/SimpleBlockFusionProcessor.html | 197 --- .../filters/heuristics/package-frame.html | 48 - .../filters/heuristics/package-summary.html | 210 --- .../filters/heuristics/package-tree.html | 162 --- .../filters/heuristics/package-use.html | 214 ---- .../simple/BoilerplateBlockFilter.html | 334 ----- .../filters/simple/InvertedFilter.html | 277 ---- .../simple/LabelToBoilerplateFilter.html | 310 ----- .../filters/simple/LabelToContentFilter.html | 274 ---- .../simple/MarkEverythingContentFilter.html | 277 ---- .../filters/simple/MinClauseWordsFilter.html | 330 ----- .../filters/simple/MinWordsFilter.html | 274 ---- .../simple/SplitParagraphBlocksFilter.html | 338 ----- .../simple/SurroundingToContentFilter.html | 302 ----- .../class-use/BoilerplateBlockFilter.html | 197 --- .../simple/class-use/InvertedFilter.html | 181 --- .../class-use/LabelToBoilerplateFilter.html | 181 --- .../class-use/LabelToContentFilter.html | 144 --- .../MarkEverythingContentFilter.html | 181 --- .../class-use/MinClauseWordsFilter.html | 181 --- .../simple/class-use/MinWordsFilter.html | 144 --- .../class-use/SplitParagraphBlocksFilter.html | 197 --- .../class-use/SurroundingToContentFilter.html | 181 --- .../filters/simple/package-frame.html | 48 - .../filters/simple/package-summary.html | 208 --- .../filters/simple/package-tree.html | 162 --- .../filters/simple/package-use.html | 208 --- .../labels/ConditionalLabelAction.html | 293 ----- .../l3s/boilerpipe/labels/DefaultLabels.html | 377 ------ .../de/l3s/boilerpipe/labels/LabelAction.html | 340 ----- .../class-use/ConditionalLabelAction.html | 144 --- .../labels/class-use/DefaultLabels.html | 144 --- .../labels/class-use/LabelAction.html | 230 ---- .../l3s/boilerpipe/labels/package-frame.html | 36 - .../boilerpipe/labels/package-summary.html | 166 --- .../l3s/boilerpipe/labels/package-tree.html | 155 --- .../de/l3s/boilerpipe/labels/package-use.html | 190 --- .../1.2/de/l3s/boilerpipe/package-frame.html | 49 - .../de/l3s/boilerpipe/package-summary.html | 201 --- .../1.2/de/l3s/boilerpipe/package-tree.html | 165 --- .../1.2/de/l3s/boilerpipe/package-use.html | 345 ----- .../sax/BoilerpipeHTMLContentHandler.html | 750 ----------- .../boilerpipe/sax/BoilerpipeHTMLParser.html | 459 ------- .../boilerpipe/sax/BoilerpipeSAXInput.html | 307 ----- .../CommonTagActions.BlockTagLabelAction.html | 320 ----- .../sax/CommonTagActions.Chained.html | 323 ----- ...CommonTagActions.InlineTagLabelAction.html | 320 ----- .../l3s/boilerpipe/sax/CommonTagActions.html | 417 ------ .../boilerpipe/sax/DefaultTagActionMap.html | 330 ----- .../de/l3s/boilerpipe/sax/HTMLDocument.html | 326 ----- .../de/l3s/boilerpipe/sax/HTMLFetcher.html | 233 ---- .../l3s/boilerpipe/sax/HTMLHighlighter.html | 533 -------- .../l3s/boilerpipe/sax/InputSourceable.html | 217 ---- .../l3s/boilerpipe/sax/MarkupTagAction.html | 329 ----- .../1.2/de/l3s/boilerpipe/sax/TagAction.html | 272 ---- .../de/l3s/boilerpipe/sax/TagActionMap.html | 345 ----- .../BoilerpipeHTMLContentHandler.html | 300 ----- .../sax/class-use/BoilerpipeHTMLParser.html | 181 --- .../sax/class-use/BoilerpipeSAXInput.html | 144 --- .../CommonTagActions.BlockTagLabelAction.html | 144 --- .../class-use/CommonTagActions.Chained.html | 144 --- ...CommonTagActions.InlineTagLabelAction.html | 144 --- .../sax/class-use/CommonTagActions.html | 144 --- .../sax/class-use/DefaultTagActionMap.html | 144 --- .../sax/class-use/HTMLDocument.html | 210 --- .../boilerpipe/sax/class-use/HTMLFetcher.html | 144 --- .../sax/class-use/HTMLHighlighter.html | 191 --- .../sax/class-use/InputSourceable.html | 181 --- .../sax/class-use/MarkupTagAction.html | 144 --- .../boilerpipe/sax/class-use/TagAction.html | 322 ----- .../sax/class-use/TagActionMap.html | 212 --- .../de/l3s/boilerpipe/sax/package-frame.html | 69 - .../l3s/boilerpipe/sax/package-summary.html | 247 ---- .../de/l3s/boilerpipe/sax/package-tree.html | 182 --- .../de/l3s/boilerpipe/sax/package-use.html | 229 ---- .../l3s/boilerpipe/util/UnicodeTokenizer.html | 264 ---- .../util/class-use/UnicodeTokenizer.html | 144 --- .../de/l3s/boilerpipe/util/package-frame.html | 32 - .../l3s/boilerpipe/util/package-summary.html | 176 --- .../de/l3s/boilerpipe/util/package-tree.html | 153 --- .../de/l3s/boilerpipe/util/package-use.html | 144 --- javadoc/1.2/deprecated-list.html | 161 --- javadoc/1.2/help-doc.html | 223 ---- javadoc/1.2/index-all.html | 1140 ----------------- javadoc/1.2/index.html | 39 - javadoc/1.2/overview-frame.html | 64 - javadoc/1.2/overview-summary.html | 204 --- javadoc/1.2/overview-tree.html | 220 ---- javadoc/1.2/package-list | 12 - javadoc/1.2/resources/inherit.gif | Bin 57 -> 0 bytes javadoc/1.2/serialized-form.html | 202 --- javadoc/1.2/stylesheet.css | 29 - lib/nekohtml-1.9.13.jar | Bin 121981 -> 0 bytes lib/xerces-2.9.1.jar | Bin 1229125 -> 0 bytes nekohtml-relocated/pom.xml | 55 + nekohtml/pom.xml | 50 + .../org/cyberneko/html/HTMLElements.java | 0 .../org/cyberneko/html/HTMLTagBalancer.java | 0 pom.xml | 210 +++ .../boilerpipe/demo/HTMLHighlightDemo.java | 41 - .../boilerpipe/demo/ImageExtractorDemo.java | 40 - src/demo/de/l3s/boilerpipe/demo/Oneliner.java | 45 - src/demo/de/l3s/boilerpipe/demo/UsingSAX.java | 50 - src/demo/de/l3s/boilerpipe/demo/package.html | 5 - .../boilerpipe/BoilerpipeDocumentSource.java | 10 - .../l3s/boilerpipe/BoilerpipeExtractor.java | 58 - .../de/l3s/boilerpipe/document/Image.java | 92 -- .../de/l3s/boilerpipe/document/TextBlock.java | 286 ----- .../l3s/boilerpipe/document/TextDocument.java | 141 -- .../document/TextDocumentStatistics.java | 64 - .../de/l3s/boilerpipe/document/package.html | 5 - .../estimators/SimpleEstimator.java | 62 - .../extractors/ArticleExtractor.java | 68 - .../extractors/ArticleSentencesExtractor.java | 49 - .../extractors/CanolaExtractor.java | 106 -- .../extractors/CommonExtractors.java | 42 - .../extractors/DefaultExtractor.java | 50 - .../boilerpipe/extractors/ExtractorBase.java | 116 -- .../KeepEverythingWithMinKWordsExtractor.java | 48 - .../extractors/LargestContentExtractor.java | 53 - .../extractors/NumWordsRulesExtractor.java | 46 - .../de/l3s/boilerpipe/extractors/package.html | 5 - .../filters/debug/PrintDebugFilter.java | 70 - .../english/DensityRulesClassifier.java | 117 -- .../IgnoreBlocksAfterContentFilter.java | 80 -- ...IgnoreBlocksAfterContentFromEndFilter.java | 76 -- .../KeepLargestFulltextBlockFilter.java | 83 -- .../english/MinFulltextWordsFilter.java | 63 - .../english/NumWordsRulesClassifier.java | 116 -- .../english/TerminatingBlocksFinder.java | 122 -- .../boilerpipe/filters/english/package.html | 8 - .../heuristics/AddPrecedingLabelsFilter.java | 86 -- .../heuristics/ArticleMetadataFilter.java | 43 - .../heuristics/BlockProximityFusion.java | 128 -- .../filters/heuristics/ContentFusion.java | 72 -- .../DocumentTitleMatchClassifier.java | 173 --- .../ExpandTitleToContentFilter.java | 73 -- .../heuristics/KeepLargestBlockFilter.java | 124 -- .../filters/heuristics/LabelFusion.java | 91 -- ...LargeBlockSameTagLevelToContentFilter.java | 70 - .../filters/heuristics/ListAtEndFilter.java | 64 - .../SimpleBlockFusionProcessor.java | 70 - .../TrailingHeadlineToBoilerplateFilter.java | 66 - .../filters/heuristics/package.html | 5 - .../simple/BoilerplateBlockFilter.java | 71 - .../simple/LabelToBoilerplateFilter.java | 59 - .../filters/simple/LabelToContentFilter.java | 56 - .../MarkEverythingBoilerplateFilter.java | 50 - .../simple/MarkEverythingContentFilter.java | 50 - .../filters/simple/MinClauseWordsFilter.java | 113 -- .../filters/simple/MinWordsFilter.java | 56 - .../simple/SplitParagraphBlocksFilter.java | 82 -- .../simple/SurroundingToContentFilter.java | 55 - .../boilerpipe/filters/simple/package.html | 5 - .../l3s/boilerpipe/labels/DefaultLabels.java | 48 - src/main/de/l3s/boilerpipe/package.html | 5 - .../sax/BoilerpipeHTMLContentHandler.java | 454 ------- .../boilerpipe/sax/BoilerpipeHTMLParser.java | 76 -- .../boilerpipe/sax/BoilerpipeSAXInput.java | 73 -- .../l3s/boilerpipe/sax/CommonTagActions.java | 357 ------ .../boilerpipe/sax/DefaultTagActionMap.java | 86 -- .../de/l3s/boilerpipe/sax/HTMLDocument.java | 41 - .../de/l3s/boilerpipe/sax/HTMLFetcher.java | 79 -- .../l3s/boilerpipe/sax/HTMLHighlighter.java | 533 -------- .../de/l3s/boilerpipe/sax/ImageExtractor.java | 280 ---- .../l3s/boilerpipe/sax/InputSourceable.java | 12 - .../l3s/boilerpipe/sax/MarkupTagAction.java | 106 -- .../de/l3s/boilerpipe/sax/TagActionMap.java | 60 - src/main/de/l3s/boilerpipe/sax/package.html | 5 - .../l3s/boilerpipe/util/UnicodeTokenizer.java | 45 - src/main/de/l3s/boilerpipe/util/package.html | 5 - 661 files changed, 6925 insertions(+), 120355 deletions(-) delete mode 100644 .classpath create mode 100644 .gitignore delete mode 100644 .project delete mode 100644 INSTALL.txt create mode 100644 LICENSE delete mode 100644 LICENSE.txt create mode 100644 NOTICE delete mode 100644 NOTICE.txt create mode 100644 boilerpipe-common/pom.xml create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeDocumentSource.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeExtractor.java rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/BoilerpipeFilter.java (54%) rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/BoilerpipeInput.java (64%) rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/BoilerpipeProcessingException.java (59%) rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/conditions/TextBlockCondition.java (62%) create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/Image.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextBlock.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextDocument.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextDocumentStatistics.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/package-info.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/estimators/SimpleEstimator.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ArticleExtractor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ArticleSentencesExtractor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/CanolaExtractor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/CommonExtractors.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/DefaultExtractor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ExtractorBase.java rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/extractors/KeepEverythingExtractor.java (54%) create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/LargestContentExtractor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/NumWordsRulesExtractor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/package-info.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/debug/PrintDebugFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/DensityRulesClassifier.java rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/filters/english/HeuristicFilterBase.java (58%) create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/MinFulltextWordsFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/NumWordsRulesClassifier.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/TerminatingBlocksFinder.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/package-info.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ArticleMetadataFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/BlockProximityFusion.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ContentFusion.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/KeepLargestBlockFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/LabelFusion.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/LargeBlockSameTagLevelToContentFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ListAtEndFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/TrailingHeadlineToBoilerplateFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/package-info.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/BoilerplateBlockFilter.java rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/filters/simple/InvertedFilter.java (51%) create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/LabelToBoilerplateFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/LabelToContentFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MarkEverythingBoilerplateFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MarkEverythingContentFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MinClauseWordsFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MinWordsFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/SplitParagraphBlocksFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/SurroundingToContentFilter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/package-info.java rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/labels/ConditionalLabelAction.java (57%) create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/DefaultLabels.java rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/labels/LabelAction.java (57%) create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/package-info.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeHTMLContentHandler.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeHTMLParser.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeSAXInput.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/CommonTagActions.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/DefaultTagActionMap.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLDocument.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLFetcher.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLHighlighter.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/ImageExtractor.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/InputSourceable.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/MarkupTagAction.java rename {src/main/de/l3s => boilerpipe-common/src/main/java/com/kohlschutter}/boilerpipe/sax/TagAction.java (62%) create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/TagActionMap.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/package-info.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/util/UnicodeTokenizer.java create mode 100644 boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/util/package-info.java create mode 100644 boilerpipe-demo/pom.xml create mode 100644 boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/HTMLHighlightDemo.java create mode 100644 boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/ImageExtractorDemo.java create mode 100644 boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/Oneliner.java create mode 100644 boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/UsingSAX.java create mode 100644 boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/package-info.java delete mode 100644 boilerpipe.pom delete mode 100644 build.xml create mode 100644 eclipse-formatter-config.xml delete mode 100644 javadoc/1.0/allclasses-frame.html delete mode 100644 javadoc/1.0/allclasses-noframe.html delete mode 100644 javadoc/1.0/constant-values.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/BoilerpipeExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/BoilerpipeFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/BoilerpipeInput.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/BoilerpipeProcessingException.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeInput.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/TextBlock.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/TextBlockLabel.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/TextDocument.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextBlock.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextBlockLabel.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextDocument.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/package-frame.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/package-summary.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/package-tree.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/document/package-use.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/ArticleExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/DefaultExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/ExtractorBase.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/LargestContentExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/package-frame.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/package-summary.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/package-tree.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/extractors/package-use.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/package-frame.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/package-summary.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/package-tree.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/english/package-use.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-frame.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-summary.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-tree.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-use.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/InvertedFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-frame.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-summary.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-tree.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-use.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/package-frame.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/package-summary.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/package-tree.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/package-use.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/HTMLHighlighter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/package-frame.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/package-summary.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/package-tree.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/sax/package-use.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/util/UnicodeTokenizer.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/util/package-frame.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/util/package-summary.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/util/package-tree.html delete mode 100644 javadoc/1.0/de/l3s/boilerpipe/util/package-use.html delete mode 100644 javadoc/1.0/deprecated-list.html delete mode 100644 javadoc/1.0/help-doc.html delete mode 100644 javadoc/1.0/index-all.html delete mode 100644 javadoc/1.0/index.html delete mode 100644 javadoc/1.0/overview-frame.html delete mode 100644 javadoc/1.0/overview-summary.html delete mode 100644 javadoc/1.0/overview-tree.html delete mode 100644 javadoc/1.0/package-list delete mode 100644 javadoc/1.0/resources/inherit.gif delete mode 100644 javadoc/1.0/serialized-form.html delete mode 100644 javadoc/1.0/stylesheet.css delete mode 100644 javadoc/1.1/allclasses-frame.html delete mode 100644 javadoc/1.1/allclasses-noframe.html delete mode 100644 javadoc/1.1/constant-values.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/BoilerpipeExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/BoilerpipeFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/BoilerpipeInput.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/BoilerpipeProcessingException.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeInput.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/conditions/TextBlockCondition.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/conditions/class-use/TextBlockCondition.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/conditions/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/conditions/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/conditions/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/conditions/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/TextBlock.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/TextDocument.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/TextDocumentStatistics.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextBlock.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextDocument.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextDocumentStatistics.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/document/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/estimators/SimpleEstimator.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/estimators/class-use/SimpleEstimator.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/estimators/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/estimators/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/estimators/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/estimators/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/ArticleExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/CanolaExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/CommonExtractors.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/DefaultExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/ExtractorBase.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/LargestContentExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/CanolaExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/CommonExtractors.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/extractors/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/english/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/InvertedFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/LabelToBoilerplateFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/LabelToContentFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/ConditionalLabelAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/DefaultLabels.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/LabelAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/class-use/ConditionalLabelAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/class-use/DefaultLabels.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/class-use/LabelAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/labels/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.BlockTagLabelAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.Chained.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.InlineTagLabelAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/DefaultTagActionMap.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/HTMLDocument.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/HTMLFetcher.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/HTMLHighlighter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/InputSourceable.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/TagAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/TagActionMap.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.BlockTagLabelAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.Chained.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.InlineTagLabelAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/DefaultTagActionMap.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLDocument.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLFetcher.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/InputSourceable.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/TagAction.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/class-use/TagActionMap.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/sax/package-use.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/util/UnicodeTokenizer.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/util/package-frame.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/util/package-summary.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/util/package-tree.html delete mode 100644 javadoc/1.1/de/l3s/boilerpipe/util/package-use.html delete mode 100644 javadoc/1.1/deprecated-list.html delete mode 100644 javadoc/1.1/help-doc.html delete mode 100644 javadoc/1.1/index-all.html delete mode 100644 javadoc/1.1/index.html delete mode 100644 javadoc/1.1/overview-frame.html delete mode 100644 javadoc/1.1/overview-summary.html delete mode 100644 javadoc/1.1/overview-tree.html delete mode 100644 javadoc/1.1/package-list delete mode 100644 javadoc/1.1/resources/inherit.gif delete mode 100644 javadoc/1.1/serialized-form.html delete mode 100644 javadoc/1.1/stylesheet.css delete mode 100644 javadoc/1.2/allclasses-frame.html delete mode 100644 javadoc/1.2/allclasses-noframe.html delete mode 100644 javadoc/1.2/constant-values.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/BoilerpipeDocumentSource.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/BoilerpipeExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/BoilerpipeFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/BoilerpipeInput.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/BoilerpipeProcessingException.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/boilers/StructureAwareBoiler.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/boilers/class-use/StructureAwareBoiler.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/boilers/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/boilers/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/boilers/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/boilers/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeDocumentSource.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeInput.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/conditions/TextBlockCondition.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/conditions/class-use/TextBlockCondition.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/conditions/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/conditions/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/conditions/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/conditions/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/TextBlock.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/TextDocument.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/TextDocumentStatistics.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextBlock.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextDocument.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextDocumentStatistics.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/document/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/estimators/SimpleEstimator.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/estimators/class-use/SimpleEstimator.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/estimators/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/estimators/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/estimators/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/estimators/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/ArticleExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/CanolaExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/CommonExtractors.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/DefaultExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/ExtractorBase.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/LargestContentExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/LargestContentExtractor2.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/CanolaExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/CommonExtractors.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor2.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/extractors/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/CopyOfTerminatingBlocksFinder.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/CopyOfTerminatingBlocksFinder.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFromEndFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/english/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ArticleMetadataFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ContentFusion.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/LabelFusion.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/AddPrecedingLabelsFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ArticleMetadataFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ContentFusion.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/LabelFusion.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/InvertedFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/SurroundingToContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/LabelToBoilerplateFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/LabelToContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/SurroundingToContentFilter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/ConditionalLabelAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/DefaultLabels.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/LabelAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/class-use/ConditionalLabelAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/class-use/DefaultLabels.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/class-use/LabelAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/labels/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.BlockTagLabelAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.Chained.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.InlineTagLabelAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/DefaultTagActionMap.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/HTMLDocument.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/HTMLFetcher.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/HTMLHighlighter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/InputSourceable.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/MarkupTagAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/TagAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/TagActionMap.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.BlockTagLabelAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.Chained.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.InlineTagLabelAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/DefaultTagActionMap.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLDocument.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLFetcher.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/InputSourceable.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/MarkupTagAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/TagAction.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/class-use/TagActionMap.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/sax/package-use.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/util/UnicodeTokenizer.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/util/package-frame.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/util/package-summary.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/util/package-tree.html delete mode 100644 javadoc/1.2/de/l3s/boilerpipe/util/package-use.html delete mode 100644 javadoc/1.2/deprecated-list.html delete mode 100644 javadoc/1.2/help-doc.html delete mode 100644 javadoc/1.2/index-all.html delete mode 100644 javadoc/1.2/index.html delete mode 100644 javadoc/1.2/overview-frame.html delete mode 100644 javadoc/1.2/overview-summary.html delete mode 100644 javadoc/1.2/overview-tree.html delete mode 100644 javadoc/1.2/package-list delete mode 100644 javadoc/1.2/resources/inherit.gif delete mode 100644 javadoc/1.2/serialized-form.html delete mode 100644 javadoc/1.2/stylesheet.css delete mode 100644 lib/nekohtml-1.9.13.jar delete mode 100644 lib/xerces-2.9.1.jar create mode 100644 nekohtml-relocated/pom.xml create mode 100644 nekohtml/pom.xml rename {src/main => nekohtml/src/main/java}/org/cyberneko/html/HTMLElements.java (100%) rename {src/main => nekohtml/src/main/java}/org/cyberneko/html/HTMLTagBalancer.java (100%) create mode 100644 pom.xml delete mode 100644 src/demo/de/l3s/boilerpipe/demo/HTMLHighlightDemo.java delete mode 100644 src/demo/de/l3s/boilerpipe/demo/ImageExtractorDemo.java delete mode 100644 src/demo/de/l3s/boilerpipe/demo/Oneliner.java delete mode 100644 src/demo/de/l3s/boilerpipe/demo/UsingSAX.java delete mode 100644 src/demo/de/l3s/boilerpipe/demo/package.html delete mode 100644 src/main/de/l3s/boilerpipe/BoilerpipeDocumentSource.java delete mode 100644 src/main/de/l3s/boilerpipe/BoilerpipeExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/document/Image.java delete mode 100644 src/main/de/l3s/boilerpipe/document/TextBlock.java delete mode 100644 src/main/de/l3s/boilerpipe/document/TextDocument.java delete mode 100644 src/main/de/l3s/boilerpipe/document/TextDocumentStatistics.java delete mode 100644 src/main/de/l3s/boilerpipe/document/package.html delete mode 100644 src/main/de/l3s/boilerpipe/estimators/SimpleEstimator.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/ArticleExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/CanolaExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/CommonExtractors.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/DefaultExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/ExtractorBase.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/LargestContentExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/extractors/package.html delete mode 100644 src/main/de/l3s/boilerpipe/filters/debug/PrintDebugFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/english/package.html delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/ArticleMetadataFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/ContentFusion.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/LabelFusion.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/LargeBlockSameTagLevelToContentFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/ListAtEndFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/TrailingHeadlineToBoilerplateFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/heuristics/package.html delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/MarkEverythingBoilerplateFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/MinWordsFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/SurroundingToContentFilter.java delete mode 100644 src/main/de/l3s/boilerpipe/filters/simple/package.html delete mode 100644 src/main/de/l3s/boilerpipe/labels/DefaultLabels.java delete mode 100644 src/main/de/l3s/boilerpipe/package.html delete mode 100644 src/main/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/CommonTagActions.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/DefaultTagActionMap.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/HTMLDocument.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/HTMLFetcher.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/HTMLHighlighter.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/ImageExtractor.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/InputSourceable.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/MarkupTagAction.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/TagActionMap.java delete mode 100644 src/main/de/l3s/boilerpipe/sax/package.html delete mode 100644 src/main/de/l3s/boilerpipe/util/UnicodeTokenizer.java delete mode 100644 src/main/de/l3s/boilerpipe/util/package.html diff --git a/.classpath b/.classpath deleted file mode 100644 index 9b16283..0000000 --- a/.classpath +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ed3b1b --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.project +.settings +.classpath +target +.DS_Store +dependency-reduced-pom.xml diff --git a/.project b/.project deleted file mode 100644 index a9cfc58..0000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - boilerpipe-core - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/INSTALL.txt b/INSTALL.txt deleted file mode 100644 index 89e8172..0000000 --- a/INSTALL.txt +++ /dev/null @@ -1,2 +0,0 @@ -See http://code.google.com/p/boilerpipe/wiki/QuickStart for installation -instructions. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..feb4ed3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,15 @@ +boilerpipe + +Copyright (c) 2009, 2014 Christian Kohlschütter + +The author licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index f2ae202..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,18 +0,0 @@ - - boilerpipe - - Copyright (c) 2009-2011 Christian Kohlschütter - - The author licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - \ No newline at end of file diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..feb4ed3 --- /dev/null +++ b/NOTICE @@ -0,0 +1,15 @@ +boilerpipe + +Copyright (c) 2009, 2014 Christian Kohlschütter + +The author licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/NOTICE.txt b/NOTICE.txt deleted file mode 100644 index 1bb7527..0000000 --- a/NOTICE.txt +++ /dev/null @@ -1,24 +0,0 @@ - - boilerpipe - - Copyright (c) 2009-2011 Christian Kohlschütter - - The author licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - This software contains the following parts which are also provided - under the Apache License 2.0 (http://apache.org/licenses/LICENSE-2.0.txt): - - - NekoHTML - - Xerces - diff --git a/README.md b/README.md index 67a3216..3f4e57c 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,9 @@ boilerpipe ========== Boilerplate Removal and Fulltext Extraction from HTML pages + +NOTE: This is a work-in-progress transmit from Google Code. + +The latest stable version of boilerpipe is available at [https://code.google.com/p/boilerpipe](). + + diff --git a/boilerpipe-common/pom.xml b/boilerpipe-common/pom.xml new file mode 100644 index 0000000..9d328be --- /dev/null +++ b/boilerpipe-common/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + boilerpipe-common + jar + + com.kohlschutter.boilerpipe + boilerpipe-parent + 2.0-SNAPSHOT + + boilerpipe-common + + ${project.parent.basedir} + + + + xerces + xercesImpl + 2.9.1 + + + + com.kohlschutter.boilerpipe + nekohtml-relocated + 1.9.13 + + + diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeDocumentSource.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeDocumentSource.java new file mode 100644 index 0000000..9b11417 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeDocumentSource.java @@ -0,0 +1,27 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe; + +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Something that can be represented as a {@link TextDocument}. + */ +public interface BoilerpipeDocumentSource { + TextDocument toTextDocument() throws BoilerpipeProcessingException; +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeExtractor.java new file mode 100644 index 0000000..3aba4e8 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeExtractor.java @@ -0,0 +1,65 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe; + +import java.io.Reader; + +import org.xml.sax.InputSource; + +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Describes a complete filter pipeline. + */ +public interface BoilerpipeExtractor extends BoilerpipeFilter { + /** + * Extracts text from the HTML code given as a String. + * + * @param html The HTML code as a String. + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(final String html) throws BoilerpipeProcessingException; + + /** + * Extracts text from the HTML code available from the given {@link InputSource}. + * + * @param is The InputSource containing the HTML + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(final InputSource is) throws BoilerpipeProcessingException; + + /** + * Extracts text from the HTML code available from the given {@link Reader}. + * + * @param r The Reader containing the HTML + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(final Reader r) throws BoilerpipeProcessingException; + + /** + * Extracts text from the given {@link TextDocument} object. + * + * @param doc The {@link TextDocument}. + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(TextDocument doc) throws BoilerpipeProcessingException; +} diff --git a/src/main/de/l3s/boilerpipe/BoilerpipeFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeFilter.java similarity index 54% rename from src/main/de/l3s/boilerpipe/BoilerpipeFilter.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeFilter.java index 8a15f77..115b90e 100644 --- a/src/main/de/l3s/boilerpipe/BoilerpipeFilter.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeFilter.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,26 +15,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe; +package com.kohlschutter.boilerpipe; -import de.l3s.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.document.TextDocument; /** - * A generic {@link BoilerpipeFilter}. Takes a {@link TextDocument} and - * processes it somehow. - * - * @author Christian Kohlschütter + * A generic {@link BoilerpipeFilter}. Takes a {@link TextDocument} and processes it somehow. */ public interface BoilerpipeFilter { - /** - * Processes the given document doc. - * - * @param doc - * The {@link TextDocument} that is to be processed. - * @return true if changes have been made to the - * {@link TextDocument}. - * @throws BoilerpipeProcessingException - */ - boolean process(final TextDocument doc) - throws BoilerpipeProcessingException; + /** + * Processes the given document doc. + * + * @param doc The {@link TextDocument} that is to be processed. + * @return true if changes have been made to the {@link TextDocument}. + * @throws BoilerpipeProcessingException + */ + boolean process(final TextDocument doc) throws BoilerpipeProcessingException; } diff --git a/src/main/de/l3s/boilerpipe/BoilerpipeInput.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeInput.java similarity index 64% rename from src/main/de/l3s/boilerpipe/BoilerpipeInput.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeInput.java index bcb603d..bc15d3d 100644 --- a/src/main/de/l3s/boilerpipe/BoilerpipeInput.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeInput.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,21 +15,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe; +package com.kohlschutter.boilerpipe; -import de.l3s.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.document.TextDocument; /** * A source that returns {@link TextDocument}s. - * - * @author Christian Kohlschütter */ public interface BoilerpipeInput { - /** - * Returns (somehow) a {@link TextDocument}. - * - * @return A {@link TextDocument}. - * @throws BoilerpipeProcessingException - */ - TextDocument getTextDocument() throws BoilerpipeProcessingException; + /** + * Returns (somehow) a {@link TextDocument}. + * + * @return A {@link TextDocument}. + * @throws BoilerpipeProcessingException + */ + TextDocument getTextDocument() throws BoilerpipeProcessingException; } diff --git a/src/main/de/l3s/boilerpipe/BoilerpipeProcessingException.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeProcessingException.java similarity index 59% rename from src/main/de/l3s/boilerpipe/BoilerpipeProcessingException.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeProcessingException.java index f3a9cc4..7bcd023 100644 --- a/src/main/de/l3s/boilerpipe/BoilerpipeProcessingException.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/BoilerpipeProcessingException.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,29 +15,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe; +package com.kohlschutter.boilerpipe; /** * Exception for signaling failure in the processing pipeline. - * - * @author Christian Kohlschütter */ public class BoilerpipeProcessingException extends Exception { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - public BoilerpipeProcessingException() { - super(); - } + public BoilerpipeProcessingException() { + super(); + } - public BoilerpipeProcessingException(String message, Throwable cause) { - super(message, cause); - } + public BoilerpipeProcessingException(String message, Throwable cause) { + super(message, cause); + } - public BoilerpipeProcessingException(String message) { - super(message); - } + public BoilerpipeProcessingException(String message) { + super(message); + } - public BoilerpipeProcessingException(Throwable cause) { - super(cause); - } + public BoilerpipeProcessingException(Throwable cause) { + super(cause); + } } diff --git a/src/main/de/l3s/boilerpipe/conditions/TextBlockCondition.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/conditions/TextBlockCondition.java similarity index 62% rename from src/main/de/l3s/boilerpipe/conditions/TextBlockCondition.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/conditions/TextBlockCondition.java index df92f10..3bccb55 100644 --- a/src/main/de/l3s/boilerpipe/conditions/TextBlockCondition.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/conditions/TextBlockCondition.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009, 2010 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,23 +15,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe.conditions; +package com.kohlschutter.boilerpipe.conditions; -import de.l3s.boilerpipe.document.TextBlock; -import de.l3s.boilerpipe.labels.ConditionalLabelAction; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.labels.ConditionalLabelAction; /** * Evaluates whether a given {@link TextBlock} meets a certain condition. - * Useful in combination with {@link ConditionalLabelAction}. * - * @author Christian Kohlschuetter + * Useful in combination with {@link ConditionalLabelAction}. */ public interface TextBlockCondition { - /** - * Returns true iff the given {@link TextBlock} tb meets the defined condition. - * - * @param tb - * @return iff the condition is met. - */ - boolean meetsCondition(final TextBlock tb); + /** + * Returns true iff the given {@link TextBlock} tb meets the defined condition. + * + * @param tb + * @return iff the condition is met. + */ + boolean meetsCondition(final TextBlock tb); } diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/Image.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/Image.java new file mode 100644 index 0000000..9eeda4e --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/Image.java @@ -0,0 +1,108 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.document; + +/** + * Represents an Image resource that is contained in the document. + * + * Any of the attributes may be null, except for "src". + */ +public class Image implements Comparable { + private final String src; + private final String width; + private final String height; + private final String alt; + private final int area; + + public Image(final String src, final String width, final String height, final String alt) { + this.src = src; + if (src == null) { + throw new NullPointerException("src attribute must not be null"); + } + this.width = nullTrim(width); + this.height = nullTrim(height); + this.alt = nullTrim(alt); + + if (width != null && height != null) { + int a; + try { + a = Integer.parseInt(width) * Integer.parseInt(height); + } catch (NumberFormatException e) { + a = -1; + } + this.area = a; + } else { + this.area = -1; + } + } + + public String getSrc() { + return src; + } + + public String getWidth() { + return width; + } + + public String getHeight() { + return height; + } + + public String getAlt() { + return alt; + } + + private static String nullTrim(String s) { + if (s == null) { + return null; + } + s = s.trim(); + if (s.length() == 0) { + return null; + } + return s; + } + + /** + * Returns the image's area (specified by width * height), or -1 if width/height weren't both + * specified or could not be parsed. + * + * @return + */ + public int getArea() { + return area; + } + + public String toString() { + return src + "\twidth=" + width + "\theight=" + height + "\talt=" + alt + "\tarea=" + area; + } + + @Override + public int compareTo(Image o) { + if (o == this) { + return 0; + } + if (area > o.area) { + return -1; + } else if (area == o.area) { + return src.compareTo(o.src); + } else { + return 1; + } + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextBlock.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextBlock.java new file mode 100644 index 0000000..1e94070 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextBlock.java @@ -0,0 +1,283 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.document; + +import java.util.BitSet; +import java.util.HashSet; +import java.util.Set; + +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Describes a block of text. + * + * A block can be an "atomic" text element (i.e., a sequence of text that is not interrupted by any + * HTML markup) or a compound of such atomic elements. + */ +public class TextBlock implements Cloneable { + boolean isContent = false; + private CharSequence text; + Set labels = null; + + int offsetBlocksStart; + int offsetBlocksEnd; + + int numWords; + int numWordsInAnchorText; + int numWordsInWrappedLines; + int numWrappedLines; + float textDensity; + float linkDensity; + + BitSet containedTextElements; + + private int numFullTextWords = 0; + private int tagLevel; + + private static final BitSet EMPTY_BITSET = new BitSet(); + public static final TextBlock EMPTY_START = new TextBlock("", EMPTY_BITSET, 0, 0, 0, 0, -1); + public static final TextBlock EMPTY_END = new TextBlock("", EMPTY_BITSET, 0, 0, 0, 0, + Integer.MAX_VALUE); + + public TextBlock(final String text) { + this(text, null, 0, 0, 0, 0, 0); + } + + public TextBlock(final String text, final BitSet containedTextElements, final int numWords, + final int numWordsInAnchorText, final int numWordsInWrappedLines, final int numWrappedLines, + final int offsetBlocks) { + this.text = text; + this.containedTextElements = containedTextElements; + this.numWords = numWords; + this.numWordsInAnchorText = numWordsInAnchorText; + this.numWordsInWrappedLines = numWordsInWrappedLines; + this.numWrappedLines = numWrappedLines; + this.offsetBlocksStart = offsetBlocks; + this.offsetBlocksEnd = offsetBlocks; + initDensities(); + } + + public boolean isContent() { + return isContent; + } + + public boolean setIsContent(boolean isContent) { + if (isContent != this.isContent) { + this.isContent = isContent; + return true; + } else { + return false; + } + } + + public String getText() { + return text.toString(); + } + + public int getNumWords() { + return numWords; + } + + public int getNumWordsInAnchorText() { + return numWordsInAnchorText; + } + + public float getTextDensity() { + return textDensity; + } + + public float getLinkDensity() { + return linkDensity; + } + + public void mergeNext(final TextBlock other) { + if (!(text instanceof StringBuilder)) { + text = new StringBuilder(text); + } + StringBuilder sb = (StringBuilder) text; + sb.append('\n'); + sb.append(other.text); + + numWords += other.numWords; + numWordsInAnchorText += other.numWordsInAnchorText; + + numWordsInWrappedLines += other.numWordsInWrappedLines; + numWrappedLines += other.numWrappedLines; + + offsetBlocksStart = Math.min(offsetBlocksStart, other.offsetBlocksStart); + offsetBlocksEnd = Math.max(offsetBlocksEnd, other.offsetBlocksEnd); + + initDensities(); + + this.isContent |= other.isContent; + + if (containedTextElements == null) { + containedTextElements = (BitSet) other.containedTextElements.clone(); + } else { + containedTextElements.or(other.containedTextElements); + } + + numFullTextWords += other.numFullTextWords; + + if (other.labels != null) { + if (labels == null) { + labels = new HashSet(other.labels); + } else { + labels.addAll(other.labels); + } + } + + tagLevel = Math.min(tagLevel, other.tagLevel); + } + + private void initDensities() { + if (numWordsInWrappedLines == 0) { + numWordsInWrappedLines = numWords; + numWrappedLines = 1; + } + textDensity = numWordsInWrappedLines / (float) numWrappedLines; + linkDensity = numWords == 0 ? 0 : numWordsInAnchorText / (float) numWords; + } + + public int getOffsetBlocksStart() { + return offsetBlocksStart; + } + + public int getOffsetBlocksEnd() { + return offsetBlocksEnd; + } + + public String toString() { + return "[" + offsetBlocksStart + "-" + offsetBlocksEnd + ";tl=" + tagLevel + "; nw=" + numWords + + ";nwl=" + numWrappedLines + ";ld=" + linkDensity + "]\t" + + (isContent ? "CONTENT" : "boilerplate") + "," + labels + "\n" + getText(); + } + + /** + * Adds an arbitrary String label to this {@link TextBlock}. + * + * @param label The label + * @see DefaultLabels + */ + public void addLabel(final String label) { + if (labels == null) { + labels = new HashSet(2); + } + labels.add(label); + } + + /** + * Checks whether this TextBlock has the given label. + * + * @param label The label + * @return true if this block is marked by the given label. + */ + public boolean hasLabel(final String label) { + return labels != null && labels.contains(label); + } + + public boolean removeLabel(final String label) { + return labels != null && labels.remove(label); + } + + /** + * Returns the labels associated to this TextBlock, or null if no such labels exist. + * + * NOTE: The returned instance is the one used directly in TextBlock. You have full access to the + * data structure. However it is recommended to use the label-specific methods in + * {@link TextBlock} whenever possible. + * + * @return Returns the set of labels, or null if no labels was added yet. + */ + public Set getLabels() { + return labels; + } + + /** + * Adds a set of labels to this {@link TextBlock}. null-references are silently + * ignored. + * + * @param l The labels to be added. + */ + public void addLabels(final Set l) { + if (l == null) { + return; + } + if (this.labels == null) { + this.labels = new HashSet(l); + } else { + this.labels.addAll(l); + } + } + + /** + * Adds a set of labels to this {@link TextBlock}. null-references are silently + * ignored. + * + * @param l The labels to be added. + */ + public void addLabels(final String... l) { + if (l == null) { + return; + } + if (this.labels == null) { + this.labels = new HashSet(); + } + for (final String label : l) { + this.labels.add(label); + } + } + + /** + * Returns the containedTextElements BitSet, or null. + * + * @return + */ + public BitSet getContainedTextElements() { + return containedTextElements; + } + + @Override + protected TextBlock clone() { + final TextBlock clone; + try { + clone = (TextBlock) super.clone(); + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e); + } + if (text != null && !(text instanceof String)) { + clone.text = new StringBuilder(text); + } + if (labels != null && !labels.isEmpty()) { + clone.labels = new HashSet(labels); + } + if (containedTextElements != null) { + clone.containedTextElements = (BitSet) containedTextElements.clone(); + } + + return clone; + } + + public int getTagLevel() { + return tagLevel; + } + + public void setTagLevel(int tagLevel) { + this.tagLevel = tagLevel; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextDocument.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextDocument.java new file mode 100644 index 0000000..5bc60c0 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextDocument.java @@ -0,0 +1,132 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.document; + +import java.util.ArrayList; +import java.util.List; + +/** + * A text document, consisting of one or more {@link TextBlock}s. + */ +public class TextDocument implements Cloneable { + final List textBlocks; + String title; + + /** + * Creates a new {@link TextDocument} with given {@link TextBlock}s, and no title. + * + * @param textBlocks The text blocks of this document. + */ + public TextDocument(final List textBlocks) { + this(null, textBlocks); + } + + /** + * Creates a new {@link TextDocument} with given {@link TextBlock}s and given title. + * + * @param title The "main" title for this text document. + * @param textBlocks The text blocks of this document. + */ + public TextDocument(final String title, final List textBlocks) { + this.title = title; + this.textBlocks = textBlocks; + } + + /** + * Returns the {@link TextBlock}s of this document. + * + * @return A list of {@link TextBlock}s, in sequential order of appearance. + */ + public List getTextBlocks() { + return textBlocks; + } + + /** + * Returns the "main" title for this document, or null if no such title has ben set. + * + * @return The "main" title. + */ + public String getTitle() { + return title; + } + + /** + * Updates the "main" title for this document. + * + * @param title + */ + public void setTitle(final String title) { + this.title = title; + } + + /** + * Returns the {@link TextDocument}'s content. + * + * @return The content text. + */ + public String getContent() { + return getText(true, false); + } + + /** + * Returns the {@link TextDocument}'s content, non-content or both + * + * @param includeContent Whether to include TextBlocks marked as "content". + * @param includeNonContent Whether to include TextBlocks marked as "non-content". + * @return The text. + */ + public String getText(boolean includeContent, boolean includeNonContent) { + StringBuilder sb = new StringBuilder(); + LOOP : for (TextBlock block : getTextBlocks()) { + if (block.isContent()) { + if (!includeContent) { + continue LOOP; + } + } else { + if (!includeNonContent) { + continue LOOP; + } + } + sb.append(block.getText()); + sb.append('\n'); + } + return sb.toString(); + } + + /** + * Returns detailed debugging information about the contained {@link TextBlock}s. + * + * @return Debug information. + */ + public String debugString() { + StringBuilder sb = new StringBuilder(); + for (TextBlock tb : getTextBlocks()) { + sb.append(tb.toString()); + sb.append('\n'); + } + return sb.toString(); + } + + public TextDocument clone() { + final List list = new ArrayList(textBlocks.size()); + for (TextBlock tb : textBlocks) { + list.add(tb.clone()); + } + return new TextDocument(title, list); + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextDocumentStatistics.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextDocumentStatistics.java new file mode 100644 index 0000000..467cf60 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/TextDocumentStatistics.java @@ -0,0 +1,62 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.document; + +/** + * Provides shallow statistics on a given {@link TextDocument} + */ +public final class TextDocumentStatistics { + private int numWords = 0; + private int numBlocks = 0; + + /** + * Computes statistics on a given {@link TextDocument}. + * + * @param doc The {@link TextDocument}. + * @param contentOnly if true then o + */ + public TextDocumentStatistics(final TextDocument doc, final boolean contentOnly) { + for (TextBlock tb : doc.getTextBlocks()) { + if (contentOnly && !tb.isContent()) { + continue; + } + + numWords += tb.getNumWords(); + numBlocks++; + } + } + + /** + * Returns the average number of words at block-level (= overall number of words divided by the + * number of blocks). + * + * @return Average + */ + public float avgNumWords() { + return numWords / (float) numBlocks; + } + + /** + * Returns the overall number of words in all blocks. + * + * @return Sum + */ + public int getNumWords() { + return numWords; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/package-info.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/package-info.java new file mode 100644 index 0000000..7043bd0 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/document/package-info.java @@ -0,0 +1,4 @@ +/** + * The Boilerpipe document model. + */ +package com.kohlschutter.boilerpipe.document; diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/estimators/SimpleEstimator.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/estimators/SimpleEstimator.java new file mode 100644 index 0000000..f090feb --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/estimators/SimpleEstimator.java @@ -0,0 +1,61 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.estimators; + +import com.kohlschutter.boilerpipe.BoilerpipeExtractor; +import com.kohlschutter.boilerpipe.document.TextDocumentStatistics; +import com.kohlschutter.boilerpipe.extractors.ArticleExtractor; +import com.kohlschutter.boilerpipe.extractors.DefaultExtractor; + +/** + * Estimates the "goodness" of a {@link BoilerpipeExtractor} on a given document. + */ +public final class SimpleEstimator { + + /** + * Returns the singleton instance of {@link SimpleEstimator} + */ + public static final SimpleEstimator INSTANCE = new SimpleEstimator(); + + private SimpleEstimator() { + } + + /** + * Given the statistics of the document before and after applying the {@link BoilerpipeExtractor}, + * can we regard the extraction quality (too) low? + * + * Works well with {@link DefaultExtractor}, {@link ArticleExtractor} and others. + * + * @param dsBefore + * @param dsAfter + * @return true if low quality is to be expected. + */ + public boolean isLowQuality(final TextDocumentStatistics dsBefore, + final TextDocumentStatistics dsAfter) { + if (dsBefore.getNumWords() < 90 || dsAfter.getNumWords() < 70) { + return true; + } + + if (dsAfter.avgNumWords() < 25) { + return true; + } + + return false; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ArticleExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ArticleExtractor.java new file mode 100644 index 0000000..fb207f3 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ArticleExtractor.java @@ -0,0 +1,64 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter; +import com.kohlschutter.boilerpipe.filters.english.NumWordsRulesClassifier; +import com.kohlschutter.boilerpipe.filters.english.TerminatingBlocksFinder; +import com.kohlschutter.boilerpipe.filters.heuristics.BlockProximityFusion; +import com.kohlschutter.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier; +import com.kohlschutter.boilerpipe.filters.heuristics.ExpandTitleToContentFilter; +import com.kohlschutter.boilerpipe.filters.heuristics.KeepLargestBlockFilter; +import com.kohlschutter.boilerpipe.filters.heuristics.LargeBlockSameTagLevelToContentFilter; +import com.kohlschutter.boilerpipe.filters.heuristics.ListAtEndFilter; +import com.kohlschutter.boilerpipe.filters.heuristics.TrailingHeadlineToBoilerplateFilter; +import com.kohlschutter.boilerpipe.filters.simple.BoilerplateBlockFilter; + +/** + * A full-text extractor which is tuned towards news articles. In this scenario it achieves higher + * accuracy than {@link DefaultExtractor}. + */ +public final class ArticleExtractor extends ExtractorBase { + public static final ArticleExtractor INSTANCE = new ArticleExtractor(); + + /** + * Returns the singleton instance for {@link ArticleExtractor}. + */ + public static ArticleExtractor getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + return + + TerminatingBlocksFinder.INSTANCE.process(doc) + | new DocumentTitleMatchClassifier(doc.getTitle()).process(doc) + | NumWordsRulesClassifier.INSTANCE.process(doc) + | IgnoreBlocksAfterContentFilter.DEFAULT_INSTANCE.process(doc) + | TrailingHeadlineToBoilerplateFilter.INSTANCE.process(doc) + | BlockProximityFusion.MAX_DISTANCE_1.process(doc) + | BoilerplateBlockFilter.INSTANCE_KEEP_TITLE.process(doc) + | BlockProximityFusion.MAX_DISTANCE_1_CONTENT_ONLY_SAME_TAGLEVEL.process(doc) + | KeepLargestBlockFilter.INSTANCE_EXPAND_TO_SAME_TAGLEVEL_MIN_WORDS.process(doc) + | ExpandTitleToContentFilter.INSTANCE.process(doc) + | LargeBlockSameTagLevelToContentFilter.INSTANCE.process(doc) + | ListAtEndFilter.INSTANCE.process(doc); + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ArticleSentencesExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ArticleSentencesExtractor.java new file mode 100644 index 0000000..78a74f0 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ArticleSentencesExtractor.java @@ -0,0 +1,45 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.filters.simple.MinClauseWordsFilter; +import com.kohlschutter.boilerpipe.filters.simple.SplitParagraphBlocksFilter; + +/** + * A full-text extractor which is tuned towards extracting sentences from news articles. + */ +public final class ArticleSentencesExtractor extends ExtractorBase { + public static final ArticleSentencesExtractor INSTANCE = new ArticleSentencesExtractor(); + + /** + * Returns the singleton instance for {@link ArticleSentencesExtractor}. + */ + public static ArticleSentencesExtractor getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + return + + ArticleExtractor.INSTANCE.process(doc) | SplitParagraphBlocksFilter.INSTANCE.process(doc) + | MinClauseWordsFilter.INSTANCE.process(doc); + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/CanolaExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/CanolaExtractor.java new file mode 100644 index 0000000..a8a3149 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/CanolaExtractor.java @@ -0,0 +1,94 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import java.util.List; +import java.util.ListIterator; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.estimators.SimpleEstimator; + +/** + * A full-text extractor trained on krdwrd Canola . Works well with + * {@link SimpleEstimator}, too. + */ +public class CanolaExtractor extends ExtractorBase { + public static final CanolaExtractor INSTANCE = new CanolaExtractor(); + + /** + * Returns the singleton instance for {@link CanolaExtractor}. + */ + public static CanolaExtractor getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + + return CLASSIFIER.process(doc); + } + + /** + * The actual classifier, exposed. + */ + public static final BoilerpipeFilter CLASSIFIER = new BoilerpipeFilter() { + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + boolean hasChanges = false; + + ListIterator it = textBlocks.listIterator(); + if (!it.hasNext()) { + return false; + } + TextBlock prevBlock = TextBlock.EMPTY_START; + TextBlock currentBlock = it.next(); + TextBlock nextBlock = it.hasNext() ? it.next() : TextBlock.EMPTY_START; + + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + + if (nextBlock != TextBlock.EMPTY_START) { + while (it.hasNext()) { + prevBlock = currentBlock; + currentBlock = nextBlock; + nextBlock = it.next(); + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + } + prevBlock = currentBlock; + currentBlock = nextBlock; + nextBlock = TextBlock.EMPTY_START; + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + } + + return hasChanges; + } + + protected boolean classify(final TextBlock prev, final TextBlock curr, final TextBlock next) { + final boolean isContent = + (curr.getLinkDensity() > 0 && next.getNumWords() > 11) + || (curr.getNumWords() > 19 || (next.getNumWords() > 6 && next.getLinkDensity() == 0 + && prev.getLinkDensity() == 0 && (curr.getNumWords() > 6 + || prev.getNumWords() > 7 || next.getNumWords() > 19))); + + return curr.setIsContent(isContent); + } + }; +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/CommonExtractors.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/CommonExtractors.java new file mode 100644 index 0000000..e06afa9 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/CommonExtractors.java @@ -0,0 +1,56 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import com.kohlschutter.boilerpipe.BoilerpipeExtractor; + +/** + * Provides quick access to common {@link BoilerpipeExtractor}s. + */ +public final class CommonExtractors { + private CommonExtractors() { + } + + /** + * Works very well for most types of Article-like HTML. + */ + public static final ArticleExtractor ARTICLE_EXTRACTOR = ArticleExtractor.INSTANCE; + + /** + * Usually worse than {@link ArticleExtractor}, but simpler/no heuristics. + */ + public static final DefaultExtractor DEFAULT_EXTRACTOR = DefaultExtractor.INSTANCE; + + /** + * Like {@link DefaultExtractor}, but keeps the largest text block only. + */ + public static final LargestContentExtractor LARGEST_CONTENT_EXTRACTOR = + LargestContentExtractor.INSTANCE; + + /** + * Trained on krdwrd Canola (different definition of "boilerplate"). You may give it a try. + */ + public static final CanolaExtractor CANOLA_EXTRACTOR = CanolaExtractor.INSTANCE; + + /** + * Dummy Extractor; should return the input text. Use this to double-check that your problem is + * within a particular {@link BoilerpipeExtractor}, or somewhere else. + */ + public static final KeepEverythingExtractor KEEP_EVERYTHING_EXTRACTOR = + KeepEverythingExtractor.INSTANCE; +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/DefaultExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/DefaultExtractor.java new file mode 100644 index 0000000..bb1cd79 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/DefaultExtractor.java @@ -0,0 +1,47 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.filters.english.DensityRulesClassifier; +import com.kohlschutter.boilerpipe.filters.heuristics.BlockProximityFusion; +import com.kohlschutter.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor; + +/** + * A quite generic full-text extractor. + */ +public class DefaultExtractor extends ExtractorBase { + public static final DefaultExtractor INSTANCE = new DefaultExtractor(); + + /** + * Returns the singleton instance for {@link DefaultExtractor}. + */ + public static DefaultExtractor getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + + return + + SimpleBlockFusionProcessor.INSTANCE.process(doc) + | BlockProximityFusion.MAX_DISTANCE_1.process(doc) + | DensityRulesClassifier.INSTANCE.process(doc); + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ExtractorBase.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ExtractorBase.java new file mode 100644 index 0000000..07a4f8d --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/ExtractorBase.java @@ -0,0 +1,110 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.net.URL; + +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import com.kohlschutter.boilerpipe.BoilerpipeExtractor; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.sax.BoilerpipeSAXInput; +import com.kohlschutter.boilerpipe.sax.HTMLFetcher; + +/** + * The base class of Extractors. Also provides some helper methods to quickly retrieve the text that + * remained after processing. + */ +public abstract class ExtractorBase implements BoilerpipeExtractor { + + /** + * Extracts text from the HTML code given as a String. + * + * @param html The HTML code as a String. + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(final String html) throws BoilerpipeProcessingException { + try { + return getText(new BoilerpipeSAXInput(new InputSource(new StringReader(html))) + .getTextDocument()); + } catch (SAXException e) { + throw new BoilerpipeProcessingException(e); + } + } + + /** + * Extracts text from the HTML code available from the given {@link InputSource}. + * + * @param is The InputSource containing the HTML + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(final InputSource is) throws BoilerpipeProcessingException { + try { + return getText(new BoilerpipeSAXInput(is).getTextDocument()); + } catch (SAXException e) { + throw new BoilerpipeProcessingException(e); + } + } + + /** + * Extracts text from the HTML code available from the given {@link URL}. NOTE: This method is + * mainly to be used for show case purposes. If you are going to crawl the Web, consider using + * {@link #getText(InputSource)} instead. + * + * @param url The URL pointing to the HTML code. + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(final URL url) throws BoilerpipeProcessingException { + try { + return getText(HTMLFetcher.fetch(url).toInputSource()); + } catch (IOException e) { + throw new BoilerpipeProcessingException(e); + } + } + + /** + * Extracts text from the HTML code available from the given {@link Reader}. + * + * @param r The Reader containing the HTML + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(final Reader r) throws BoilerpipeProcessingException { + return getText(new InputSource(r)); + } + + /** + * Extracts text from the given {@link TextDocument} object. + * + * @param doc The {@link TextDocument}. + * @return The extracted text. + * @throws BoilerpipeProcessingException + */ + public String getText(TextDocument doc) throws BoilerpipeProcessingException { + process(doc); + return doc.getContent(); + } +} diff --git a/src/main/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/KeepEverythingExtractor.java similarity index 54% rename from src/main/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/KeepEverythingExtractor.java index d1f8afc..c5629b8 100644 --- a/src/main/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/KeepEverythingExtractor.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,28 +15,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe.extractors; +package com.kohlschutter.boilerpipe.extractors; -import de.l3s.boilerpipe.BoilerpipeProcessingException; -import de.l3s.boilerpipe.document.TextDocument; -import de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.filters.simple.MarkEverythingContentFilter; /** * Marks everything as content. - * - * @author Christian Kohlschütter */ public final class KeepEverythingExtractor extends ExtractorBase { - public static final KeepEverythingExtractor INSTANCE = new KeepEverythingExtractor(); + public static final KeepEverythingExtractor INSTANCE = new KeepEverythingExtractor(); - private KeepEverythingExtractor() { + private KeepEverythingExtractor() { - } + } - public boolean process(TextDocument doc) - throws BoilerpipeProcessingException { - return MarkEverythingContentFilter.INSTANCE.process(doc); - } + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + return MarkEverythingContentFilter.INSTANCE.process(doc); + } } diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.java new file mode 100644 index 0000000..f2860f2 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.java @@ -0,0 +1,44 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor; +import com.kohlschutter.boilerpipe.filters.simple.MarkEverythingContentFilter; +import com.kohlschutter.boilerpipe.filters.simple.MinWordsFilter; + +/** + * A full-text extractor which extracts the largest text component of a page. For news articles, it + * may perform better than the {@link DefaultExtractor}, but usually worse than + * {@link ArticleExtractor}. + */ +public final class KeepEverythingWithMinKWordsExtractor extends ExtractorBase { + + private final MinWordsFilter filter; + + public KeepEverythingWithMinKWordsExtractor(final int kMin) { + this.filter = new MinWordsFilter(kMin); + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + return SimpleBlockFusionProcessor.INSTANCE.process(doc) + | MarkEverythingContentFilter.INSTANCE.process(doc) | filter.process(doc); + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/LargestContentExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/LargestContentExtractor.java new file mode 100644 index 0000000..cbdec11 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/LargestContentExtractor.java @@ -0,0 +1,50 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.filters.english.NumWordsRulesClassifier; +import com.kohlschutter.boilerpipe.filters.heuristics.BlockProximityFusion; +import com.kohlschutter.boilerpipe.filters.heuristics.KeepLargestBlockFilter; + +/** + * A full-text extractor which extracts the largest text component of a page. For news articles, it + * may perform better than the {@link DefaultExtractor}, but usually worse than + * {@link ArticleExtractor}. + */ +public final class LargestContentExtractor extends ExtractorBase { + public static final LargestContentExtractor INSTANCE = new LargestContentExtractor(); + + private LargestContentExtractor() { + } + + /** + * Returns the singleton instance for {@link LargestContentExtractor}. + */ + public static LargestContentExtractor getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + return NumWordsRulesClassifier.INSTANCE.process(doc) + | BlockProximityFusion.MAX_DISTANCE_1.process(doc) + | KeepLargestBlockFilter.INSTANCE.process(doc); + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/NumWordsRulesExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/NumWordsRulesExtractor.java new file mode 100644 index 0000000..fb0f9ad --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/NumWordsRulesExtractor.java @@ -0,0 +1,43 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.extractors; + +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.filters.english.NumWordsRulesClassifier; + +/** + * A quite generic full-text extractor solely based upon the number of words per block (the current, + * the previous and the next block). + */ +public class NumWordsRulesExtractor extends ExtractorBase { + public static final NumWordsRulesExtractor INSTANCE = new NumWordsRulesExtractor(); + + /** + * Returns the singleton instance for {@link NumWordsRulesExtractor}. + */ + public static NumWordsRulesExtractor getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + + return NumWordsRulesClassifier.INSTANCE.process(doc); + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/package-info.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/package-info.java new file mode 100644 index 0000000..e6be430 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/extractors/package-info.java @@ -0,0 +1,4 @@ +/** + * Some standard extractors (i.e., completely piped BoilerpipeFilters) + */ +package com.kohlschutter.boilerpipe.extractors; diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/debug/PrintDebugFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/debug/PrintDebugFilter.java new file mode 100644 index 0000000..24d9ffe --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/debug/PrintDebugFilter.java @@ -0,0 +1,66 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.debug; + +import java.io.PrintWriter; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Prints debug information about the current state of the TextDocument. (= calls + * {@link TextDocument#debugString()}. + */ +public final class PrintDebugFilter implements BoilerpipeFilter { + /** + * Returns the default instance for {@link PrintDebugFilter}, which dumps debug information to + * System.out + */ + public static final PrintDebugFilter INSTANCE = new PrintDebugFilter(new PrintWriter(System.out, + true)); + private final PrintWriter out; + + /** + * Returns the default instance for {@link PrintDebugFilter}, which dumps debug information to + * System.out + */ + public static PrintDebugFilter getInstance() { + return INSTANCE; + } + + /** + * Creates a new instance of {@link PrintDebugFilter}. + * + * Only use this method if you are not going to dump the debug information to + * System.out -- for this case, use {@link #getInstance()} instead. + * + * @param out The target {@link PrintWriter}. Will not be closed + */ + public PrintDebugFilter(final PrintWriter out) { + this.out = out; + + } + + @Override + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + out.println(doc.debugString()); + + return false; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/DensityRulesClassifier.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/DensityRulesClassifier.java new file mode 100644 index 0000000..61f8ca8 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/DensityRulesClassifier.java @@ -0,0 +1,110 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.english; + +import java.util.List; +import java.util.ListIterator; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Classifies {@link TextBlock}s as content/not-content through rules that have been determined + * using the C4.8 machine learning algorithm, as described in the paper + * "Boilerplate Detection using Shallow Text Features", particularly using text densities and link + * densities. + */ +public class DensityRulesClassifier implements BoilerpipeFilter { + public static final DensityRulesClassifier INSTANCE = new DensityRulesClassifier(); + + /** + * Returns the singleton instance for RulebasedBoilerpipeClassifier. + */ + public static DensityRulesClassifier getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + boolean hasChanges = false; + + ListIterator it = textBlocks.listIterator(); + if (!it.hasNext()) { + return false; + } + TextBlock prevBlock = TextBlock.EMPTY_START; + TextBlock currentBlock = it.next(); + TextBlock nextBlock = it.hasNext() ? it.next() : TextBlock.EMPTY_START; + + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + + if (nextBlock != TextBlock.EMPTY_START) { + while (it.hasNext()) { + prevBlock = currentBlock; + currentBlock = nextBlock; + nextBlock = it.next(); + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + } + prevBlock = currentBlock; + currentBlock = nextBlock; + nextBlock = TextBlock.EMPTY_START; + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + } + + return hasChanges; + } + + protected boolean classify(final TextBlock prev, final TextBlock curr, final TextBlock next) { + final boolean isContent; + + if (curr.getLinkDensity() <= 0.333333) { + if (prev.getLinkDensity() <= 0.555556) { + if (curr.getTextDensity() <= 9) { + if (next.getTextDensity() <= 10) { + if (prev.getTextDensity() <= 4) { + isContent = false; + } else { + isContent = true; + } + } else { + isContent = true; + } + } else { + if (next.getTextDensity() == 0) { + isContent = false; + } else { + isContent = true; + } + } + } else { + if (next.getTextDensity() <= 11) { + isContent = false; + } else { + isContent = true; + } + } + } else { + isContent = false; + } + + return curr.setIsContent(isContent); + } + +} diff --git a/src/main/de/l3s/boilerpipe/filters/english/HeuristicFilterBase.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/HeuristicFilterBase.java similarity index 58% rename from src/main/de/l3s/boilerpipe/filters/english/HeuristicFilterBase.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/HeuristicFilterBase.java index dc72d07..2f93fea 100644 --- a/src/main/de/l3s/boilerpipe/filters/english/HeuristicFilterBase.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/HeuristicFilterBase.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,26 +15,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe.filters.english; +package com.kohlschutter.boilerpipe.filters.english; -import de.l3s.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextBlock; /** * Base class for some heuristics that are used by boilerpipe filters. - * - * @author Christian Kohlschütter */ abstract class HeuristicFilterBase { - protected static int getNumFullTextWords(final TextBlock tb) { - return getNumFullTextWords(tb, 9); - } - protected static int getNumFullTextWords(final TextBlock tb, float minTextDensity) { - if(tb.getTextDensity() >= minTextDensity) { - return tb.getNumWords(); - } else { - return 0; - } - } + protected static int getNumFullTextWords(final TextBlock tb) { + return getNumFullTextWords(tb, 9); + } + protected static int getNumFullTextWords(final TextBlock tb, float minTextDensity) { + if (tb.getTextDensity() >= minTextDensity) { + return tb.getNumWords(); + } else { + return 0; + } + } } diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.java new file mode 100644 index 0000000..dcc251e --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.java @@ -0,0 +1,78 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.english; + +import java.util.Iterator; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Marks all blocks as "non-content" that occur after blocks that have been marked + * {@link DefaultLabels#INDICATES_END_OF_TEXT}. These marks are ignored unless a minimum number of + * words in content blocks occur before this mark (default: 60). This can be used in conjunction + * with an upstream {@link TerminatingBlocksFinder}. + * + * @see TerminatingBlocksFinder + */ +public final class IgnoreBlocksAfterContentFilter extends HeuristicFilterBase implements + BoilerpipeFilter { + public static final IgnoreBlocksAfterContentFilter DEFAULT_INSTANCE = + new IgnoreBlocksAfterContentFilter(60); + public static final IgnoreBlocksAfterContentFilter INSTANCE_200 = + new IgnoreBlocksAfterContentFilter(200); + private final int minNumWords; + + /** + * Returns the singleton instance for DeleteBlocksAfterContentFilter. + */ + public static IgnoreBlocksAfterContentFilter getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + public IgnoreBlocksAfterContentFilter(final int minNumWords) { + this.minNumWords = minNumWords; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + boolean changes = false; + + int numWords = 0; + boolean foundEndOfText = false; + for (Iterator it = doc.getTextBlocks().iterator(); it.hasNext();) { + TextBlock block = it.next(); + + final boolean endOfText = block.hasLabel(DefaultLabels.INDICATES_END_OF_TEXT); + if (block.isContent()) { + numWords += getNumFullTextWords(block); + } + if (endOfText && numWords >= minNumWords) { + foundEndOfText = true; + } + if (foundEndOfText) { + changes = true; + block.setIsContent(false); + } + } + + return changes; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.java new file mode 100644 index 0000000..9050047 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.java @@ -0,0 +1,74 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.english; + +import java.util.List; +import java.util.ListIterator; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Marks all blocks as "non-content" that occur after blocks that have been marked + * {@link DefaultLabels#INDICATES_END_OF_TEXT}, and after any content block. This filter can be used + * in conjunction with an upstream {@link TerminatingBlocksFinder}. + * + * @see TerminatingBlocksFinder + */ +public final class IgnoreBlocksAfterContentFromEndFilter extends HeuristicFilterBase implements + BoilerpipeFilter { + public static final IgnoreBlocksAfterContentFromEndFilter INSTANCE = + new IgnoreBlocksAfterContentFromEndFilter(); + + private IgnoreBlocksAfterContentFromEndFilter() { + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + boolean changes = false; + + int words = 0; + + List blocks = doc.getTextBlocks(); + if (!blocks.isEmpty()) { + ListIterator it = blocks.listIterator(blocks.size()); + + TextBlock tb; + + while (it.hasPrevious()) { + tb = it.previous(); + if (tb.hasLabel(DefaultLabels.INDICATES_END_OF_TEXT)) { + tb.addLabel(DefaultLabels.STRICTLY_NOT_CONTENT); + tb.removeLabel(DefaultLabels.MIGHT_BE_CONTENT); + tb.setIsContent(false); + changes = true; + } else if (tb.isContent()) { + words += tb.getNumWords(); + if (words > 200) { + break; + } + } + + } + } + + return changes; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.java new file mode 100644 index 0000000..0df3b40 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.java @@ -0,0 +1,81 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.english; + +import java.util.List; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.filters.heuristics.KeepLargestBlockFilter; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Keeps the largest {@link TextBlock} only (by the number of words). In case of more than one block + * with the same number of words, the first block is chosen. All discarded blocks are marked + * "not content" and flagged as {@link DefaultLabels#MIGHT_BE_CONTENT}. + * + * As opposed to {@link KeepLargestBlockFilter}, the number of words are computed using + * {@link HeuristicFilterBase#getNumFullTextWords(TextBlock)}, which only counts words that occur in + * text elements with at least 9 words and are thus believed to be full text. + * + * NOTE: Without language-specific fine-tuning (i.e., running the default instance), this filter may + * lead to suboptimal results. You better use {@link KeepLargestBlockFilter} instead, which works at + * the level of number-of-words instead of text densities. + */ +public final class KeepLargestFulltextBlockFilter extends HeuristicFilterBase implements + BoilerpipeFilter { + public static final KeepLargestFulltextBlockFilter INSTANCE = + new KeepLargestFulltextBlockFilter(); + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + if (textBlocks.size() < 2) { + return false; + } + + int max = -1; + TextBlock largestBlock = null; + for (TextBlock tb : textBlocks) { + if (!tb.isContent()) { + continue; + } + int numWords = getNumFullTextWords(tb); + if (numWords > max) { + largestBlock = tb; + max = numWords; + } + } + + if (largestBlock == null) { + return false; + } + + for (TextBlock tb : textBlocks) { + if (tb == largestBlock) { + tb.setIsContent(true); + } else { + tb.setIsContent(false); + tb.addLabel(DefaultLabels.MIGHT_BE_CONTENT); + } + } + + return true; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/MinFulltextWordsFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/MinFulltextWordsFilter.java new file mode 100644 index 0000000..5a3f6c3 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/MinFulltextWordsFilter.java @@ -0,0 +1,59 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.english; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Keeps only those content blocks which contain at least k full-text words (measured by + * {@link HeuristicFilterBase#getNumFullTextWords(TextBlock)}). k is 30 by default. + */ +public final class MinFulltextWordsFilter extends HeuristicFilterBase implements BoilerpipeFilter { + public static final MinFulltextWordsFilter DEFAULT_INSTANCE = new MinFulltextWordsFilter(30); + private final int minWords; + + public static MinFulltextWordsFilter getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + public MinFulltextWordsFilter(final int minWords) { + this.minWords = minWords; + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + + for (TextBlock tb : doc.getTextBlocks()) { + if (!tb.isContent()) { + continue; + } + if (getNumFullTextWords(tb) < minWords) { + tb.setIsContent(false); + changes = true; + } + + } + + return changes; + + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/NumWordsRulesClassifier.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/NumWordsRulesClassifier.java new file mode 100644 index 0000000..f8ef2be --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/NumWordsRulesClassifier.java @@ -0,0 +1,110 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.english; + +import java.util.List; +import java.util.ListIterator; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Classifies {@link TextBlock}s as content/not-content through rules that have been determined + * using the C4.8 machine learning algorithm, as described in the paper + * "Boilerplate Detection using Shallow Text Features" (WSDM 2010), particularly using number of + * words per block and link density per block. + */ +public class NumWordsRulesClassifier implements BoilerpipeFilter { + public static final NumWordsRulesClassifier INSTANCE = new NumWordsRulesClassifier(); + + /** + * Returns the singleton instance for RulebasedBoilerpipeClassifier. + */ + public static NumWordsRulesClassifier getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + boolean hasChanges = false; + + ListIterator it = textBlocks.listIterator(); + if (!it.hasNext()) { + return false; + } + TextBlock prevBlock = TextBlock.EMPTY_START; + TextBlock currentBlock = it.next(); + TextBlock nextBlock = it.hasNext() ? it.next() : TextBlock.EMPTY_START; + + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + + if (nextBlock != TextBlock.EMPTY_START) { + while (it.hasNext()) { + prevBlock = currentBlock; + currentBlock = nextBlock; + nextBlock = it.next(); + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + } + prevBlock = currentBlock; + currentBlock = nextBlock; + nextBlock = TextBlock.EMPTY_START; + hasChanges = classify(prevBlock, currentBlock, nextBlock) | hasChanges; + } + + return hasChanges; + } + + protected boolean classify(final TextBlock prev, final TextBlock curr, final TextBlock next) { + final boolean isContent; + + if (curr.getLinkDensity() <= 0.333333) { + if (prev.getLinkDensity() <= 0.555556) { + if (curr.getNumWords() <= 16) { + if (next.getNumWords() <= 15) { + if (prev.getNumWords() <= 4) { + isContent = false; + } else { + isContent = true; + } + } else { + isContent = true; + } + } else { + isContent = true; + } + } else { + if (curr.getNumWords() <= 40) { + if (next.getNumWords() <= 17) { + isContent = false; + } else { + isContent = true; + } + } else { + isContent = true; + } + } + } else { + isContent = false; + } + + return curr.setIsContent(isContent); + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/TerminatingBlocksFinder.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/TerminatingBlocksFinder.java new file mode 100644 index 0000000..fba9d14 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/TerminatingBlocksFinder.java @@ -0,0 +1,109 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.english; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Finds blocks which are potentially indicating the end of an article text and marks them with + * {@link DefaultLabels#INDICATES_END_OF_TEXT}. This can be used in conjunction with a downstream + * {@link IgnoreBlocksAfterContentFilter}. + * + * @see IgnoreBlocksAfterContentFilter + */ +public class TerminatingBlocksFinder implements BoilerpipeFilter { + public static final TerminatingBlocksFinder INSTANCE = new TerminatingBlocksFinder(); + + /** + * Returns the singleton instance for TerminatingBlocksFinder. + */ + public static TerminatingBlocksFinder getInstance() { + return INSTANCE; + } + + // public static long timeSpent = 0; + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + boolean changes = false; + + // long t = System.currentTimeMillis(); + + for (TextBlock tb : doc.getTextBlocks()) { + final int numWords = tb.getNumWords(); + if (numWords < 15) { + final String text = tb.getText().trim(); + final int len = text.length(); + if (len >= 8) { + final String textLC = text.toLowerCase(); + if (textLC.startsWith("comments") + || startsWithNumber(textLC, len, " comments", " users responded in") + || textLC.startsWith("© reuters") || textLC.startsWith("please rate this") + || textLC.startsWith("post a comment") || textLC.contains("what you think...") + || textLC.contains("add your comment") || textLC.contains("add comment") + || textLC.contains("reader views") || textLC.contains("have your say") + || textLC.contains("reader comments") || textLC.contains("rätta artikeln") + || textLC.equals("thanks for your comments - this feedback is now closed")) { + tb.addLabel(DefaultLabels.INDICATES_END_OF_TEXT); + changes = true; + } + } else if (tb.getLinkDensity() == 1.0) { + if (text.equals("Comment")) { + tb.addLabel(DefaultLabels.INDICATES_END_OF_TEXT); + } + } + } + } + + // timeSpent += System.currentTimeMillis() - t; + + return changes; + } + + /** + * Checks whether the given text t starts with a sequence of digits, followed by one of the given + * strings. + * + * @param t The text to examine + * @param len The length of the text to examine + * @param str Any strings that may follow the digits. + * @return true if at least one combination matches + */ + private static boolean startsWithNumber(final String t, final int len, final String... str) { + int j = 0; + while (j < len && isDigit(t.charAt(j))) { + j++; + } + if (j != 0) { + for (String s : str) { + if (t.startsWith(s, j)) { + return true; + } + } + } + return false; + } + + private static boolean isDigit(final char c) { + return c >= '0' && c <= '9'; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/package-info.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/package-info.java new file mode 100644 index 0000000..8003cf8 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/english/package-info.java @@ -0,0 +1,7 @@ +/** + * These BoilerpipeFilters have only been tested on English text. + * + * That is, they will probably work with other Western languages, but maybe need some parameter tuning to perform well. + */ +package com.kohlschutter.boilerpipe.filters.english; + diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.java new file mode 100644 index 0000000..bb94437 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.java @@ -0,0 +1,82 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.List; +import java.util.ListIterator; +import java.util.Set; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Adds the labels of the preceding block to the current block, optionally adding a prefix. + */ +public final class AddPrecedingLabelsFilter implements BoilerpipeFilter { + + public static final AddPrecedingLabelsFilter INSTANCE = new AddPrecedingLabelsFilter(""); + public static final AddPrecedingLabelsFilter INSTANCE_PRE = new AddPrecedingLabelsFilter("^"); + + private final String labelPrefix; + + /** + * Creates a new {@link AddPrecedingLabelsFilter} instance. + * + * @param maxBlocksDistance The maximum distance in blocks. + * @param contentOnly + */ + public AddPrecedingLabelsFilter(final String labelPrefix) { + this.labelPrefix = labelPrefix; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + if (textBlocks.size() < 2) { + return false; + } + + boolean changes = false; + int remaining = textBlocks.size(); + + TextBlock blockBelow = null; + TextBlock block; + for (ListIterator it = textBlocks.listIterator(textBlocks.size()); it.hasPrevious();) { + if (--remaining <= 0) { + break; + } + if (blockBelow == null) { + blockBelow = it.previous(); + continue; + } + block = it.previous(); + + Set labels = block.getLabels(); + if (labels != null && !labels.isEmpty()) { + for (String l : labels) { + blockBelow.addLabel(labelPrefix + l); + } + changes = true; + } + blockBelow = block; + } + + return changes; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ArticleMetadataFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ArticleMetadataFilter.java new file mode 100644 index 0000000..5656687 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ArticleMetadataFilter.java @@ -0,0 +1,62 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.regex.Pattern; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Tries to find TextBlocks that comprise of "article metadata". + */ +public class ArticleMetadataFilter implements BoilerpipeFilter { + private static final Pattern[] PATTERNS_SHORT = + new Pattern[] { + Pattern + .compile("^[0-9 \\,\\./]*\\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|January|February|March|April|May|June|July|August|September|October|November|December)?\\b[0-9 \\,\\:apm\\./]*([CPSDMGET]{2,3})?$"), + Pattern.compile("^[Bb]y ")}; + + public static final ArticleMetadataFilter INSTANCE = new ArticleMetadataFilter(); + + private ArticleMetadataFilter() { + } + + @Override + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + boolean changed = false; + for (TextBlock tb : doc.getTextBlocks()) { + if (tb.getNumWords() > 10) { + continue; + } + final String text = tb.getText(); + for (Pattern p : PATTERNS_SHORT) { + if (p.matcher(text).find()) { + changed = true; + tb.setIsContent(true); + tb.addLabel(DefaultLabels.ARTICLE_METADATA); + } + } + } + return changed; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/BlockProximityFusion.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/BlockProximityFusion.java new file mode 100644 index 0000000..3a62999 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/BlockProximityFusion.java @@ -0,0 +1,122 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.Iterator; +import java.util.List; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit. This + * probably makes sense only in cases where an upstream filter already has removed some blocks. + */ +public final class BlockProximityFusion implements BoilerpipeFilter { + + private final int maxBlocksDistance; + + public static final BlockProximityFusion MAX_DISTANCE_1 = new BlockProximityFusion(1, false, + false); + public static final BlockProximityFusion MAX_DISTANCE_1_SAME_TAGLEVEL = new BlockProximityFusion( + 1, false, true); + public static final BlockProximityFusion MAX_DISTANCE_1_CONTENT_ONLY = new BlockProximityFusion( + 1, true, false); + public static final BlockProximityFusion MAX_DISTANCE_1_CONTENT_ONLY_SAME_TAGLEVEL = + new BlockProximityFusion(1, true, true); + + private final boolean contentOnly; + + private final boolean sameTagLevelOnly; + + /** + * Creates a new {@link BlockProximityFusion} instance. + * + * @param maxBlocksDistance The maximum distance in blocks. + * @param contentOnly + */ + public BlockProximityFusion(final int maxBlocksDistance, final boolean contentOnly, + final boolean sameTagLevelOnly) { + this.maxBlocksDistance = maxBlocksDistance; + this.contentOnly = contentOnly; + this.sameTagLevelOnly = sameTagLevelOnly; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + if (textBlocks.size() < 2) { + return false; + } + + boolean changes = false; + TextBlock prevBlock; + + int offset; + if (contentOnly) { + prevBlock = null; + offset = 0; + for (TextBlock tb : textBlocks) { + offset++; + if (tb.isContent()) { + prevBlock = tb; + break; + } + } + if (prevBlock == null) { + return false; + } + } else { + prevBlock = textBlocks.get(0); + offset = 1; + } + + for (Iterator it = textBlocks.listIterator(offset); it.hasNext();) { + TextBlock block = it.next(); + if (!block.isContent()) { + prevBlock = block; + continue; + } + int diffBlocks = block.getOffsetBlocksStart() - prevBlock.getOffsetBlocksEnd() - 1; + if (diffBlocks <= maxBlocksDistance) { + boolean ok = true; + if (contentOnly) { + if (!prevBlock.isContent() || !block.isContent()) { + ok = false; + } + } + if (ok && sameTagLevelOnly && prevBlock.getTagLevel() != block.getTagLevel()) { + ok = false; + } + if (ok) { + prevBlock.mergeNext(block); + it.remove(); + changes = true; + } else { + prevBlock = block; + } + } else { + prevBlock = block; + } + } + + return changes; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ContentFusion.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ContentFusion.java new file mode 100644 index 0000000..d7db7dd --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ContentFusion.java @@ -0,0 +1,72 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.List; +import java.util.ListIterator; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Merges two blocks using some heuristics. + */ +public final class ContentFusion implements BoilerpipeFilter { + + public static final ContentFusion INSTANCE = new ContentFusion(); + + /** + * Creates a new {@link ContentFusion} instance. + * + */ + public ContentFusion() { + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + if (textBlocks.size() < 2) { + return false; + } + + TextBlock prevBlock = textBlocks.get(0); + + boolean changes = false; + do { + changes = false; + for (ListIterator it = textBlocks.listIterator(1); it.hasNext();) { + TextBlock block = it.next(); + + if (prevBlock.isContent() && block.getLinkDensity() < 0.56 + && !block.hasLabel(DefaultLabels.STRICTLY_NOT_CONTENT)) { + + prevBlock.mergeNext(block); + it.remove(); + changes = true; + } else { + prevBlock = block; + } + } + } while (changes); + + return true; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.java new file mode 100644 index 0000000..0b4d1d2 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.java @@ -0,0 +1,170 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.HashSet; +import java.util.Set; +import java.util.regex.Pattern; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Marks {@link TextBlock}s which contain parts of the HTML <TITLE> tag, using + * some heuristics which are quite specific to the news domain. + */ +public final class DocumentTitleMatchClassifier implements BoilerpipeFilter { + + private final Set potentialTitles; + + public DocumentTitleMatchClassifier(String title) { + if (title == null) { + this.potentialTitles = null; + } else { + + title = title.replace('\u00a0', ' '); + title = title.replace("'", ""); + + title = title.trim().toLowerCase(); + + if (title.length() == 0) { + this.potentialTitles = null; + } else { + this.potentialTitles = new HashSet(); + + potentialTitles.add(title); + + String p; + + p = getLongestPart(title, "[ ]*[\\|»|-][ ]*"); + if (p != null) { + potentialTitles.add(p); + } + p = getLongestPart(title, "[ ]*[\\|»|:][ ]*"); + if (p != null) { + potentialTitles.add(p); + } + p = getLongestPart(title, "[ ]*[\\|»|:\\(\\)][ ]*"); + if (p != null) { + potentialTitles.add(p); + } + p = getLongestPart(title, "[ ]*[\\|»|:\\(\\)\\-][ ]*"); + if (p != null) { + potentialTitles.add(p); + } + p = getLongestPart(title, "[ ]*[\\|»|,|:\\(\\)\\-][ ]*"); + if (p != null) { + potentialTitles.add(p); + } + p = getLongestPart(title, "[ ]*[\\|»|,|:\\(\\)\\-\u00a0][ ]*"); + if (p != null) { + potentialTitles.add(p); + } + + addPotentialTitles(potentialTitles, title, "[ ]+[\\|][ ]+", 4); + addPotentialTitles(potentialTitles, title, "[ ]+[\\-][ ]+", 4); + + potentialTitles.add(title.replaceFirst(" - [^\\-]+$", "")); + potentialTitles.add(title.replaceFirst("^[^\\-]+ - ", "")); + } + } + } + + public Set getPotentialTitles() { + return potentialTitles; + } + + private void addPotentialTitles(final Set potentialTitles, final String title, + final String pattern, final int minWords) { + String[] parts = title.split(pattern); + if (parts.length == 1) { + return; + } + for (int i = 0; i < parts.length; i++) { + String p = parts[i]; + if (p.contains(".com")) { + continue; + } + final int numWords = p.split("[\b ]+").length; + if (numWords >= minWords) { + potentialTitles.add(p); + } + } + } + + private String getLongestPart(final String title, final String pattern) { + String[] parts = title.split(pattern); + if (parts.length == 1) { + return null; + } + int longestNumWords = 0; + String longestPart = ""; + for (int i = 0; i < parts.length; i++) { + String p = parts[i]; + if (p.contains(".com")) { + continue; + } + final int numWords = p.split("[\b ]+").length; + if (numWords > longestNumWords || p.length() > longestPart.length()) { + longestNumWords = numWords; + longestPart = p; + } + } + if (longestPart.length() == 0) { + return null; + } else { + return longestPart.trim(); + } + } + + private static final Pattern PAT_REMOVE_CHARACTERS = Pattern.compile("[\\?\\!\\.\\-\\:]+"); + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + if (potentialTitles == null) { + return false; + } + boolean changes = false; + + for (final TextBlock tb : doc.getTextBlocks()) { + String text = tb.getText(); + + text = text.replace('\u00a0', ' '); + text = text.replace("'", ""); + + text = text.trim().toLowerCase(); + + if (potentialTitles.contains(text)) { + tb.addLabel(DefaultLabels.TITLE); + changes = true; + break; + } + + text = PAT_REMOVE_CHARACTERS.matcher(text).replaceAll("").trim(); + if (potentialTitles.contains(text)) { + tb.addLabel(DefaultLabels.TITLE); + changes = true; + break; + } + } + return changes; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.java new file mode 100644 index 0000000..2820d00 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.java @@ -0,0 +1,70 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Marks all {@link TextBlock}s "content" which are between the headline and the part that has + * already been marked content, if they are marked {@link DefaultLabels#MIGHT_BE_CONTENT}. + * + * This filter is quite specific to the news domain. + */ +public final class ExpandTitleToContentFilter implements BoilerpipeFilter { + public static final ExpandTitleToContentFilter INSTANCE = new ExpandTitleToContentFilter(); + + /** + * Returns the singleton instance for ExpandTitleToContentFilter. + */ + public static ExpandTitleToContentFilter getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + int i = 0; + int title = -1; + int contentStart = -1; + for (TextBlock tb : doc.getTextBlocks()) { + if (contentStart == -1 && tb.hasLabel(DefaultLabels.TITLE)) { + title = i; + contentStart = -1; + } + if (contentStart == -1 && tb.isContent()) { + contentStart = i; + } + + i++; + } + + if (contentStart <= title || title == -1) { + return false; + } + boolean changes = false; + for (TextBlock tb : doc.getTextBlocks().subList(title, contentStart)) { + if (tb.hasLabel(DefaultLabels.MIGHT_BE_CONTENT)) { + changes = tb.setIsContent(true) | changes; + } + } + return changes; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/KeepLargestBlockFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/KeepLargestBlockFilter.java new file mode 100644 index 0000000..8368dc6 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/KeepLargestBlockFilter.java @@ -0,0 +1,117 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.List; +import java.util.ListIterator; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Keeps the largest {@link TextBlock} only (by the number of words). In case of more than one block + * with the same number of words, the first block is chosen. All discarded blocks are marked + * "not content" and flagged as {@link DefaultLabels#MIGHT_BE_CONTENT}. + * + * Note that, by default, only TextBlocks marked as "content" are taken into consideration. + */ +public final class KeepLargestBlockFilter implements BoilerpipeFilter { + public static final KeepLargestBlockFilter INSTANCE = new KeepLargestBlockFilter(false, 0); + public static final KeepLargestBlockFilter INSTANCE_EXPAND_TO_SAME_TAGLEVEL = + new KeepLargestBlockFilter(true, 0); + public static final KeepLargestBlockFilter INSTANCE_EXPAND_TO_SAME_TAGLEVEL_MIN_WORDS = + new KeepLargestBlockFilter(true, 150); + private final boolean expandToSameLevelText; + private final int minWords; + + public KeepLargestBlockFilter(boolean expandToSameLevelText, final int minWords) { + this.expandToSameLevelText = expandToSameLevelText; + this.minWords = minWords; + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + if (textBlocks.size() < 2) { + return false; + } + + int maxNumWords = -1; + TextBlock largestBlock = null; + + int level = -1; + + int i = 0; + int n = -1; + for (TextBlock tb : textBlocks) { + if (tb.isContent()) { + final int nw = tb.getNumWords(); + + if (nw > maxNumWords) { + largestBlock = tb; + maxNumWords = nw; + + n = i; + + if (expandToSameLevelText) { + level = tb.getTagLevel(); + } + } + } + i++; + } + for (TextBlock tb : textBlocks) { + if (tb == largestBlock) { + tb.setIsContent(true); + tb.addLabel(DefaultLabels.VERY_LIKELY_CONTENT); + } else { + tb.setIsContent(false); + tb.addLabel(DefaultLabels.MIGHT_BE_CONTENT); + } + } + if (expandToSameLevelText && n != -1) { + + for (ListIterator it = textBlocks.listIterator(n); it.hasPrevious();) { + TextBlock tb = it.previous(); + final int tl = tb.getTagLevel(); + if (tl < level) { + break; + } else if (tl == level) { + if (tb.getNumWords() >= minWords) { + tb.setIsContent(true); + } + } + } + for (ListIterator it = textBlocks.listIterator(n); it.hasNext();) { + TextBlock tb = it.next(); + final int tl = tb.getTagLevel(); + if (tl < level) { + break; + } else if (tl == level) { + if (tb.getNumWords() >= minWords) { + tb.setIsContent(true); + } + } + } + } + + return true; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/LabelFusion.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/LabelFusion.java new file mode 100644 index 0000000..c1bcf7a --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/LabelFusion.java @@ -0,0 +1,87 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Fuses adjacent blocks if their labels are equal. + */ +public final class LabelFusion implements BoilerpipeFilter { + + public static final LabelFusion INSTANCE = new LabelFusion(); + + /** + * Creates a new {@link LabelFusion} instance. + */ + private LabelFusion() { + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + if (textBlocks.size() < 2) { + return false; + } + + boolean changes = false; + TextBlock prevBlock = textBlocks.get(0); + int offset = 1; + + for (Iterator it = textBlocks.listIterator(offset); it.hasNext();) { + TextBlock block = it.next(); + + if (equalLabels(prevBlock.getLabels(), block.getLabels())) { + prevBlock.mergeNext(block); + it.remove(); + changes = true; + } else { + prevBlock = block; + } + } + + return changes; + } + + private boolean equalLabels(Set labels, Set labels2) { + if (labels == null || labels2 == null) { + return false; + } + return markupLabelsOnly(labels).equals(markupLabelsOnly(labels2)); + } + + private Set markupLabelsOnly(final Set set1) { + Set set = new HashSet(set1); + for (Iterator it = set.iterator(); it.hasNext();) { + final String label = it.next(); + if (!label.startsWith(DefaultLabels.MARKUP_PREFIX)) { + it.remove(); + } + } + return set; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/LargeBlockSameTagLevelToContentFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/LargeBlockSameTagLevelToContentFilter.java new file mode 100644 index 0000000..40d0aee --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/LargeBlockSameTagLevelToContentFilter.java @@ -0,0 +1,70 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Marks all blocks as content that: + *
    + *
  1. are on the same tag-level as very likely main content (usually the level of the largest + * block)
  2. + *
  3. have a significant number of words, currently: at least 100
  4. + *
+ */ +public final class LargeBlockSameTagLevelToContentFilter implements BoilerpipeFilter { + public static final LargeBlockSameTagLevelToContentFilter INSTANCE = + new LargeBlockSameTagLevelToContentFilter(); + + private LargeBlockSameTagLevelToContentFilter() { + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + + int tagLevel = -1; + for (TextBlock tb : doc.getTextBlocks()) { + if (tb.isContent() && tb.hasLabel(DefaultLabels.VERY_LIKELY_CONTENT)) { + tagLevel = tb.getTagLevel(); + break; + } + } + + if (tagLevel == -1) { + return false; + } + + for (TextBlock tb : doc.getTextBlocks()) { + if (!tb.isContent()) { + + if (tb.getNumWords() >= 100 && tb.getTagLevel() == tagLevel) { + tb.setIsContent(true); + changes = true; + } + } + } + + return changes; + + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ListAtEndFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ListAtEndFilter.java new file mode 100644 index 0000000..d100dfc --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/ListAtEndFilter.java @@ -0,0 +1,57 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Marks nested list-item blocks after the end of the main content. + */ +public final class ListAtEndFilter implements BoilerpipeFilter { + public static final ListAtEndFilter INSTANCE = new ListAtEndFilter(); + + private ListAtEndFilter() { + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + + int tagLevel = Integer.MAX_VALUE; + for (TextBlock tb : doc.getTextBlocks()) { + if (tb.isContent() && tb.hasLabel(DefaultLabels.VERY_LIKELY_CONTENT)) { + tagLevel = tb.getTagLevel(); + } else { + if (tb.getTagLevel() > tagLevel && tb.hasLabel(DefaultLabels.MIGHT_BE_CONTENT) + && tb.hasLabel(DefaultLabels.LI) && tb.getLinkDensity() == 0) { + tb.setIsContent(true); + changes = true; + } else { + tagLevel = Integer.MAX_VALUE; + } + } + } + + return changes; + + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.java new file mode 100644 index 0000000..d755a11 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.java @@ -0,0 +1,67 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.Iterator; +import java.util.List; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Merges two subsequent blocks if their text densities are equal. + */ +public class SimpleBlockFusionProcessor implements BoilerpipeFilter { + public static final SimpleBlockFusionProcessor INSTANCE = new SimpleBlockFusionProcessor(); + + /** + * Returns the singleton instance for BlockFusionProcessor. + */ + public static SimpleBlockFusionProcessor getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + boolean changes = false; + + if (textBlocks.size() < 2) { + return false; + } + + TextBlock b1 = textBlocks.get(0); + for (Iterator it = textBlocks.listIterator(1); it.hasNext();) { + TextBlock b2 = it.next(); + + final boolean similar = (b1.getTextDensity() == b2.getTextDensity()); + + if (similar) { + b1.mergeNext(b2); + it.remove(); + changes = true; + } else { + b1 = b2; + } + } + + return changes; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/TrailingHeadlineToBoilerplateFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/TrailingHeadlineToBoilerplateFilter.java new file mode 100644 index 0000000..74a8fd2 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/TrailingHeadlineToBoilerplateFilter.java @@ -0,0 +1,64 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; + +import java.util.List; +import java.util.ListIterator; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Marks trailing headlines ({@link TextBlock}s that have the label {@link DefaultLabels#HEADING}) + * as boilerplate. Trailing means they are marked content and are below any other content block. + */ +public final class TrailingHeadlineToBoilerplateFilter implements BoilerpipeFilter { + public static final TrailingHeadlineToBoilerplateFilter INSTANCE = + new TrailingHeadlineToBoilerplateFilter(); + + /** + * Returns the singleton instance for ExpandTitleToContentFilter. + */ + public static TrailingHeadlineToBoilerplateFilter getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + boolean changes = false; + + List list = doc.getTextBlocks(); + + for (ListIterator it = list.listIterator(list.size()); it.hasPrevious();) { + TextBlock tb = it.previous(); + if (tb.isContent()) { + if (tb.hasLabel(DefaultLabels.HEADING)) { + tb.setIsContent(false); + changes = true; + } else { + break; + } + } + } + + return changes; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/package-info.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/package-info.java new file mode 100644 index 0000000..3b42b3b --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/heuristics/package-info.java @@ -0,0 +1,4 @@ +/** + * These BoilerpipeFilters are pure heuristics. + */ +package com.kohlschutter.boilerpipe.filters.heuristics; diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/BoilerplateBlockFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/BoilerplateBlockFilter.java new file mode 100644 index 0000000..e250a32 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/BoilerplateBlockFilter.java @@ -0,0 +1,64 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import java.util.Iterator; +import java.util.List; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Removes {@link TextBlock}s which have explicitly been marked as "not content". + */ +public final class BoilerplateBlockFilter implements BoilerpipeFilter { + public static final BoilerplateBlockFilter INSTANCE = new BoilerplateBlockFilter(null); + public static final BoilerplateBlockFilter INSTANCE_KEEP_TITLE = new BoilerplateBlockFilter( + DefaultLabels.TITLE); + private final String labelToKeep; + + /** + * Returns the singleton instance for BoilerplateBlockFilter. + */ + public static BoilerplateBlockFilter getInstance() { + return INSTANCE; + } + + public BoilerplateBlockFilter(final String labelToKeep) { + this.labelToKeep = labelToKeep; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + List textBlocks = doc.getTextBlocks(); + boolean hasChanges = false; + + for (Iterator it = textBlocks.iterator(); it.hasNext();) { + TextBlock tb = it.next(); + if (!tb.isContent() && (labelToKeep == null || !tb.hasLabel(DefaultLabels.TITLE))) { + it.remove(); + hasChanges = true; + } + } + + return hasChanges; + } + +} diff --git a/src/main/de/l3s/boilerpipe/filters/simple/InvertedFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/InvertedFilter.java similarity index 51% rename from src/main/de/l3s/boilerpipe/filters/simple/InvertedFilter.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/InvertedFilter.java index a464dbf..ae45c79 100644 --- a/src/main/de/l3s/boilerpipe/filters/simple/InvertedFilter.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/InvertedFilter.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,37 +15,35 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe.filters.simple; +package com.kohlschutter.boilerpipe.filters.simple; import java.util.List; -import de.l3s.boilerpipe.BoilerpipeFilter; -import de.l3s.boilerpipe.BoilerpipeProcessingException; -import de.l3s.boilerpipe.document.TextBlock; -import de.l3s.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; /** * Reverts the "isContent" flag for all {@link TextBlock}s - * - * @author Christian Kohlschütter */ public final class InvertedFilter implements BoilerpipeFilter { - public static final InvertedFilter INSTANCE = new InvertedFilter(); - private InvertedFilter() { + public static final InvertedFilter INSTANCE = new InvertedFilter(); + + private InvertedFilter() { + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + + List tbs = doc.getTextBlocks(); + if (tbs.isEmpty()) { + return false; } - - public boolean process(TextDocument doc) - throws BoilerpipeProcessingException { - - List tbs = doc.getTextBlocks(); - if (tbs.isEmpty()) { - return false; - } - for (TextBlock tb : tbs) { - tb.setIsContent(!tb.isContent()); - } - - return true; + for (TextBlock tb : tbs) { + tb.setIsContent(!tb.isContent()); } + return true; + } + } diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/LabelToBoilerplateFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/LabelToBoilerplateFilter.java new file mode 100644 index 0000000..a7bc523 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/LabelToBoilerplateFilter.java @@ -0,0 +1,57 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; + +/** + * Marks all blocks that contain a given label as "boilerplate". + */ +public final class LabelToBoilerplateFilter implements BoilerpipeFilter { + public static final LabelToBoilerplateFilter INSTANCE_STRICTLY_NOT_CONTENT = + new LabelToBoilerplateFilter(DefaultLabels.STRICTLY_NOT_CONTENT); + + private String[] labels; + + public LabelToBoilerplateFilter(final String... label) { + this.labels = label; + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + + BLOCK_LOOP : for (TextBlock tb : doc.getTextBlocks()) { + if (tb.isContent()) { + for (String label : labels) { + if (tb.hasLabel(label)) { + tb.setIsContent(false); + changes = true; + continue BLOCK_LOOP; + } + } + } + } + + return changes; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/LabelToContentFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/LabelToContentFilter.java new file mode 100644 index 0000000..3daa874 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/LabelToContentFilter.java @@ -0,0 +1,53 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Marks all blocks that contain a given label as "content". + */ +public final class LabelToContentFilter implements BoilerpipeFilter { + private String[] labels; + + public LabelToContentFilter(final String... label) { + this.labels = label; + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + + BLOCK_LOOP : for (TextBlock tb : doc.getTextBlocks()) { + if (!tb.isContent()) { + for (String label : labels) { + if (tb.hasLabel(label)) { + tb.setIsContent(true); + changes = true; + continue BLOCK_LOOP; + } + } + } + } + + return changes; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MarkEverythingBoilerplateFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MarkEverythingBoilerplateFilter.java new file mode 100644 index 0000000..1856ff0 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MarkEverythingBoilerplateFilter.java @@ -0,0 +1,49 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Marks all blocks as boilerplate. + */ +public final class MarkEverythingBoilerplateFilter implements BoilerpipeFilter { + public static final MarkEverythingBoilerplateFilter INSTANCE = + new MarkEverythingBoilerplateFilter(); + + private MarkEverythingBoilerplateFilter() { + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + + for (TextBlock tb : doc.getTextBlocks()) { + if (tb.isContent()) { + tb.setIsContent(false); + changes = true; + } + } + + return changes; + + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MarkEverythingContentFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MarkEverythingContentFilter.java new file mode 100644 index 0000000..a2d9779 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MarkEverythingContentFilter.java @@ -0,0 +1,48 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Marks all blocks as content. + */ +public final class MarkEverythingContentFilter implements BoilerpipeFilter { + public static final MarkEverythingContentFilter INSTANCE = new MarkEverythingContentFilter(); + + private MarkEverythingContentFilter() { + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + + for (TextBlock tb : doc.getTextBlocks()) { + if (!tb.isContent()) { + tb.setIsContent(true); + changes = true; + } + } + + return changes; + + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MinClauseWordsFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MinClauseWordsFilter.java new file mode 100644 index 0000000..0c2899b --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MinClauseWordsFilter.java @@ -0,0 +1,108 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Keeps only blocks that have at least one segment fragment ("clause") with at least k + * words (default: 5). + * + * NOTE: You might consider using the {@link SplitParagraphBlocksFilter} upstream. + * + * @see SplitParagraphBlocksFilter + */ +public final class MinClauseWordsFilter implements BoilerpipeFilter { + public static final MinClauseWordsFilter INSTANCE = new MinClauseWordsFilter(5, false); + private int minWords; + private final boolean acceptClausesWithoutDelimiter; + + public MinClauseWordsFilter(final int minWords) { + this(minWords, false); + } + + public MinClauseWordsFilter(final int minWords, final boolean acceptClausesWithoutDelimiter) { + this.minWords = minWords; + this.acceptClausesWithoutDelimiter = acceptClausesWithoutDelimiter; + } + + private final Pattern PAT_CLAUSE_DELIMITER = Pattern + .compile("[\\p{L}\\d][\\,\\.\\:\\;\\!\\?]+([ \\n\\r]+|$)"); + private final Pattern PAT_WHITESPACE = Pattern.compile("[ \\n\\r]+"); + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + for (TextBlock tb : doc.getTextBlocks()) { + if (!tb.isContent()) { + continue; + } + final String text = tb.getText(); + + Matcher m = PAT_CLAUSE_DELIMITER.matcher(text); + boolean found = m.find(); + int start = 0; + int end; + boolean hasClause = false; + while (found) { + end = m.start() + 1; + hasClause = isClause(text.subSequence(start, end)); + start = m.end(); + + if (hasClause) { + break; + } + found = m.find(); + } + end = text.length(); + + // since clauses should *always end* with a delimiter, we normally + // don't consider text without one + if (acceptClausesWithoutDelimiter) { + hasClause |= isClause(text.subSequence(start, end)); + } + + if (!hasClause) { + tb.setIsContent(false); + changes = true; + // System.err.println("IS NOT CONTENT: " + text); + } + } + + return changes; + + } + + private boolean isClause(final CharSequence text) { + Matcher m = PAT_WHITESPACE.matcher(text); + int n = 1; + while (m.find()) { + n++; + if (n >= minWords) { + return true; + } + } + return n >= minWords; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MinWordsFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MinWordsFilter.java new file mode 100644 index 0000000..a3da35a --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/MinWordsFilter.java @@ -0,0 +1,53 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Keeps only those content blocks which contain at least k words. + */ +public final class MinWordsFilter implements BoilerpipeFilter { + private final int minWords; + + public MinWordsFilter(final int minWords) { + this.minWords = minWords; + } + + public boolean process(final TextDocument doc) throws BoilerpipeProcessingException { + + boolean changes = false; + + for (TextBlock tb : doc.getTextBlocks()) { + if (!tb.isContent()) { + continue; + } + if (tb.getNumWords() < minWords) { + tb.setIsContent(false); + changes = true; + } + + } + + return changes; + + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/SplitParagraphBlocksFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/SplitParagraphBlocksFilter.java new file mode 100644 index 0000000..4d7261e --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/SplitParagraphBlocksFilter.java @@ -0,0 +1,79 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Splits TextBlocks at paragraph boundaries. + * + * NOTE: This is not fully supported (i.e., it will break highlighting support via + * #getContainedTextElements()), but this one probably is necessary for some other filters. + * + * @see MinClauseWordsFilter + */ +public final class SplitParagraphBlocksFilter implements BoilerpipeFilter { + public static final SplitParagraphBlocksFilter INSTANCE = new SplitParagraphBlocksFilter(); + + /** + * Returns the singleton instance for TerminatingBlocksFinder. + */ + public static SplitParagraphBlocksFilter getInstance() { + return INSTANCE; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + boolean changes = false; + + final List blocks = doc.getTextBlocks(); + final List blocksNew = new ArrayList(); + + for (TextBlock tb : blocks) { + final String text = tb.getText(); + final String[] paragraphs = text.split("[\n\r]+"); + if (paragraphs.length < 2) { + blocksNew.add(tb); + continue; + } + final boolean isContent = tb.isContent(); + final Set labels = tb.getLabels(); + for (String p : paragraphs) { + final TextBlock tbP = new TextBlock(p); + tbP.setIsContent(isContent); + tbP.addLabels(labels); + blocksNew.add(tbP); + changes = true; + } + } + + if (changes) { + blocks.clear(); + blocks.addAll(blocksNew); + } + + return changes; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/SurroundingToContentFilter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/SurroundingToContentFilter.java new file mode 100644 index 0000000..95e6595 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/SurroundingToContentFilter.java @@ -0,0 +1,77 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.filters.simple; + +import java.util.Iterator; +import java.util.List; + +import com.kohlschutter.boilerpipe.BoilerpipeFilter; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.conditions.TextBlockCondition; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Marks blocks as "content" if their preceding and following blocks are both already marked + * "content", and the given {@link TextBlockCondition} is met. + */ +public class SurroundingToContentFilter implements BoilerpipeFilter { + public static final SurroundingToContentFilter INSTANCE_TEXT = new SurroundingToContentFilter( + new TextBlockCondition() { + + @Override + public boolean meetsCondition(TextBlock tb) { + return tb.getLinkDensity() == 0 && tb.getNumWords() > 6; + } + }); + + private final TextBlockCondition cond; + + public SurroundingToContentFilter(final TextBlockCondition cond) { + this.cond = cond; + } + + public boolean process(TextDocument doc) throws BoilerpipeProcessingException { + + List tbs = doc.getTextBlocks(); + if (tbs.size() < 3) { + return false; + } + + TextBlock a = tbs.get(0); + TextBlock b = tbs.get(1); + TextBlock c; + boolean hasChanges = false; + for (Iterator it = tbs.listIterator(2); it.hasNext();) { + c = it.next(); + if (!b.isContent() && a.isContent() && c.isContent() && cond.meetsCondition(b)) { + b.setIsContent(true); + hasChanges = true; + } + + a = c; + if (!it.hasNext()) { + break; + } + b = it.next(); + } + + return hasChanges; + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/package-info.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/package-info.java new file mode 100644 index 0000000..5c40ee1 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/filters/simple/package-info.java @@ -0,0 +1,5 @@ +/** + * These BoilerpipeFilters are straight-forward and probably not really specific to English. + */ +package com.kohlschutter.boilerpipe.filters.simple; + diff --git a/src/main/de/l3s/boilerpipe/labels/ConditionalLabelAction.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/ConditionalLabelAction.java similarity index 57% rename from src/main/de/l3s/boilerpipe/labels/ConditionalLabelAction.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/ConditionalLabelAction.java index 220e8df..042958c 100644 --- a/src/main/de/l3s/boilerpipe/labels/ConditionalLabelAction.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/ConditionalLabelAction.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009, 2010 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,29 +15,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe.labels; +package com.kohlschutter.boilerpipe.labels; -import de.l3s.boilerpipe.conditions.TextBlockCondition; -import de.l3s.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.conditions.TextBlockCondition; +import com.kohlschutter.boilerpipe.document.TextBlock; /** * Adds labels to a {@link TextBlock} if the given criteria are met. - * - * @author Christian Kohlschütter */ public final class ConditionalLabelAction extends LabelAction { - private final TextBlockCondition condition; + private final TextBlockCondition condition; - public ConditionalLabelAction(TextBlockCondition condition, - String... labels) { - super(labels); - this.condition = condition; - } + public ConditionalLabelAction(TextBlockCondition condition, String... labels) { + super(labels); + this.condition = condition; + } - public void addTo(final TextBlock tb) { - if (condition.meetsCondition(tb)) { - addLabelsTo(tb); - } + public void addTo(final TextBlock tb) { + if (condition.meetsCondition(tb)) { + addLabelsTo(tb); } + } } diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/DefaultLabels.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/DefaultLabels.java new file mode 100644 index 0000000..e3c244e --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/DefaultLabels.java @@ -0,0 +1,46 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.labels; + +import com.kohlschutter.boilerpipe.document.TextBlock; + +/** + * Some pre-defined labels which can be used in conjunction with {@link TextBlock#addLabel(String)} + * and {@link TextBlock#hasLabel(String)}. + */ +public final class DefaultLabels { + public static final String TITLE = "de.l3s.boilerpipe/TITLE"; + public static final String ARTICLE_METADATA = "de.l3s.boilerpipe/ARTICLE_METADATA"; + public static final String INDICATES_END_OF_TEXT = "de.l3s.boilerpipe/INDICATES_END_OF_TEXT"; + public static final String MIGHT_BE_CONTENT = "de.l3s.boilerpipe/MIGHT_BE_CONTENT"; + public static final String VERY_LIKELY_CONTENT = "de.l3s.boilerpipe/VERY_LIKELY_CONTENT"; + public static final String STRICTLY_NOT_CONTENT = "de.l3s.boilerpipe/STRICTLY_NOT_CONTENT"; + public static final String HR = "de.l3s.boilerpipe/HR"; + public static final String LI = "de.l3s.boilerpipe/LI"; + + public static final String HEADING = "de.l3s.boilerpipe/HEADING"; + public static final String H1 = "de.l3s.boilerpipe/H1"; + public static final String H2 = "de.l3s.boilerpipe/H2"; + public static final String H3 = "de.l3s.boilerpipe/H3"; + + public static final String MARKUP_PREFIX = "<"; + + private DefaultLabels() { + // not to be instantiated + } +} diff --git a/src/main/de/l3s/boilerpipe/labels/LabelAction.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/LabelAction.java similarity index 57% rename from src/main/de/l3s/boilerpipe/labels/LabelAction.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/LabelAction.java index b725f2e..a73a447 100644 --- a/src/main/de/l3s/boilerpipe/labels/LabelAction.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/labels/LabelAction.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009, 2010 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,34 +15,33 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe.labels; +package com.kohlschutter.boilerpipe.labels; import java.util.Arrays; -import de.l3s.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextBlock; /** * Helps adding labels to {@link TextBlock}s. * - * @author Christian Kohlschütter * @see ConditionalLabelAction */ public class LabelAction { - protected final String[] labels; - - public LabelAction(String... labels) { - this.labels = labels; - } - - public void addTo(final TextBlock tb) { - addLabelsTo(tb); - } - - protected final void addLabelsTo(final TextBlock tb) { - tb.addLabels(labels); - } - - public String toString() { - return super.toString()+"{"+Arrays.asList(labels)+"}"; - } + protected final String[] labels; + + public LabelAction(String... labels) { + this.labels = labels; + } + + public void addTo(final TextBlock tb) { + addLabelsTo(tb); + } + + protected final void addLabelsTo(final TextBlock tb) { + tb.addLabels(labels); + } + + public String toString() { + return super.toString() + "{" + Arrays.asList(labels) + "}"; + } } diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/package-info.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/package-info.java new file mode 100644 index 0000000..99b5704 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/package-info.java @@ -0,0 +1,4 @@ +/** + * The Boilerpipe top-level package. + */ +package com.kohlschutter.boilerpipe; diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeHTMLContentHandler.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeHTMLContentHandler.java new file mode 100644 index 0000000..8e597ba --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeHTMLContentHandler.java @@ -0,0 +1,441 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; + +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.labels.LabelAction; +import com.kohlschutter.boilerpipe.util.UnicodeTokenizer; + +/** + * A simple SAX {@link ContentHandler}, used by {@link BoilerpipeSAXInput}. Can be used by different + * parser implementations, e.g. NekoHTML and TagSoup. + */ +public class BoilerpipeHTMLContentHandler implements ContentHandler { + + private final Map tagActions; + private String title = null; + + static final String ANCHOR_TEXT_START = "$\ue00a<"; + static final String ANCHOR_TEXT_END = ">\ue00a$"; + + StringBuilder tokenBuffer = new StringBuilder(); + StringBuilder textBuffer = new StringBuilder(); + + int inBody = 0; + int inAnchor = 0; + int inIgnorableElement = 0; + + int tagLevel = 0; + int blockTagLevel = -1; + + boolean sbLastWasWhitespace = false; + private int textElementIdx = 0; + + private final List textBlocks = new ArrayList(); + + private String lastStartTag = null; + @SuppressWarnings("unused") + private String lastEndTag = null; + @SuppressWarnings("unused") + private Event lastEvent = null; + + private int offsetBlocks = 0; + private BitSet currentContainedTextElements = new BitSet(); + + private boolean flush = false; + boolean inAnchorText = false; + + LinkedList> labelStacks = new LinkedList>(); + LinkedList fontSizeStack = new LinkedList(); + + /** + * Recycles this instance. + */ + public void recycle() { + tokenBuffer.setLength(0); + textBuffer.setLength(0); + + inBody = 0; + inAnchor = 0; + inIgnorableElement = 0; + sbLastWasWhitespace = false; + textElementIdx = 0; + + textBlocks.clear(); + + lastStartTag = null; + lastEndTag = null; + lastEvent = null; + + offsetBlocks = 0; + currentContainedTextElements.clear(); + + flush = false; + inAnchorText = false; + } + + /** + * Constructs a {@link BoilerpipeHTMLContentHandler} using the {@link DefaultTagActionMap}. + */ + public BoilerpipeHTMLContentHandler() { + this(DefaultTagActionMap.INSTANCE); + } + + /** + * Constructs a {@link BoilerpipeHTMLContentHandler} using the given {@link TagActionMap}. + * + * @param tagActions The {@link TagActionMap} to use, e.g. {@link DefaultTagActionMap}. + */ + public BoilerpipeHTMLContentHandler(final TagActionMap tagActions) { + this.tagActions = tagActions; + } + + // @Override + public void endDocument() throws SAXException { + flushBlock(); + } + + // @Override + public void endPrefixMapping(String prefix) throws SAXException { + } + + // @Override + public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { + if (!sbLastWasWhitespace) { + textBuffer.append(' '); + tokenBuffer.append(' '); + } + sbLastWasWhitespace = true; + } + + // @Override + public void processingInstruction(String target, String data) throws SAXException { + } + + // @Override + public void setDocumentLocator(Locator locator) { + } + + // @Override + public void skippedEntity(String name) throws SAXException { + } + + // @Override + public void startDocument() throws SAXException { + } + + // @Override + public void startPrefixMapping(String prefix, String uri) throws SAXException { + } + + // @Override + public void startElement(String uri, String localName, String qName, Attributes atts) + throws SAXException { + labelStacks.add(null); + + TagAction ta = tagActions.get(localName); + if (ta != null) { + if (ta.changesTagLevel()) { + tagLevel++; + } + flush = ta.start(this, localName, qName, atts) | flush; + } else { + tagLevel++; + flush = true; + } + + lastEvent = Event.START_TAG; + lastStartTag = localName; + } + + // @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + TagAction ta = tagActions.get(localName); + if (ta != null) { + flush = ta.end(this, localName, qName) | flush; + } else { + flush = true; + } + + if (ta == null || ta.changesTagLevel()) { + tagLevel--; + } + + if (flush) { + flushBlock(); + } + + lastEvent = Event.END_TAG; + lastEndTag = localName; + + labelStacks.removeLast(); + } + + // @Override + public void characters(char[] ch, int start, int length) throws SAXException { + textElementIdx++; + + if (flush) { + flushBlock(); + flush = false; + } + + if (inIgnorableElement != 0) { + return; + } + + char c; + boolean startWhitespace = false; + boolean endWhitespace = false; + if (length == 0) { + return; + } + + final int end = start + length; + for (int i = start; i < end; i++) { + if (Character.isWhitespace(ch[i])) { + ch[i] = ' '; + } + } + while (start < end) { + c = ch[start]; + if (c == ' ') { + startWhitespace = true; + start++; + length--; + } else { + break; + } + } + while (length > 0) { + c = ch[start + length - 1]; + if (c == ' ') { + endWhitespace = true; + length--; + } else { + break; + } + } + if (length == 0) { + if (startWhitespace || endWhitespace) { + if (!sbLastWasWhitespace) { + textBuffer.append(' '); + tokenBuffer.append(' '); + } + sbLastWasWhitespace = true; + } else { + sbLastWasWhitespace = false; + } + lastEvent = Event.WHITESPACE; + return; + } + if (startWhitespace) { + if (!sbLastWasWhitespace) { + textBuffer.append(' '); + tokenBuffer.append(' '); + } + } + + if (blockTagLevel == -1) { + blockTagLevel = tagLevel; + } + + textBuffer.append(ch, start, length); + tokenBuffer.append(ch, start, length); + if (endWhitespace) { + textBuffer.append(' '); + tokenBuffer.append(' '); + } + + sbLastWasWhitespace = endWhitespace; + lastEvent = Event.CHARACTERS; + + currentContainedTextElements.set(textElementIdx); + } + + List getTextBlocks() { + return textBlocks; + } + + public void flushBlock() { + if (inBody == 0) { + if ("TITLE".equalsIgnoreCase(lastStartTag) && inBody == 0) { + setTitle(tokenBuffer.toString().trim()); + } + textBuffer.setLength(0); + tokenBuffer.setLength(0); + return; + } + + final int length = tokenBuffer.length(); + switch (length) { + case 0: + return; + case 1: + if (sbLastWasWhitespace) { + textBuffer.setLength(0); + tokenBuffer.setLength(0); + return; + } + } + final String[] tokens = UnicodeTokenizer.tokenize(tokenBuffer); + + int numWords = 0; + int numLinkedWords = 0; + int numWrappedLines = 0; + int currentLineLength = -1; // don't count the first space + final int maxLineLength = 80; + int numTokens = 0; + int numWordsCurrentLine = 0; + + for (String token : tokens) { + if (ANCHOR_TEXT_START.equals(token)) { + inAnchorText = true; + } else if (ANCHOR_TEXT_END.equals(token)) { + inAnchorText = false; + } else if (isWord(token)) { + numTokens++; + numWords++; + numWordsCurrentLine++; + if (inAnchorText) { + numLinkedWords++; + } + final int tokenLength = token.length(); + currentLineLength += tokenLength + 1; + if (currentLineLength > maxLineLength) { + numWrappedLines++; + currentLineLength = tokenLength; + numWordsCurrentLine = 1; + } + } else { + numTokens++; + } + } + if (numTokens == 0) { + return; + } + int numWordsInWrappedLines; + if (numWrappedLines == 0) { + numWordsInWrappedLines = numWords; + numWrappedLines = 1; + } else { + numWordsInWrappedLines = numWords - numWordsCurrentLine; + } + + TextBlock tb = + new TextBlock(textBuffer.toString().trim(), currentContainedTextElements, numWords, + numLinkedWords, numWordsInWrappedLines, numWrappedLines, offsetBlocks); + currentContainedTextElements = new BitSet(); + + offsetBlocks++; + + textBuffer.setLength(0); + tokenBuffer.setLength(0); + + tb.setTagLevel(blockTagLevel); + addTextBlock(tb); + blockTagLevel = -1; + } + + protected void addTextBlock(final TextBlock tb) { + + for (Integer l : fontSizeStack) { + if (l != null) { + tb.addLabel("font-" + l); + break; + } + } + for (LinkedList labelStack : labelStacks) { + if (labelStack != null) { + for (LabelAction labels : labelStack) { + if (labels != null) { + labels.addTo(tb); + } + } + } + } + + textBlocks.add(tb); + } + + private static final Pattern PAT_VALID_WORD_CHARACTER = Pattern + .compile("[\\p{L}\\p{Nd}\\p{Nl}\\p{No}]"); + + private static boolean isWord(final String token) { + return PAT_VALID_WORD_CHARACTER.matcher(token).find(); + } + + static private enum Event { + START_TAG, END_TAG, CHARACTERS, WHITESPACE + } + + public String getTitle() { + return title; + } + + public void setTitle(String s) { + if (s == null || s.length() == 0) { + return; + } + title = s; + } + + /** + * Returns a {@link TextDocument} containing the extracted {@link TextBlock} s. NOTE: Only call + * this after parsing. + * + * @return The {@link TextDocument} + */ + public TextDocument toTextDocument() { + // just to be sure + flushBlock(); + + return new TextDocument(getTitle(), getTextBlocks()); + } + + public void addWhitespaceIfNecessary() { + if (!sbLastWasWhitespace) { + tokenBuffer.append(' '); + textBuffer.append(' '); + sbLastWasWhitespace = true; + } + } + + public void addLabelAction(final LabelAction la) throws IllegalStateException { + LinkedList labelStack = labelStacks.getLast(); + if (labelStack == null) { + labelStack = new LinkedList(); + labelStacks.removeLast(); + labelStacks.add(labelStack); + } + labelStack.add(la); + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeHTMLParser.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeHTMLParser.java new file mode 100644 index 0000000..22b75df --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeHTMLParser.java @@ -0,0 +1,75 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import org.apache.xerces.parsers.AbstractSAXParser; + +import com.kohlschutter.boilerpipe.BoilerpipeDocumentSource; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.org.cyberneko.html.HTMLConfiguration; + +/** + * A simple SAX Parser, used by {@link BoilerpipeSAXInput}. The parser uses CyberNeko to parse HTML content. + */ +public class BoilerpipeHTMLParser extends AbstractSAXParser implements BoilerpipeDocumentSource { + + private BoilerpipeHTMLContentHandler contentHandler; + + /** + * Constructs a {@link BoilerpipeHTMLParser} using a default HTML content handler. + */ + public BoilerpipeHTMLParser() { + this(new BoilerpipeHTMLContentHandler()); + } + + /** + * Constructs a {@link BoilerpipeHTMLParser} using the given {@link BoilerpipeHTMLContentHandler}. + * + * @param contentHandler + */ + public BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler contentHandler) { + super(new HTMLConfiguration()); + setContentHandler(contentHandler); + } + + protected BoilerpipeHTMLParser(boolean ignore) { + super(new HTMLConfiguration()); + } + + public void setContentHandler(final BoilerpipeHTMLContentHandler contentHandler) { + this.contentHandler = contentHandler; + super.setContentHandler(contentHandler); + } + + public void setContentHandler(final org.xml.sax.ContentHandler contentHandler) { + this.contentHandler = null; + super.setContentHandler(contentHandler); + } + + /** + * Returns a {@link TextDocument} containing the extracted {@link TextBlock} s. NOTE: Only call + * this after {@link #parse(org.xml.sax.InputSource)}. + * + * @return The {@link TextDocument} + */ + public TextDocument toTextDocument() { + return contentHandler.toTextDocument(); + } +} \ No newline at end of file diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeSAXInput.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeSAXInput.java new file mode 100644 index 0000000..18606b2 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/BoilerpipeSAXInput.java @@ -0,0 +1,72 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.io.IOException; + +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import com.kohlschutter.boilerpipe.BoilerpipeInput; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextDocument; + +/** + * Parses an {@link InputSource} using SAX and returns a {@link TextDocument}. + */ +public final class BoilerpipeSAXInput implements BoilerpipeInput { + private final InputSource is; + + /** + * Creates a new instance of {@link BoilerpipeSAXInput} for the given {@link InputSource}. + * + * @param is + * @throws SAXException + */ + public BoilerpipeSAXInput(final InputSource is) throws SAXException { + this.is = is; + } + + /** + * Retrieves the {@link TextDocument} using a default HTML parser. + */ + public TextDocument getTextDocument() throws BoilerpipeProcessingException { + return getTextDocument(new BoilerpipeHTMLParser()); + } + + /** + * Retrieves the {@link TextDocument} using the given HTML parser. + * + * @param parser The parser used to transform the input into boilerpipe's internal representation. + * @return The retrieved {@link TextDocument} + * @throws BoilerpipeProcessingException + */ + public TextDocument getTextDocument(final BoilerpipeHTMLParser parser) + throws BoilerpipeProcessingException { + try { + parser.parse(is); + } catch (IOException e) { + throw new BoilerpipeProcessingException(e); + } catch (SAXException e) { + throw new BoilerpipeProcessingException(e); + } + + return parser.toTextDocument(); + } + +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/CommonTagActions.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/CommonTagActions.java new file mode 100644 index 0000000..0e2eabd --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/CommonTagActions.java @@ -0,0 +1,343 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.labels.LabelAction; + +/** + * Defines an action that is to be performed whenever a particular tag occurs during HTML parsing. + */ +public abstract class CommonTagActions { + + private CommonTagActions() { + } + + public static final class Chained implements TagAction { + + private final TagAction t1; + private final TagAction t2; + + public Chained(final TagAction t1, final TagAction t2) { + this.t1 = t1; + this.t2 = t2; + } + + public boolean start(BoilerpipeHTMLContentHandler instance, String localName, String qName, + Attributes atts) throws SAXException { + return t1.start(instance, localName, qName, atts) + | t2.start(instance, localName, qName, atts); + } + + public boolean end(BoilerpipeHTMLContentHandler instance, String localName, String qName) + throws SAXException { + return t1.end(instance, localName, qName) | t2.end(instance, localName, qName); + } + + public boolean changesTagLevel() { + return t1.changesTagLevel() || t2.changesTagLevel(); + } + } + + /** + * Marks this tag as "ignorable", i.e. all its inner content is silently skipped. + */ + public static final TagAction TA_IGNORABLE_ELEMENT = new TagAction() { + + public boolean start(final BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) { + instance.inIgnorableElement++; + return true; + } + + public boolean end(final BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + instance.inIgnorableElement--; + return true; + } + + public boolean changesTagLevel() { + return true; + } + }; + + /** + * Marks this tag as "anchor" (this should usually only be set for the <A> + * tag). Anchor tags may not be nested. + * + * There is a bug in certain versions of NekoHTML which still allows nested tags. If boilerpipe + * encounters such nestings, a SAXException is thrown. + */ + public static final TagAction TA_ANCHOR_TEXT = new TagAction() { + + public boolean start(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) throws SAXException { + if (instance.inAnchor++ > 0) { + // as nested A elements are not allowed per specification, we + // are probably reaching this branch due to a bug in the XML + // parser + System.err + .println("Warning: SAX input contains nested A elements -- You have probably hit a bug in your HTML parser (e.g., NekoHTML bug #2909310). Please clean the HTML externally and feed it to boilerpipe again. Trying to recover somehow..."); + + end(instance, localName, qName); + } + if (instance.inIgnorableElement == 0) { + instance.addWhitespaceIfNecessary(); + instance.tokenBuffer.append(BoilerpipeHTMLContentHandler.ANCHOR_TEXT_START); + instance.tokenBuffer.append(' '); + instance.sbLastWasWhitespace = true; + } + return false; + } + + public boolean end(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + if (--instance.inAnchor == 0) { + if (instance.inIgnorableElement == 0) { + instance.addWhitespaceIfNecessary(); + instance.tokenBuffer.append(BoilerpipeHTMLContentHandler.ANCHOR_TEXT_END); + instance.tokenBuffer.append(' '); + instance.sbLastWasWhitespace = true; + } + } + return false; + } + + public boolean changesTagLevel() { + return true; + } + }; + + /** + * Marks this tag the body element (this should usually only be set for the + * <BODY> tag). + */ + public static final TagAction TA_BODY = new TagAction() { + public boolean start(final BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) { + instance.flushBlock(); + instance.inBody++; + return false; + } + + public boolean end(final BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + instance.flushBlock(); + instance.inBody--; + return false; + } + + public boolean changesTagLevel() { + return true; + } + }; + + /** + * Marks this tag a simple "inline" element, which generates whitespace, but no new block. + */ + public static final TagAction TA_INLINE_WHITESPACE = new TagAction() { + + public boolean start(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) { + instance.addWhitespaceIfNecessary(); + return false; + } + + public boolean end(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + instance.addWhitespaceIfNecessary(); + return false; + } + + public boolean changesTagLevel() { + return false; + } + }; + + /** + * @deprecated Use {@link #TA_INLINE_WHITESPACE} instead + */ + @Deprecated + public static final TagAction TA_INLINE = TA_INLINE_WHITESPACE; + + /** + * Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block. + */ + public static final TagAction TA_INLINE_NO_WHITESPACE = new TagAction() { + + public boolean start(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) { + return false; + } + + public boolean end(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + return false; + } + + public boolean changesTagLevel() { + return false; + } + }; + private static final Pattern PAT_FONT_SIZE = Pattern.compile("([\\+\\-]?)([0-9])"); + + /** + * Explicitly marks this tag a simple "block-level" element, which always generates whitespace + */ + public static final TagAction TA_BLOCK_LEVEL = new TagAction() { + + public boolean start(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) { + return true; + } + + public boolean end(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + return true; + } + + public boolean changesTagLevel() { + return true; + } + }; + + /** + * Special TagAction for the <FONT> tag, which keeps track of the absolute and + * relative font size. + */ + public static final TagAction TA_FONT = new TagAction() { + + public boolean start(final BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) { + + String sizeAttr = atts.getValue("size"); + if (sizeAttr != null) { + Matcher m = PAT_FONT_SIZE.matcher(sizeAttr); + if (m.matches()) { + String rel = m.group(1); + final int val = Integer.parseInt(m.group(2)); + final int size; + if (rel.length() == 0) { + // absolute + size = val; + } else { + // relative + int prevSize; + if (instance.fontSizeStack.isEmpty()) { + prevSize = 3; + } else { + prevSize = 3; + for (Integer s : instance.fontSizeStack) { + if (s != null) { + prevSize = s; + break; + } + } + } + if (rel.charAt(0) == '+') { + size = prevSize + val; + } else { + size = prevSize - val; + } + + } + instance.fontSizeStack.add(0, size); + } else { + instance.fontSizeStack.add(0, null); + } + } else { + instance.fontSizeStack.add(0, null); + } + return false; + } + + public boolean end(final BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + instance.fontSizeStack.removeFirst(); + return false; + } + + public boolean changesTagLevel() { + return false; + } + }; + + /** + * {@link CommonTagActions} for inline elements, which triggers some {@link LabelAction} on the + * generated {@link TextBlock}. + */ + public static final class InlineTagLabelAction implements TagAction { + + private final LabelAction action; + + public InlineTagLabelAction(final LabelAction action) { + this.action = action; + } + + public boolean start(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) { + instance.addWhitespaceIfNecessary(); + instance.addLabelAction(action); + return false; + } + + public boolean end(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + instance.addWhitespaceIfNecessary(); + return false; + } + + public boolean changesTagLevel() { + return false; + } + } + + /** + * {@link CommonTagActions} for block-level elements, which triggers some {@link LabelAction} on + * the generated {@link TextBlock}. + */ + public static final class BlockTagLabelAction implements TagAction { + + private final LabelAction action; + + public BlockTagLabelAction(final LabelAction action) { + this.action = action; + } + + public boolean start(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) { + instance.addLabelAction(action); + return true; + } + + public boolean end(BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) { + return true; + } + + public boolean changesTagLevel() { + return true; + } + } +} \ No newline at end of file diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/DefaultTagActionMap.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/DefaultTagActionMap.java new file mode 100644 index 0000000..58c4ed0 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/DefaultTagActionMap.java @@ -0,0 +1,81 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import com.kohlschutter.boilerpipe.labels.DefaultLabels; +import com.kohlschutter.boilerpipe.labels.LabelAction; + +/** + * Default {@link TagAction}s. Seem to work well. + */ +public class DefaultTagActionMap extends TagActionMap { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public static final TagActionMap INSTANCE = new DefaultTagActionMap(); + + protected DefaultTagActionMap() { + setTagAction("STYLE", CommonTagActions.TA_IGNORABLE_ELEMENT); + setTagAction("SCRIPT", CommonTagActions.TA_IGNORABLE_ELEMENT); + setTagAction("OPTION", CommonTagActions.TA_IGNORABLE_ELEMENT); + setTagAction("OBJECT", CommonTagActions.TA_IGNORABLE_ELEMENT); + setTagAction("EMBED", CommonTagActions.TA_IGNORABLE_ELEMENT); + setTagAction("APPLET", CommonTagActions.TA_IGNORABLE_ELEMENT); + setTagAction("LINK", CommonTagActions.TA_IGNORABLE_ELEMENT); + + setTagAction("A", CommonTagActions.TA_ANCHOR_TEXT); + setTagAction("BODY", CommonTagActions.TA_BODY); + + setTagAction("STRIKE", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("U", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("B", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("I", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("EM", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("STRONG", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("SPAN", CommonTagActions.TA_INLINE_NO_WHITESPACE); + + // New in 1.1 (especially to improve extraction quality from Wikipedia etc.) + setTagAction("SUP", CommonTagActions.TA_INLINE_NO_WHITESPACE); + + // New in 1.2 + setTagAction("CODE", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("TT", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("SUB", CommonTagActions.TA_INLINE_NO_WHITESPACE); + setTagAction("VAR", CommonTagActions.TA_INLINE_NO_WHITESPACE); + + setTagAction("ABBR", CommonTagActions.TA_INLINE_WHITESPACE); + setTagAction("ACRONYM", CommonTagActions.TA_INLINE_WHITESPACE); + + setTagAction("FONT", CommonTagActions.TA_INLINE_NO_WHITESPACE); // could also use TA_FONT + + // added in 1.1.1 + setTagAction("NOSCRIPT", CommonTagActions.TA_IGNORABLE_ELEMENT); + + // New in 1.3 + setTagAction("LI", new CommonTagActions.BlockTagLabelAction(new LabelAction(DefaultLabels.LI))); + setTagAction("H1", new CommonTagActions.BlockTagLabelAction(new LabelAction(DefaultLabels.H1, + DefaultLabels.HEADING))); + setTagAction("H2", new CommonTagActions.BlockTagLabelAction(new LabelAction(DefaultLabels.H2, + DefaultLabels.HEADING))); + setTagAction("H3", new CommonTagActions.BlockTagLabelAction(new LabelAction(DefaultLabels.H3, + DefaultLabels.HEADING))); + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLDocument.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLDocument.java new file mode 100644 index 0000000..2eecc11 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLDocument.java @@ -0,0 +1,56 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.io.ByteArrayInputStream; +import java.nio.charset.Charset; + +import org.xml.sax.InputSource; + +/** + * An {@link InputSourceable} for {@link HTMLFetcher}. + */ +public class HTMLDocument implements InputSourceable { + private final Charset charset; + private final byte[] data; + + public HTMLDocument(final byte[] data, final Charset charset) { + this.data = data; + this.charset = charset; + } + + public HTMLDocument(final String data) { + Charset cs = Charset.forName("utf-8"); + this.data = data.getBytes(cs); + this.charset = cs; + } + + public Charset getCharset() { + return charset; + } + + public byte[] getData() { + return data; + } + + public InputSource toInputSource() { + final InputSource is = new InputSource(new ByteArrayInputStream(data)); + is.setEncoding(charset.name()); + return is; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLFetcher.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLFetcher.java new file mode 100644 index 0000000..ba588e9 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLFetcher.java @@ -0,0 +1,91 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.Charset; +import java.nio.charset.UnsupportedCharsetException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.zip.GZIPInputStream; + +/** + * A very simple HTTP/HTML fetcher, really just for demo purposes. + */ +public class HTMLFetcher { + private HTMLFetcher() { + } + + private static final Pattern PAT_CHARSET = Pattern.compile("charset=([^; ]+)$"); + + /** + * Fetches the document at the given URL, using {@link URLConnection}. + * + * @param url + * @return + * @throws IOException + */ + public static HTMLDocument fetch(final URL url) throws IOException { + final URLConnection conn = url.openConnection(); + final String ct = conn.getContentType(); + + if (ct == null || !(ct.equals("text/html") || ct.startsWith("text/html;"))) { + throw new IOException("Unsupported content type: " + ct); + } + + Charset cs = Charset.forName("Cp1252"); + if (ct != null) { + Matcher m = PAT_CHARSET.matcher(ct); + if (m.find()) { + final String charset = m.group(1); + try { + cs = Charset.forName(charset); + } catch (UnsupportedCharsetException e) { + // keep default + } + } + } + + InputStream in = conn.getInputStream(); + + final String encoding = conn.getContentEncoding(); + if (encoding != null) { + if ("gzip".equalsIgnoreCase(encoding)) { + in = new GZIPInputStream(in); + } else { + System.err.println("WARN: unsupported Content-Encoding: " + encoding); + } + } + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] buf = new byte[4096]; + int r; + while ((r = in.read(buf)) != -1) { + bos.write(buf, 0, r); + } + in.close(); + + final byte[] data = bos.toByteArray(); + + return new HTMLDocument(data, cs); + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLHighlighter.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLHighlighter.java new file mode 100644 index 0000000..682a634 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/HTMLHighlighter.java @@ -0,0 +1,503 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.io.IOException; +import java.io.StringReader; +import java.net.URL; +import java.util.BitSet; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.xerces.parsers.AbstractSAXParser; +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; + +import com.kohlschutter.boilerpipe.BoilerpipeExtractor; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.org.cyberneko.html.HTMLConfiguration; + +/** + * Highlights text blocks in an HTML document that have been marked as "content" in the + * corresponding {@link TextDocument}. + */ +public final class HTMLHighlighter { + + private Map> tagWhitelist = null; + + /** + * Creates a new {@link HTMLHighlighter}, which is set-up to return the full HTML text, with the + * extracted text portion highlighted. + */ + public static HTMLHighlighter newHighlightingInstance() { + return new HTMLHighlighter(false); + } + + /** + * Creates a new {@link HTMLHighlighter}, which is set-up to return only the extracted HTML text, + * including enclosed markup. + */ + public static HTMLHighlighter newExtractingInstance() { + return new HTMLHighlighter(true); + } + + private HTMLHighlighter(final boolean extractHTML) { + if (extractHTML) { + setOutputHighlightOnly(true); + setExtraStyleSheet("\n\n"); + setPreHighlight(""); + setPostHighlight(""); + } + } + + /** + * Processes the given {@link TextDocument} and the original HTML text (as a String). + * + * @param doc The processed {@link TextDocument}. + * @param origHTML The original HTML document. + * @return The highlighted HTML. + * @throws BoilerpipeProcessingException + */ + public String process(final TextDocument doc, final String origHTML) + throws BoilerpipeProcessingException { + return process(doc, new InputSource(new StringReader(origHTML))); + } + + /** + * Processes the given {@link TextDocument} and the original HTML text (as an {@link InputSource} + * ). + * + * @param doc The processed {@link TextDocument}. + * @param is The original HTML document. + * @return The highlighted HTML. + * @throws BoilerpipeProcessingException + */ + public String process(final TextDocument doc, final InputSource is) + throws BoilerpipeProcessingException { + final Implementation implementation = new Implementation(); + implementation.process(doc, is); + + String html = implementation.html.toString(); + if (outputHighlightOnly) { + Matcher m; + + boolean repeat = true; + while (repeat) { + repeat = false; + m = PAT_TAG_NO_TEXT.matcher(html); + if (m.find()) { + repeat = true; + html = m.replaceAll(""); + } + + m = PAT_SUPER_TAG.matcher(html); + if (m.find()) { + repeat = true; + html = m.replaceAll(m.group(1)); + } + } + } + + return html; + } + + private static final Pattern PAT_TAG_NO_TEXT = Pattern.compile("<[^/][^>]*>]*>"); + private static final Pattern PAT_SUPER_TAG = Pattern.compile("^<[^>]*>(<.*?>)]*>$"); + + /** + * Fetches the given {@link URL} using {@link HTMLFetcher} and processes the retrieved HTML using + * the specified {@link BoilerpipeExtractor}. + * + * @param doc The processed {@link TextDocument}. + * @param is The original HTML document. + * @return The highlighted HTML. + * @throws BoilerpipeProcessingException + */ + public String process(final URL url, final BoilerpipeExtractor extractor) throws IOException, + BoilerpipeProcessingException, SAXException { + final HTMLDocument htmlDoc = HTMLFetcher.fetch(url); + + final TextDocument doc = new BoilerpipeSAXInput(htmlDoc.toInputSource()).getTextDocument(); + extractor.process(doc); + + final InputSource is = htmlDoc.toInputSource(); + + return process(doc, is); + } + + private boolean outputHighlightOnly = false; + private String extraStyleSheet = "\n\n"; + private String preHighlight = ""; + private String postHighlight = ""; + + /** + * If true, only HTML enclosed within highlighted content will be returned + */ + public boolean isOutputHighlightOnly() { + return outputHighlightOnly; + } + + /** + * Sets whether only HTML enclosed within highlighted content will be returned, or the whole HTML + * document. + */ + public void setOutputHighlightOnly(boolean outputHighlightOnly) { + this.outputHighlightOnly = outputHighlightOnly; + } + + /** + * Returns the extra stylesheet definition that will be inserted in the HEAD element. + * + * By default, this corresponds to a simple definition that marks text in class + * "x-boilerpipe-mark1" as inline text with yellow background. + */ + public String getExtraStyleSheet() { + return extraStyleSheet; + } + + /** + * Sets the extra stylesheet definition that will be inserted in the HEAD element. + * + * To disable, set it to the empty string: "" + * + * @param extraStyleSheet Plain HTML + */ + public void setExtraStyleSheet(String extraStyleSheet) { + this.extraStyleSheet = extraStyleSheet; + } + + /** + * Returns the string that will be inserted before any highlighted HTML block. + * + * By default, this corresponds to <span class=&qupt;x-boilerpipe-mark1"> + */ + public String getPreHighlight() { + return preHighlight; + } + + /** + * Sets the string that will be inserted prior to any highlighted HTML block. + * + * To disable, set it to the empty string: "" + */ + public void setPreHighlight(String preHighlight) { + this.preHighlight = preHighlight; + } + + /** + * Returns the string that will be inserted after any highlighted HTML block. + * + * By default, this corresponds to </span> + */ + public String getPostHighlight() { + return postHighlight; + } + + /** + * Sets the string that will be inserted after any highlighted HTML block. + * + * To disable, set it to the empty string: "" + */ + public void setPostHighlight(String postHighlight) { + this.postHighlight = postHighlight; + } + + private abstract static class TagAction { + void beforeStart(final Implementation instance, final String localName) { + } + + void afterStart(final Implementation instance, final String localName) { + } + + void beforeEnd(final Implementation instance, final String localName) { + } + + void afterEnd(final Implementation instance, final String localName) { + } + } + + private static final TagAction TA_IGNORABLE_ELEMENT = new TagAction() { + void beforeStart(final Implementation instance, final String localName) { + instance.inIgnorableElement++; + } + + void afterEnd(final Implementation instance, final String localName) { + instance.inIgnorableElement--; + } + }; + + private static final TagAction TA_HEAD = new TagAction() { + void beforeStart(final Implementation instance, final String localName) { + instance.inIgnorableElement++; + } + + void beforeEnd(final Implementation instance, String localName) { + instance.html.append(instance.hl.extraStyleSheet); + } + + void afterEnd(final Implementation instance, final String localName) { + instance.inIgnorableElement--; + } + }; + private static Map TAG_ACTIONS = new HashMap(); + static { + TAG_ACTIONS.put("STYLE", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("SCRIPT", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("OPTION", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("NOSCRIPT", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("OBJECT", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("EMBED", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("APPLET", TA_IGNORABLE_ELEMENT); + // NOTE: you might want to comment this out: + TAG_ACTIONS.put("LINK", TA_IGNORABLE_ELEMENT); + + TAG_ACTIONS.put("HEAD", TA_HEAD); + } + + private final class Implementation extends AbstractSAXParser implements ContentHandler { + StringBuilder html = new StringBuilder(); + + private int inIgnorableElement = 0; + private int characterElementIdx = 0; + private final BitSet contentBitSet = new BitSet(); + private final HTMLHighlighter hl = HTMLHighlighter.this; + + Implementation() { + super(new HTMLConfiguration()); + setContentHandler(this); + } + + void process(final TextDocument doc, final InputSource is) throws BoilerpipeProcessingException { + for (TextBlock block : doc.getTextBlocks()) { + if (block.isContent()) { + final BitSet bs = block.getContainedTextElements(); + if (bs != null) { + contentBitSet.or(bs); + } + } + } + + try { + parse(is); + } catch (SAXException e) { + throw new BoilerpipeProcessingException(e); + } catch (IOException e) { + throw new BoilerpipeProcessingException(e); + } + } + + public void endDocument() throws SAXException { + } + + public void endPrefixMapping(String prefix) throws SAXException { + } + + public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { + } + + public void processingInstruction(String target, String data) throws SAXException { + } + + public void setDocumentLocator(Locator locator) { + } + + public void skippedEntity(String name) throws SAXException { + } + + public void startDocument() throws SAXException { + } + + public void startElement(String uri, String localName, String qName, Attributes atts) + throws SAXException { + TagAction ta = TAG_ACTIONS.get(localName); + if (ta != null) { + ta.beforeStart(this, localName); + } + + // HACK: remove existing highlight + boolean ignoreAttrs = false; + if ("SPAN".equalsIgnoreCase(localName)) { + String classVal = atts.getValue("class"); + if ("x-boilerpipe-mark1".equals(classVal)) { + ignoreAttrs = true; + } + } + + try { + if (inIgnorableElement == 0) { + if (outputHighlightOnly) { + // boolean highlight = contentBitSet + // .get(characterElementIdx); + + // if (!highlight) { + // return; + // } + } + + final Set whitelistAttributes; + if (tagWhitelist == null) { + whitelistAttributes = null; + } else { + whitelistAttributes = tagWhitelist.get(qName); + if (whitelistAttributes == null) { + // skip + return; + } + } + + html.append('<'); + html.append(qName); + if (!ignoreAttrs) { + final int numAtts = atts.getLength(); + for (int i = 0; i < numAtts; i++) { + final String attr = atts.getQName(i); + + if (whitelistAttributes != null && !whitelistAttributes.contains(attr)) { + // skip + continue; + } + + final String value = atts.getValue(i); + html.append(' '); + html.append(attr); + html.append("=\""); + html.append(xmlEncode(value)); + html.append("\""); + } + } + html.append('>'); + } + } finally { + if (ta != null) { + ta.afterStart(this, localName); + } + } + } + + public void endElement(String uri, String localName, String qName) throws SAXException { + TagAction ta = TAG_ACTIONS.get(localName); + if (ta != null) { + ta.beforeEnd(this, localName); + } + + try { + if (inIgnorableElement == 0) { + if (outputHighlightOnly) { + // boolean highlight = contentBitSet + // .get(characterElementIdx); + + // if (!highlight) { + // return; + // } + } + + if (tagWhitelist != null && !tagWhitelist.containsKey(qName)) { + // skip + return; + } + + html.append("'); + } + } finally { + if (ta != null) { + ta.afterEnd(this, localName); + } + } + } + + public void characters(char[] ch, int start, int length) throws SAXException { + characterElementIdx++; + if (inIgnorableElement == 0) { + + boolean highlight = contentBitSet.get(characterElementIdx); + + if (!highlight && outputHighlightOnly) { + return; + } + + if (highlight) { + html.append(preHighlight); + } + html.append(xmlEncode(String.valueOf(ch, start, length))); + if (highlight) { + html.append(postHighlight); + } + } + } + + public void startPrefixMapping(String prefix, String uri) throws SAXException { + } + + } + + private static String xmlEncode(final String in) { + if (in == null) { + return ""; + } + char c; + StringBuilder out = new StringBuilder(in.length()); + + for (int i = 0; i < in.length(); i++) { + c = in.charAt(i); + switch (c) { + case '<': + out.append("<"); + break; + case '>': + out.append(">"); + break; + case '&': + out.append("&"); + break; + case '"': + out.append("""); + break; + default: + out.append(c); + } + } + + return out.toString(); + } + + public Map> getTagWhitelist() { + return tagWhitelist; + } + + public void setTagWhitelist(Map> tagWhitelist) { + this.tagWhitelist = tagWhitelist; + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/ImageExtractor.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/ImageExtractor.java new file mode 100644 index 0000000..5cc6b14 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/ImageExtractor.java @@ -0,0 +1,278 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.io.IOException; +import java.io.StringReader; +import java.net.URL; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.xerces.parsers.AbstractSAXParser; +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; + +import com.kohlschutter.boilerpipe.BoilerpipeExtractor; +import com.kohlschutter.boilerpipe.BoilerpipeProcessingException; +import com.kohlschutter.boilerpipe.document.Image; +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.org.cyberneko.html.HTMLConfiguration; + +/** + * Extracts the images that are enclosed by extracted content. + */ +public final class ImageExtractor { + public static final ImageExtractor INSTANCE = new ImageExtractor(); + + /** + * Returns the singleton instance of {@link ImageExtractor}. + * + * @return + */ + public static ImageExtractor getInstance() { + return INSTANCE; + } + + private ImageExtractor() { + } + + /** + * Processes the given {@link TextDocument} and the original HTML text (as a String). + * + * @param doc The processed {@link TextDocument}. + * @param origHTML The original HTML document. + * @return A List of enclosed {@link Image}s + * @throws BoilerpipeProcessingException + */ + public List process(final TextDocument doc, final String origHTML) + throws BoilerpipeProcessingException { + return process(doc, new InputSource(new StringReader(origHTML))); + } + + /** + * Processes the given {@link TextDocument} and the original HTML text (as an {@link InputSource} + * ). + * + * @param doc The processed {@link TextDocument}. + * @param origHTML The original HTML document. + * @return A List of enclosed {@link Image}s + * @throws BoilerpipeProcessingException + */ + public List process(final TextDocument doc, final InputSource is) + throws BoilerpipeProcessingException { + final Implementation implementation = new Implementation(); + implementation.process(doc, is); + + return implementation.linksHighlight; + } + + /** + * Fetches the given {@link URL} using {@link HTMLFetcher} and processes the retrieved HTML using + * the specified {@link BoilerpipeExtractor}. + * + * @param doc The processed {@link TextDocument}. + * @param is The original HTML document. + * @return A List of enclosed {@link Image}s + * @throws BoilerpipeProcessingException + */ + public List process(final URL url, final BoilerpipeExtractor extractor) + throws IOException, BoilerpipeProcessingException, SAXException { + final HTMLDocument htmlDoc = HTMLFetcher.fetch(url); + + final TextDocument doc = new BoilerpipeSAXInput(htmlDoc.toInputSource()).getTextDocument(); + extractor.process(doc); + + final InputSource is = htmlDoc.toInputSource(); + + return process(doc, is); + } + + private final class Implementation extends AbstractSAXParser implements ContentHandler { + List linksHighlight = new ArrayList(); + private List linksBuffer = new ArrayList(); + + private int inIgnorableElement = 0; + private int characterElementIdx = 0; + private final BitSet contentBitSet = new BitSet(); + + private boolean inHighlight = false; + + Implementation() { + super(new HTMLConfiguration()); + setContentHandler(this); + } + + void process(final TextDocument doc, final InputSource is) throws BoilerpipeProcessingException { + for (TextBlock block : doc.getTextBlocks()) { + if (block.isContent()) { + final BitSet bs = block.getContainedTextElements(); + if (bs != null) { + contentBitSet.or(bs); + } + } + } + + try { + parse(is); + } catch (SAXException e) { + throw new BoilerpipeProcessingException(e); + } catch (IOException e) { + throw new BoilerpipeProcessingException(e); + } + } + + public void endDocument() throws SAXException { + } + + public void endPrefixMapping(String prefix) throws SAXException { + } + + public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { + } + + public void processingInstruction(String target, String data) throws SAXException { + } + + public void setDocumentLocator(Locator locator) { + } + + public void skippedEntity(String name) throws SAXException { + } + + public void startDocument() throws SAXException { + } + + public void startElement(String uri, String localName, String qName, Attributes atts) + throws SAXException { + TagAction ta = TAG_ACTIONS.get(localName); + if (ta != null) { + ta.beforeStart(this, localName); + } + + try { + if (inIgnorableElement == 0) { + if (inHighlight && "IMG".equalsIgnoreCase(localName)) { + String src = atts.getValue("src"); + if (src != null && src.length() > 0) { + linksBuffer.add(new Image(src, atts.getValue("width"), atts.getValue("height"), atts + .getValue("alt"))); + } + } + } + } finally { + if (ta != null) { + ta.afterStart(this, localName); + } + } + } + + public void endElement(String uri, String localName, String qName) throws SAXException { + TagAction ta = TAG_ACTIONS.get(localName); + if (ta != null) { + ta.beforeEnd(this, localName); + } + + try { + if (inIgnorableElement == 0) { + // + } + } finally { + if (ta != null) { + ta.afterEnd(this, localName); + } + } + } + + public void characters(char[] ch, int start, int length) throws SAXException { + characterElementIdx++; + if (inIgnorableElement == 0) { + + boolean highlight = contentBitSet.get(characterElementIdx); + if (!highlight) { + if (length == 0) { + return; + } + boolean justWhitespace = true; + for (int i = start; i < start + length; i++) { + if (!Character.isWhitespace(ch[i])) { + justWhitespace = false; + break; + } + } + if (justWhitespace) { + return; + } + } + + inHighlight = highlight; + if (inHighlight) { + linksHighlight.addAll(linksBuffer); + linksBuffer.clear(); + } + } + } + + public void startPrefixMapping(String prefix, String uri) throws SAXException { + } + + } + + private static final TagAction TA_IGNORABLE_ELEMENT = new TagAction() { + void beforeStart(final Implementation instance, final String localName) { + instance.inIgnorableElement++; + } + + void afterEnd(final Implementation instance, final String localName) { + instance.inIgnorableElement--; + } + }; + + private static Map TAG_ACTIONS = new HashMap(); + static { + TAG_ACTIONS.put("STYLE", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("SCRIPT", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("OPTION", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("NOSCRIPT", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("EMBED", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("APPLET", TA_IGNORABLE_ELEMENT); + TAG_ACTIONS.put("LINK", TA_IGNORABLE_ELEMENT); + + TAG_ACTIONS.put("HEAD", TA_IGNORABLE_ELEMENT); + } + + private abstract static class TagAction { + void beforeStart(final Implementation instance, final String localName) { + } + + void afterStart(final Implementation instance, final String localName) { + } + + void beforeEnd(final Implementation instance, final String localName) { + } + + void afterEnd(final Implementation instance, final String localName) { + } + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/InputSourceable.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/InputSourceable.java new file mode 100644 index 0000000..241a60e --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/InputSourceable.java @@ -0,0 +1,28 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import org.xml.sax.InputSource; + +/** + * An InputSourceable can return an arbitrary number of new {@link InputSource}s for a given + * document. + */ +public interface InputSourceable { + InputSource toInputSource(); +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/MarkupTagAction.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/MarkupTagAction.java new file mode 100644 index 0000000..42b3338 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/MarkupTagAction.java @@ -0,0 +1,118 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; + +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import com.kohlschutter.boilerpipe.document.TextBlock; +import com.kohlschutter.boilerpipe.labels.DefaultLabels; +import com.kohlschutter.boilerpipe.labels.LabelAction; + +/** + * Assigns labels for element CSS classes and ids to the corresponding {@link TextBlock}. CSS + * classes are prefixed by {@link DefaultLabels#MARKUP_PREFIX}., and IDs are prefixed + * by {@link DefaultLabels#MARKUP_PREFIX}# + */ +public final class MarkupTagAction implements TagAction { + + private final boolean isBlockLevel; + private LinkedList> labelStack = new LinkedList>(); + + public MarkupTagAction(final boolean isBlockLevel) { + this.isBlockLevel = isBlockLevel; + } + + private static final Pattern PAT_NUM = Pattern.compile("[0-9]+"); + + @Override + public boolean start(BoilerpipeHTMLContentHandler instance, String localName, String qName, + Attributes atts) throws SAXException { + List labels = new ArrayList(5); + labels.add(DefaultLabels.MARKUP_PREFIX + localName); + + String classVal = atts.getValue("class"); + + if (classVal != null && classVal.length() > 0) { + classVal = PAT_NUM.matcher(classVal).replaceAll("#"); + classVal = classVal.trim(); + String[] vals = classVal.split("[ ]+"); + labels.add(DefaultLabels.MARKUP_PREFIX + "." + classVal.replace(' ', '.')); + if (vals.length > 1) { + for (String s : vals) { + labels.add(DefaultLabels.MARKUP_PREFIX + "." + s); + } + } + } + + String id = atts.getValue("id"); + if (id != null && id.length() > 0) { + id = PAT_NUM.matcher(id).replaceAll("#"); + labels.add(DefaultLabels.MARKUP_PREFIX + "#" + id); + } + + Set ancestors = getAncestorLabels(); + List labelsWithAncestors = + new ArrayList((ancestors.size() + 1) * labels.size()); + + for (String l : labels) { + for (String an : ancestors) { + labelsWithAncestors.add(an); + labelsWithAncestors.add(an + " " + l); + } + labelsWithAncestors.add(l); + } + + instance.addLabelAction(new LabelAction(labelsWithAncestors + .toArray(new String[labelsWithAncestors.size()]))); + + labelStack.add(labels); + + return isBlockLevel; + } + + @Override + public boolean end(BoilerpipeHTMLContentHandler instance, String localName, String qName) + throws SAXException { + + labelStack.removeLast(); + return isBlockLevel; + } + + public boolean changesTagLevel() { + return isBlockLevel; + } + + private Set getAncestorLabels() { + Set set = new HashSet(); + for (List labels : labelStack) { + if (labels == null) { + continue; + } + set.addAll(labels); + } + return set; + } +} diff --git a/src/main/de/l3s/boilerpipe/sax/TagAction.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/TagAction.java similarity index 62% rename from src/main/de/l3s/boilerpipe/sax/TagAction.java rename to boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/TagAction.java index 3ee8dcf..9f1d3cd 100644 --- a/src/main/de/l3s/boilerpipe/sax/TagAction.java +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/TagAction.java @@ -1,7 +1,7 @@ /** * boilerpipe * - * Copyright (c) 2009, 2010 Christian Kohlschütter + * Copyright (c) 2009, 2014 Christian Kohlschütter * * The author licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with @@ -15,25 +15,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package de.l3s.boilerpipe.sax; +package com.kohlschutter.boilerpipe.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** - * Defines an action that is to be performed whenever a particular tag occurs - * during HTML parsing. - * - * @author Christian Kohlschütter + * Defines an action that is to be performed whenever a particular tag occurs during HTML parsing. */ public interface TagAction { - boolean start(final BoilerpipeHTMLContentHandler instance, - final String localName, final String qName, final Attributes atts) - throws SAXException; + boolean start(final BoilerpipeHTMLContentHandler instance, final String localName, + final String qName, final Attributes atts) throws SAXException; - boolean end(final BoilerpipeHTMLContentHandler instance, - final String localName, final String qName) throws SAXException; - - boolean changesTagLevel(); + boolean end(final BoilerpipeHTMLContentHandler instance, final String localName, + final String qName) throws SAXException; + + boolean changesTagLevel(); } \ No newline at end of file diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/TagActionMap.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/TagActionMap.java new file mode 100644 index 0000000..04fcafb --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/TagActionMap.java @@ -0,0 +1,59 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.sax; + +import java.util.HashMap; + +/** + * Base class for definition a set of {@link TagAction}s that are to be used for the HTML parsing + * process. + * + * @see DefaultTagActionMap + */ +public abstract class TagActionMap extends HashMap { + private static final long serialVersionUID = 1L; + + /** + * Sets a particular {@link TagAction} for a given tag. Any existing TagAction for that tag will + * be removed and overwritten. + * + * @param tag The tag (will be stored internally 1. as it is, 2. lower-case, 3. upper-case) + * @param action The {@link TagAction} + */ + protected void setTagAction(final String tag, final TagAction action) { + put(tag.toUpperCase(), action); + put(tag.toLowerCase(), action); + put(tag, action); + } + + /** + * Adds a particular {@link TagAction} for a given tag. If a TagAction already exists for that + * tag, a chained action, consisting of the previous and the new {@link TagAction} is created. + * + * @param tag The tag (will be stored internally 1. as it is, 2. lower-case, 3. upper-case) + * @param action The {@link TagAction} + */ + protected void addTagAction(final String tag, final TagAction action) { + TagAction previousAction = get(tag); + if (previousAction == null) { + setTagAction(tag, action); + } else { + setTagAction(tag, new CommonTagActions.Chained(previousAction, action)); + } + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/package-info.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/package-info.java new file mode 100644 index 0000000..35a8e5c --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/sax/package-info.java @@ -0,0 +1,5 @@ +/** + * Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. + */ +package com.kohlschutter.boilerpipe.sax; + diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/util/UnicodeTokenizer.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/util/UnicodeTokenizer.java new file mode 100644 index 0000000..e1cc02b --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/util/UnicodeTokenizer.java @@ -0,0 +1,40 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.util; + +import java.util.regex.Pattern; + +/** + * Tokenizes text according to Unicode word boundaries and strips off non-word characters. + */ +public class UnicodeTokenizer { + private static final Pattern PAT_WORD_BOUNDARY = Pattern.compile("\\b"); + private static final Pattern PAT_NOT_WORD_BOUNDARY = Pattern + .compile("[\u2063]*([\\\"'\\.,\\!\\@\\-\\:\\;\\$\\?\\(\\)/])[\u2063]*"); + + /** + * Tokenizes the text and returns an array of tokens. + * + * @param text The text + * @return The tokens + */ + public static String[] tokenize(final CharSequence text) { + return PAT_NOT_WORD_BOUNDARY.matcher(PAT_WORD_BOUNDARY.matcher(text).replaceAll("\u2063")) + .replaceAll("$1").replaceAll("[ \u2063]+", " ").trim().split("[ ]+"); + } +} diff --git a/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/util/package-info.java b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/util/package-info.java new file mode 100644 index 0000000..f804445 --- /dev/null +++ b/boilerpipe-common/src/main/java/com/kohlschutter/boilerpipe/util/package-info.java @@ -0,0 +1,5 @@ +/** + * Some helper classes. + */ +package com.kohlschutter.boilerpipe.util; + diff --git a/boilerpipe-demo/pom.xml b/boilerpipe-demo/pom.xml new file mode 100644 index 0000000..71a127c --- /dev/null +++ b/boilerpipe-demo/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + boilerpipe-demo + jar + + com.kohlschutter.boilerpipe + boilerpipe-parent + 2.0-SNAPSHOT + + boilerpipe-demo + + ${project.parent.basedir} + + + + com.kohlschutter.boilerpipe + boilerpipe-common + 2.0-SNAPSHOT + + + diff --git a/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/HTMLHighlightDemo.java b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/HTMLHighlightDemo.java new file mode 100644 index 0000000..daea6be --- /dev/null +++ b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/HTMLHighlightDemo.java @@ -0,0 +1,56 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.demo; + +import java.io.PrintWriter; +import java.net.URL; + +import com.kohlschutter.boilerpipe.BoilerpipeExtractor; +import com.kohlschutter.boilerpipe.extractors.CommonExtractors; +import com.kohlschutter.boilerpipe.sax.HTMLHighlighter; + +/** + * Demonstrates how to use Boilerpipe to get the main content, highlighted as HTML. + * + * @see Oneliner if you only need the plain text. + */ +public class HTMLHighlightDemo { + public static void main(String[] args) throws Exception { + URL url = + new URL( + "http://blog.openshift.com/day-18-boilerpipe-article-extraction-for-java-developers/"); + + // choose from a set of useful BoilerpipeExtractors... + final BoilerpipeExtractor extractor = CommonExtractors.ARTICLE_EXTRACTOR; + // final BoilerpipeExtractor extractor = CommonExtractors.DEFAULT_EXTRACTOR; + // final BoilerpipeExtractor extractor = CommonExtractors.CANOLA_EXTRACTOR; + // final BoilerpipeExtractor extractor = CommonExtractors.LARGEST_CONTENT_EXTRACTOR; + + // choose the operation mode (i.e., highlighting or extraction) + final HTMLHighlighter hh = HTMLHighlighter.newHighlightingInstance(); + // final HTMLHighlighter hh = HTMLHighlighter.newExtractingInstance(); + + PrintWriter out = new PrintWriter("/tmp/highlighted.html", "UTF-8"); + out.println(""); + out.println(""); + out.println(hh.process(url, extractor)); + out.close(); + + System.out.println("Now open file:///tmp/highlighted.html in your web browser"); + } +} diff --git a/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/ImageExtractorDemo.java b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/ImageExtractorDemo.java new file mode 100644 index 0000000..544afd6 --- /dev/null +++ b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/ImageExtractorDemo.java @@ -0,0 +1,54 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.demo; + +import java.net.URL; +import java.util.Collections; +import java.util.List; + +import com.kohlschutter.boilerpipe.BoilerpipeExtractor; +import com.kohlschutter.boilerpipe.document.Image; +import com.kohlschutter.boilerpipe.extractors.CommonExtractors; +import com.kohlschutter.boilerpipe.sax.ImageExtractor; + +/** + * Demonstrates how to use Boilerpipe to get the images within the main content. + */ +public final class ImageExtractorDemo { + public static void main(String[] args) throws Exception { + URL url = new URL("http://www.spiegel.de/wissenschaft/natur/0,1518,789176,00.html"); + + // choose from a set of useful BoilerpipeExtractors... + final BoilerpipeExtractor extractor = CommonExtractors.ARTICLE_EXTRACTOR; + // final BoilerpipeExtractor extractor = CommonExtractors.DEFAULT_EXTRACTOR; + // final BoilerpipeExtractor extractor = CommonExtractors.CANOLA_EXTRACTOR; + // final BoilerpipeExtractor extractor = CommonExtractors.LARGEST_CONTENT_EXTRACTOR; + + final ImageExtractor ie = ImageExtractor.INSTANCE; + + List imgUrls = ie.process(url, extractor); + + // automatically sorts them by decreasing area, i.e. most probable true positives come first + Collections.sort(imgUrls); + + for (Image img : imgUrls) { + System.out.println("* " + img); + } + + } +} diff --git a/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/Oneliner.java b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/Oneliner.java new file mode 100644 index 0000000..01b2fbc --- /dev/null +++ b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/Oneliner.java @@ -0,0 +1,44 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.demo; + +import java.net.URL; + +import com.kohlschutter.boilerpipe.extractors.ArticleExtractor; + +/** + * Demonstrates how to use Boilerpipe to get the main content as plain text. Note: In real-world + * cases, you'd probably want to download the file first using a fault-tolerant crawler. + * + * @see HTMLHighlightDemo if you need HTML as well. + */ +public class Oneliner { + public static void main(final String[] args) throws Exception { + final URL url = + new URL( + "http://blog.openshift.com/day-18-boilerpipe-article-extraction-for-java-developers/" + // "http://www.dn.se/nyheter/vetenskap/annu-godare-choklad-med-hjalp-av-dna-teknik" + ); + + System.out.println(ArticleExtractor.INSTANCE.getText(url)); + + // Also try other extractors! + // System.out.println(DefaultExtractor.INSTANCE.getText(url)); + // System.out.println(CommonExtractors.CANOLA_EXTRACTOR.getText(url)); + } +} diff --git a/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/UsingSAX.java b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/UsingSAX.java new file mode 100644 index 0000000..8fdc0b2 --- /dev/null +++ b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/UsingSAX.java @@ -0,0 +1,49 @@ +/** + * boilerpipe + * + * Copyright (c) 2009, 2014 Christian Kohlschütter + * + * The author licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.kohlschutter.boilerpipe.demo; + +import java.net.URL; + +import org.xml.sax.InputSource; + +import com.kohlschutter.boilerpipe.document.TextDocument; +import com.kohlschutter.boilerpipe.extractors.ArticleExtractor; +import com.kohlschutter.boilerpipe.sax.BoilerpipeSAXInput; +import com.kohlschutter.boilerpipe.sax.HTMLFetcher; + +/** + * Demonstrates how to use Boilerpipe when working with {@link InputSource}s. + */ +public class UsingSAX { + public static void main(final String[] args) throws Exception { + URL url; + url = + new URL( + "http://blog.openshift.com/day-18-boilerpipe-article-extraction-for-java-developers/"); + + final InputSource is = HTMLFetcher.fetch(url).toInputSource(); + + final BoilerpipeSAXInput in = new BoilerpipeSAXInput(is); + final TextDocument doc = in.getTextDocument(); + + // You have the choice between different Extractors + + // System.out.println(DefaultExtractor.INSTANCE.getText(doc)); + System.out.println(ArticleExtractor.INSTANCE.getText(doc)); + } +} diff --git a/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/package-info.java b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/package-info.java new file mode 100644 index 0000000..105bcfc --- /dev/null +++ b/boilerpipe-demo/src/main/java/com/kohlschutter/boilerpipe/demo/package-info.java @@ -0,0 +1,5 @@ +/** + * Just some simple demo code. + */ +package com.kohlschutter.boilerpipe.demo; + diff --git a/boilerpipe.pom b/boilerpipe.pom deleted file mode 100644 index 8261e42..0000000 --- a/boilerpipe.pom +++ /dev/null @@ -1,34 +0,0 @@ - - 4.0.0 - de.l3s.boilerpipe - boilerpipe - jar - 1.2.0 - Boilerpipe - Boilerpipe -- Boilerplate Removal and Fulltext Extraction from HTML pages - - - - boilerpipe-m2-repo - svn:https://boilerpipe.googlecode.com/svn/repo/ - - - - - - boilerpipe-m2-repo - svn:https://boilerpipe.googlecode.com/svn/repo/ - - - - - - - org.jvnet.wagon-svn - wagon-svn - 1.8 - - - - diff --git a/build.xml b/build.xml deleted file mode 100644 index ae80e53..0000000 --- a/build.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - ${app.name} - ${app.title} - ${app.version} - - - yes - no - - - - - - Christian Kohlschütter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/eclipse-formatter-config.xml b/eclipse-formatter-config.xml new file mode 100644 index 0000000..8da1082 --- /dev/null +++ b/eclipse-formatter-config.xml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/javadoc/1.0/allclasses-frame.html b/javadoc/1.0/allclasses-frame.html deleted file mode 100644 index cf6fc42..0000000 --- a/javadoc/1.0/allclasses-frame.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - -All Classes (1.0 API) - - - - - - - - - -All Classes -
- - - - - -
ArticleExtractor -
-ArticleSentencesExtractor -
-BlockProximityFusion -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeInput -
-BoilerpipeProcessingException -
-BoilerpipeSAXInput -
-BoilerplateBlockFilter -
-DefaultExtractor -
-DensityRulesClassifier -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-ExtractorBase -
-HTMLHighlighter -
-IgnoreBlocksAfterContentFilter -
-InvertedFilter -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-KeepLargestBlockFilter -
-KeepLargestFulltextBlockFilter -
-LargestContentExtractor -
-MarkEverythingContentFilter -
-MinClauseWordsFilter -
-MinFulltextWordsFilter -
-MinWordsFilter -
-NumWordsRulesClassifier -
-NumWordsRulesExtractor -
-SimpleBlockFusionProcessor -
-SplitParagraphBlocksFilter -
-TerminatingBlocksFinder -
-TextBlock -
-TextBlockLabel -
-TextDocument -
-UnicodeTokenizer -
-
- - - diff --git a/javadoc/1.0/allclasses-noframe.html b/javadoc/1.0/allclasses-noframe.html deleted file mode 100644 index 124b19a..0000000 --- a/javadoc/1.0/allclasses-noframe.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - -All Classes (1.0 API) - - - - - - - - - -All Classes -
- - - - - -
ArticleExtractor -
-ArticleSentencesExtractor -
-BlockProximityFusion -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeInput -
-BoilerpipeProcessingException -
-BoilerpipeSAXInput -
-BoilerplateBlockFilter -
-DefaultExtractor -
-DensityRulesClassifier -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-ExtractorBase -
-HTMLHighlighter -
-IgnoreBlocksAfterContentFilter -
-InvertedFilter -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-KeepLargestBlockFilter -
-KeepLargestFulltextBlockFilter -
-LargestContentExtractor -
-MarkEverythingContentFilter -
-MinClauseWordsFilter -
-MinFulltextWordsFilter -
-MinWordsFilter -
-NumWordsRulesClassifier -
-NumWordsRulesExtractor -
-SimpleBlockFusionProcessor -
-SplitParagraphBlocksFilter -
-TerminatingBlocksFinder -
-TextBlock -
-TextBlockLabel -
-TextDocument -
-UnicodeTokenizer -
-
- - - diff --git a/javadoc/1.0/constant-values.html b/javadoc/1.0/constant-values.html deleted file mode 100644 index 539baaf..0000000 --- a/javadoc/1.0/constant-values.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -Constant Field Values (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Constant Field Values

-
-
-Contents - - - - - - -
-de.l3s.*
- -

- - - - - - - - - - - - - - - - - - - - - - -
de.l3s.boilerpipe.document.TextBlockLabel
-public static final java.lang.StringINDICATES_END_OF_TEXT"de.l3s.boilerpipe/INDICATES_END_OF_TEXT"
-public static final java.lang.StringMIGHT_BE_CONTENT"de.l3s.boilerpipe/MIGHT_BE_CONTENT"
-public static final java.lang.StringTITLE"de.l3s.boilerpipe/TITLE"
- -

- -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeExtractor.html deleted file mode 100644 index 6b06b08..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeExtractor.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - -BoilerpipeExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeExtractor

-
-
All Superinterfaces:
BoilerpipeFilter
-
-
-
All Known Implementing Classes:
ArticleExtractor, ArticleSentencesExtractor, DefaultExtractor, ExtractorBase, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, LargestContentExtractor, NumWordsRulesExtractor
-
-
-
-
public interface BoilerpipeExtractor
extends BoilerpipeFilter
- - -

-Describes a complete filter pipeline. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given - InputSource.
- java.lang.StringgetText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringgetText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringgetText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- - - - - - - -
Methods inherited from interface de.l3s.boilerpipe.BoilerpipeFilter
process
-  -

- - - - - - - - -
-Method Detail
- -

-getText

-
-java.lang.String getText(java.lang.String html)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code given as a String. -

-

-
-
-
-
Parameters:
html - The HTML code as a String. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(org.xml.sax.InputSource is)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given - InputSource. -

-

-
-
-
-
Parameters:
is - The InputSource containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(java.io.Reader r)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given Reader. -

-

-
-
-
-
Parameters:
r - The Reader containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(TextDocument doc)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the given TextDocument object. -

-

-
-
-
-
Parameters:
doc - The TextDocument. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeFilter.html b/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeFilter.html deleted file mode 100644 index 36aaeb3..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeFilter.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - -BoilerpipeFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeFilter

-
-
All Known Subinterfaces:
BoilerpipeExtractor
-
-
-
All Known Implementing Classes:
ArticleExtractor, ArticleSentencesExtractor, BlockProximityFusion, BoilerplateBlockFilter, DefaultExtractor, DensityRulesClassifier, DocumentTitleMatchClassifier, ExpandTitleToContentFilter, ExtractorBase, IgnoreBlocksAfterContentFilter, InvertedFilter, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, KeepLargestBlockFilter, KeepLargestFulltextBlockFilter, LargestContentExtractor, MarkEverythingContentFilter, MinClauseWordsFilter, MinFulltextWordsFilter, MinWordsFilter, NumWordsRulesClassifier, NumWordsRulesExtractor, SimpleBlockFusionProcessor, SplitParagraphBlocksFilter, TerminatingBlocksFinder
-
-
-
-
public interface BoilerpipeFilter
- - -

-A generic BoilerpipeFilter. Takes a TextDocument and - processes it somehow. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
-  -

- - - - - - - - -
-Method Detail
- -

-process

-
-boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeInput.html b/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeInput.html deleted file mode 100644 index 27bb36a..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeInput.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -BoilerpipeInput (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeInput

-
-
All Known Implementing Classes:
BoilerpipeSAXInput
-
-
-
-
public interface BoilerpipeInput
- - -

-A source that returns TextDocuments. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- TextDocumentgetTextDocument() - -
-          Returns (somehow) a TextDocument.
-  -

- - - - - - - - -
-Method Detail
- -

-getTextDocument

-
-TextDocument getTextDocument()
-                             throws BoilerpipeProcessingException
-
-
Returns (somehow) a TextDocument. -

-

- -
Returns:
A TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeProcessingException.html b/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeProcessingException.html deleted file mode 100644 index 36edfc7..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/BoilerpipeProcessingException.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - -BoilerpipeProcessingException (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Class BoilerpipeProcessingException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by de.l3s.boilerpipe.BoilerpipeProcessingException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class BoilerpipeProcessingException
extends java.lang.Exception
- - -

-Exception for signaling failure in the processing pipeline. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - - - - - - - - - - -
-Constructor Summary
BoilerpipeProcessingException() - -
-           
BoilerpipeProcessingException(java.lang.String message) - -
-           
BoilerpipeProcessingException(java.lang.String message, - java.lang.Throwable cause) - -
-           
BoilerpipeProcessingException(java.lang.Throwable cause) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException()
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.String message,
-                                     java.lang.Throwable cause)
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.String message)
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.Throwable cause)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html deleted file mode 100644 index 09c0c0b..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeExtractor

-
- - - - - - - - - -
-Packages that use BoilerpipeExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of BoilerpipeExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.extractors that implement BoilerpipeExtractor
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classExtractorBase - -
-          The base class of Extractors.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html b/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html deleted file mode 100644 index 3a3a44c..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeFilter

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use BoilerpipeFilter
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe
-  -

- - - - - - - - - -
Subinterfaces of BoilerpipeFilter in de.l3s.boilerpipe
- interfaceBoilerpipeExtractor - -
-          Describes a complete filter pipeline.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.extractors that implement BoilerpipeFilter
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classExtractorBase - -
-          The base class of Extractors.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.english that implement BoilerpipeFilter
- classDensityRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
- classIgnoreBlocksAfterContentFilter - -
-          Marks all blocks as "non-content" that occur after blocks that have been - marked TextBlockLabel.INDICATES_END_OF_TEXT.
- classKeepLargestFulltextBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
- classMinFulltextWordsFilter - -
-          Keeps only those content blocks which contain at least k full-text words - (measured by TextBlock#getNumFullTextWords()). k is 30 by default.
- classNumWordsRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
- classTerminatingBlocksFinder - -
-          Finds blocks which are potentially indicating the end of an article text and marks - them with TextBlockLabel.INDICATES_END_OF_TEXT.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.heuristics that implement BoilerpipeFilter
- classBlockProximityFusion - -
-          Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
- classDocumentTitleMatchClassifier - -
-          Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
- classExpandTitleToContentFilter - -
-          Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked TextBlockLabel.MIGHT_BE_CONTENT.
- classKeepLargestBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
- classSimpleBlockFusionProcessor - -
-          Merges two subsequent blocks if their text densities are equal.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.simple that implement BoilerpipeFilter
- classBoilerplateBlockFilter - -
-          Removes TextBlocks which have explicitly been marked as "not content".
- classInvertedFilter - -
-          Reverts the "isContent" flag for all TextBlocks
- classMarkEverythingContentFilter - -
-          Marks all blocks as content.
- classMinClauseWordsFilter - -
-          Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
- classMinWordsFilter - -
-          Keeps only those content blocks which contain at least k words.
- classSplitParagraphBlocksFilter - -
-          Splits TextBlocks at paragraph boundaries.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeInput.html b/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeInput.html deleted file mode 100644 index 81dcc6d..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeInput.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeInput (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeInput

-
- - - - - - - - - -
-Packages that use BoilerpipeInput
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeInput in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Classes in de.l3s.boilerpipe.sax that implement BoilerpipeInput
- classBoilerpipeSAXInput - -
-          Parses an InputSource using SAX and returns a TextDocument.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html b/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html deleted file mode 100644 index f9e3252..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html +++ /dev/null @@ -1,597 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.BoilerpipeProcessingException (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.BoilerpipeProcessingException

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use BoilerpipeProcessingException
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe that throw BoilerpipeProcessingException
- java.lang.StringBoilerpipeExtractor.getText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given - InputSource.
- java.lang.StringBoilerpipeExtractor.getText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringBoilerpipeExtractor.getText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringBoilerpipeExtractor.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- TextDocumentBoilerpipeInput.getTextDocument() - -
-          Returns (somehow) a TextDocument.
- booleanBoilerpipeFilter.process(TextDocument doc) - -
-          Processes the given document doc.
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that throw BoilerpipeProcessingException
- java.lang.StringExtractorBase.getText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given InputSource.
- java.lang.StringExtractorBase.getText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringExtractorBase.getText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringExtractorBase.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- java.lang.StringExtractorBase.getText(java.net.URL url) - -
-          Extracts text from the HTML code available from the given URL.
- booleanNumWordsRulesExtractor.process(TextDocument doc) - -
-           
- booleanLargestContentExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingWithMinKWordsExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingExtractor.process(TextDocument doc) - -
-           
- booleanDefaultExtractor.process(TextDocument doc) - -
-           
- booleanArticleSentencesExtractor.process(TextDocument doc) - -
-           
- booleanArticleExtractor.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that throw BoilerpipeProcessingException
- booleanTerminatingBlocksFinder.process(TextDocument doc) - -
-           
- booleanNumWordsRulesClassifier.process(TextDocument doc) - -
-           
- booleanMinFulltextWordsFilter.process(TextDocument doc) - -
-           
- booleanKeepLargestFulltextBlockFilter.process(TextDocument doc) - -
-           
- booleanIgnoreBlocksAfterContentFilter.process(TextDocument doc) - -
-           
- booleanDensityRulesClassifier.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that throw BoilerpipeProcessingException
- booleanSimpleBlockFusionProcessor.process(TextDocument doc) - -
-           
- booleanKeepLargestBlockFilter.process(TextDocument doc) - -
-           
- booleanExpandTitleToContentFilter.process(TextDocument doc) - -
-           
- booleanDocumentTitleMatchClassifier.process(TextDocument doc) - -
-           
- booleanBlockProximityFusion.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that throw BoilerpipeProcessingException
- booleanSplitParagraphBlocksFilter.process(TextDocument doc) - -
-           
- booleanMinWordsFilter.process(TextDocument doc) - -
-           
- booleanMinClauseWordsFilter.process(TextDocument doc) - -
-           
- booleanMarkEverythingContentFilter.process(TextDocument doc) - -
-           
- booleanInvertedFilter.process(TextDocument doc) - -
-           
- booleanBoilerplateBlockFilter.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that throw BoilerpipeProcessingException
- TextDocumentBoilerpipeSAXInput.getTextDocument() - -
-           
-  -

- - - - - - - - - - - -
Constructors in de.l3s.boilerpipe.sax that throw BoilerpipeProcessingException
HTMLHighlighter(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as an InputSource).
HTMLHighlighter(TextDocument doc, - java.lang.String origHTML) - -
-          Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as a String).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/TextBlock.html b/javadoc/1.0/de/l3s/boilerpipe/document/TextBlock.html deleted file mode 100644 index 804942c..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/TextBlock.html +++ /dev/null @@ -1,648 +0,0 @@ - - - - - - -TextBlock (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextBlock

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextBlock
-
-
-
-
public class TextBlock
extends java.lang.Object
- - -

-Describes a block of text. - - A block can be an "atomic" text element (i.e., a sequence of text that is not - interrupted by any HTML markup) or a compound of such atomic elements. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static TextBlockEMPTY_END - -
-           
-static TextBlockEMPTY_START - -
-           
-  - - - - - - - - - - - - - -
-Constructor Summary
TextBlock(java.lang.String text) - -
-           
TextBlock(java.lang.String text, - java.util.BitSet containedTextElements, - int numWords, - int numWordsInAnchorText, - int numWordsInWrappedLines, - int numWrappedLines, - int offsetBlocks) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddLabel(java.lang.String label) - -
-          Adds an arbitrary String label to this TextBlock.
- voidaddLabels(java.util.Set<java.lang.String> l) - -
-          Adds a set of labels to this TextBlock.
- java.util.BitSetgetContainedTextElements() - -
-           
- java.util.Set<java.lang.String>getLabels() - -
-          Returns the labels associated to this TextBlock, or null if no such labels - exist.
- floatgetLinkDensity() - -
-           
- intgetNumWords() - -
-           
- intgetNumWordsInAnchorText() - -
-           
- intgetOffsetBlocksEnd() - -
-           
- intgetOffsetBlocksStart() - -
-           
- java.lang.StringgetText() - -
-           
- floatgetTextDensity() - -
-           
- booleanhasLabel(java.lang.String label) - -
-          Checks whether this TextBlock has the given label.
- booleanisContent() - -
-           
- voidmergeNext(TextBlock other) - -
-           
- booleansetIsContent(boolean isContent) - -
-           
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-EMPTY_START

-
-public static final TextBlock EMPTY_START
-
-
-
-
-
- -

-EMPTY_END

-
-public static final TextBlock EMPTY_END
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-TextBlock

-
-public TextBlock(java.lang.String text)
-
-
-
- -

-TextBlock

-
-public TextBlock(java.lang.String text,
-                 java.util.BitSet containedTextElements,
-                 int numWords,
-                 int numWordsInAnchorText,
-                 int numWordsInWrappedLines,
-                 int numWrappedLines,
-                 int offsetBlocks)
-
-
- - - - - - - - -
-Method Detail
- -

-isContent

-
-public boolean isContent()
-
-
-
-
-
-
- -

-setIsContent

-
-public boolean setIsContent(boolean isContent)
-
-
-
-
-
-
- -

-getText

-
-public java.lang.String getText()
-
-
-
-
-
-
- -

-getNumWords

-
-public int getNumWords()
-
-
-
-
-
-
- -

-getNumWordsInAnchorText

-
-public int getNumWordsInAnchorText()
-
-
-
-
-
-
- -

-getTextDensity

-
-public float getTextDensity()
-
-
-
-
-
-
- -

-getLinkDensity

-
-public float getLinkDensity()
-
-
-
-
-
-
- -

-mergeNext

-
-public void mergeNext(TextBlock other)
-
-
-
-
-
-
- -

-getOffsetBlocksStart

-
-public int getOffsetBlocksStart()
-
-
-
-
-
-
- -

-getOffsetBlocksEnd

-
-public int getOffsetBlocksEnd()
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-addLabel

-
-public void addLabel(java.lang.String label)
-
-
Adds an arbitrary String label to this TextBlock. -

-

-
Parameters:
label - The label
See Also:
TextBlockLabel
-
-
-
- -

-hasLabel

-
-public boolean hasLabel(java.lang.String label)
-
-
Checks whether this TextBlock has the given label. -

-

-
Parameters:
label - The label -
Returns:
true if this block is marked by the given label.
-
-
-
- -

-getLabels

-
-public java.util.Set<java.lang.String> getLabels()
-
-
Returns the labels associated to this TextBlock, or null if no such labels - exist. - - NOTE: The returned instance is the one used directly in TextBlock. You have full access - to the data structure. However it is recommended to use the label-specific methods in TextBlock - whenever possible. -

-

- -
Returns:
-
-
-
- -

-addLabels

-
-public void addLabels(java.util.Set<java.lang.String> l)
-
-
Adds a set of labels to this TextBlock. - null-references are silently ignored. -

-

-
Parameters:
l - The labels to be added.
-
-
-
- -

-getContainedTextElements

-
-public java.util.BitSet getContainedTextElements()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/TextBlockLabel.html b/javadoc/1.0/de/l3s/boilerpipe/document/TextBlockLabel.html deleted file mode 100644 index 1aa7976..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/TextBlockLabel.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -TextBlockLabel (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextBlockLabel

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextBlockLabel
-
-
-
-
public final class TextBlockLabel
extends java.lang.Object
- - -

-Some pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String). -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - -
-Field Summary
-static java.lang.StringINDICATES_END_OF_TEXT - -
-           
-static java.lang.StringMIGHT_BE_CONTENT - -
-           
-static java.lang.StringTITLE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
TextBlockLabel() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-TITLE

-
-public static final java.lang.String TITLE
-
-
-
See Also:
Constant Field Values
-
-
- -

-INDICATES_END_OF_TEXT

-
-public static final java.lang.String INDICATES_END_OF_TEXT
-
-
-
See Also:
Constant Field Values
-
-
- -

-MIGHT_BE_CONTENT

-
-public static final java.lang.String MIGHT_BE_CONTENT
-
-
-
See Also:
Constant Field Values
-
- - - - - - - - -
-Constructor Detail
- -

-TextBlockLabel

-
-public TextBlockLabel()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/TextDocument.html b/javadoc/1.0/de/l3s/boilerpipe/document/TextDocument.html deleted file mode 100644 index 4caed30..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/TextDocument.html +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - -TextDocument (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextDocument

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextDocument
-
-
-
-
public class TextDocument
extends java.lang.Object
- - -

-A text document, consisting of one or more TextBlocks. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
TextDocument(java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks, and no - title.
TextDocument(java.lang.String title, - java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks and - given title.
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringdebugString() - -
-          Returns detailed debugging information about the contained TextBlocks.
- java.lang.StringgetContent() - -
-          Returns the TextDocument's content.
- java.lang.StringgetText(boolean includeContent, - boolean includeNonContent) - -
-          Returns the TextDocument's content, non-content or both
- java.util.List<TextBlock>getTextBlocks() - -
-          Returns the TextBlocks of this document.
- java.lang.StringgetTitle() - -
-          Returns the "main" title for this document, or null if no - such title has ben set.
- voidsetTitle(java.lang.String title) - -
-          Updates the "main" title for this document.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-TextDocument

-
-public TextDocument(java.util.List<TextBlock> textBlocks)
-
-
Creates a new TextDocument with given TextBlocks, and no - title. -

-

-
Parameters:
textBlocks - The text blocks of this document.
-
-
- -

-TextDocument

-
-public TextDocument(java.lang.String title,
-                    java.util.List<TextBlock> textBlocks)
-
-
Creates a new TextDocument with given TextBlocks and - given title. -

-

-
Parameters:
title - The "main" title for this text document.
textBlocks - The text blocks of this document.
-
- - - - - - - - -
-Method Detail
- -

-getTextBlocks

-
-public java.util.List<TextBlock> getTextBlocks()
-
-
Returns the TextBlocks of this document. -

-

- -
Returns:
A list of TextBlocks, in sequential order of appearance.
-
-
-
- -

-getTitle

-
-public java.lang.String getTitle()
-
-
Returns the "main" title for this document, or null if no - such title has ben set. -

-

- -
Returns:
The "main" title.
-
-
-
- -

-setTitle

-
-public void setTitle(java.lang.String title)
-
-
Updates the "main" title for this document. -

-

-
Parameters:
title -
-
-
-
- -

-getContent

-
-public java.lang.String getContent()
-
-
Returns the TextDocument's content. -

-

- -
Returns:
The content text.
-
-
-
- -

-getText

-
-public java.lang.String getText(boolean includeContent,
-                                boolean includeNonContent)
-
-
Returns the TextDocument's content, non-content or both -

-

-
Parameters:
includeContent - Whether to include TextBlocks marked as "content".
includeNonContent - Whether to include TextBlocks marked as "non-content". -
Returns:
The text.
-
-
-
- -

-debugString

-
-public java.lang.String debugString()
-
-
Returns detailed debugging information about the contained TextBlocks. -

-

- -
Returns:
Debug information.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextBlock.html b/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextBlock.html deleted file mode 100644 index 8516a66..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextBlock.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextBlock (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextBlock

-
- - - - - - - - - - - - - -
-Packages that use TextBlock
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model. 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.document
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.document declared as TextBlock
-static TextBlockTextBlock.EMPTY_END - -
-           
-static TextBlockTextBlock.EMPTY_START - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.document that return types with arguments of type TextBlock
- java.util.List<TextBlock>TextDocument.getTextBlocks() - -
-          Returns the TextBlocks of this document.
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.document with parameters of type TextBlock
- voidTextBlock.mergeNext(TextBlock other) - -
-           
-  -

- - - - - - - - - - - -
Constructor parameters in de.l3s.boilerpipe.document with type arguments of type TextBlock
TextDocument(java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks, and no - title.
TextDocument(java.lang.String title, - java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks and - given title.
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english with parameters of type TextBlock
-protected  booleanNumWordsRulesClassifier.classify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-protected  booleanDensityRulesClassifier.classify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextBlockLabel.html b/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextBlockLabel.html deleted file mode 100644 index 1d62854..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextBlockLabel.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextBlockLabel (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextBlockLabel

-
-No usage of de.l3s.boilerpipe.document.TextBlockLabel -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextDocument.html b/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextDocument.html deleted file mode 100644 index 1ad12fb..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/class-use/TextDocument.html +++ /dev/null @@ -1,564 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextDocument (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextDocument

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use TextDocument
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe that return TextDocument
- TextDocumentBoilerpipeInput.getTextDocument() - -
-          Returns (somehow) a TextDocument.
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe with parameters of type TextDocument
- java.lang.StringBoilerpipeExtractor.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- booleanBoilerpipeFilter.process(TextDocument doc) - -
-          Processes the given document doc.
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors with parameters of type TextDocument
- java.lang.StringExtractorBase.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- booleanNumWordsRulesExtractor.process(TextDocument doc) - -
-           
- booleanLargestContentExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingWithMinKWordsExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingExtractor.process(TextDocument doc) - -
-           
- booleanDefaultExtractor.process(TextDocument doc) - -
-           
- booleanArticleSentencesExtractor.process(TextDocument doc) - -
-           
- booleanArticleExtractor.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english with parameters of type TextDocument
- booleanTerminatingBlocksFinder.process(TextDocument doc) - -
-           
- booleanNumWordsRulesClassifier.process(TextDocument doc) - -
-           
- booleanMinFulltextWordsFilter.process(TextDocument doc) - -
-           
- booleanKeepLargestFulltextBlockFilter.process(TextDocument doc) - -
-           
- booleanIgnoreBlocksAfterContentFilter.process(TextDocument doc) - -
-           
- booleanDensityRulesClassifier.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics with parameters of type TextDocument
- booleanSimpleBlockFusionProcessor.process(TextDocument doc) - -
-           
- booleanKeepLargestBlockFilter.process(TextDocument doc) - -
-           
- booleanExpandTitleToContentFilter.process(TextDocument doc) - -
-           
- booleanDocumentTitleMatchClassifier.process(TextDocument doc) - -
-           
- booleanBlockProximityFusion.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple with parameters of type TextDocument
- booleanSplitParagraphBlocksFilter.process(TextDocument doc) - -
-           
- booleanMinWordsFilter.process(TextDocument doc) - -
-           
- booleanMinClauseWordsFilter.process(TextDocument doc) - -
-           
- booleanMarkEverythingContentFilter.process(TextDocument doc) - -
-           
- booleanInvertedFilter.process(TextDocument doc) - -
-           
- booleanBoilerplateBlockFilter.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that return TextDocument
- TextDocumentBoilerpipeSAXInput.getTextDocument() - -
-           
- TextDocumentBoilerpipeHTMLParser.toTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlocks.
- TextDocumentBoilerpipeHTMLContentHandler.toTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlocks.
-  -

- - - - - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type TextDocument
HTMLHighlighter(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as an InputSource).
HTMLHighlighter(TextDocument doc, - java.lang.String origHTML) - -
-          Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as a String).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/package-frame.html b/javadoc/1.0/de/l3s/boilerpipe/document/package-frame.html deleted file mode 100644 index a57f109..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/package-frame.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document (1.0 API) - - - - - - - - - -de.l3s.boilerpipe.document - - - - -
-Classes  - -
-TextBlock -
-TextBlockLabel -
-TextDocument
- - - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/package-summary.html b/javadoc/1.0/de/l3s/boilerpipe/document/package-summary.html deleted file mode 100644 index c67f21c..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/package-summary.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.document -

- -The classes in this package represent the simple Boilerpipe document model. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - -
-Class Summary
TextBlockDescribes a block of text.
TextBlockLabelSome pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String).
TextDocumentA text document, consisting of one or more TextBlocks.
-  - -

-

-Package de.l3s.boilerpipe.document Description -

- -

-

-The classes in this package represent the simple Boilerpipe document model. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/package-tree.html b/javadoc/1.0/de/l3s/boilerpipe/document/package-tree.html deleted file mode 100644 index dcebc1f..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.document -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/document/package-use.html b/javadoc/1.0/de/l3s/boilerpipe/document/package-use.html deleted file mode 100644 index d716867..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/document/package-use.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.document (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.document

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe.document
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.document
TextBlock - -
-          Describes a block of text.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.extractors
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.english
TextBlock - -
-          Describes a block of text.
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.heuristics
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.simple
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.sax
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/ArticleExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/ArticleExtractor.html deleted file mode 100644 index e173bc4..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/ArticleExtractor.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -ArticleExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ArticleExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.ArticleExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class ArticleExtractor
extends ExtractorBase
- - -

-A full-text extractor which is tuned towards news articles. In this scenario - it achieves higher accuracy than DefaultExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ArticleExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ArticleExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ArticleExtractorgetInstance() - -
-          Returns the singleton instance for ArticleExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ArticleExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ArticleExtractor

-
-public ArticleExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ArticleExtractor getInstance()
-
-
Returns the singleton instance for ArticleExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html deleted file mode 100644 index ac6dfd5..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -ArticleSentencesExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ArticleSentencesExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.ArticleSentencesExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class ArticleSentencesExtractor
extends ExtractorBase
- - -

-A full-text extractor which is tuned towards extracting sentences from news articles. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ArticleSentencesExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ArticleSentencesExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ArticleSentencesExtractorgetInstance() - -
-          Returns the singleton instance for ArticleSentencesExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ArticleSentencesExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ArticleSentencesExtractor

-
-public ArticleSentencesExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ArticleSentencesExtractor getInstance()
-
-
Returns the singleton instance for ArticleSentencesExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/DefaultExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/DefaultExtractor.html deleted file mode 100644 index a82b2f0..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/DefaultExtractor.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -DefaultExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class DefaultExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.DefaultExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public class DefaultExtractor
extends ExtractorBase
- - -

-A quite generic full-text extractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static DefaultExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
DefaultExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static DefaultExtractorgetInstance() - -
-          Returns the singleton instance for DefaultExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final DefaultExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DefaultExtractor

-
-public DefaultExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static DefaultExtractor getInstance()
-
-
Returns the singleton instance for DefaultExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/ExtractorBase.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/ExtractorBase.html deleted file mode 100644 index ac8106e..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/ExtractorBase.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - -ExtractorBase (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ExtractorBase

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
Direct Known Subclasses:
ArticleExtractor, ArticleSentencesExtractor, DefaultExtractor, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, LargestContentExtractor, NumWordsRulesExtractor
-
-
-
-
public abstract class ExtractorBase
extends java.lang.Object
implements BoilerpipeExtractor
- - -

-The base class of Extractors. Also provides some helper methods to quickly - retrieve the text that remained after processing. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
ExtractorBase() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given InputSource.
- java.lang.StringgetText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringgetText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringgetText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- java.lang.StringgetText(java.net.URL url) - -
-          Extracts text from the HTML code available from the given URL.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
- - - - - - - -
Methods inherited from interface de.l3s.boilerpipe.BoilerpipeFilter
process
-  -

- - - - - - - - -
-Constructor Detail
- -

-ExtractorBase

-
-public ExtractorBase()
-
-
- - - - - - - - -
-Method Detail
- -

-getText

-
-public java.lang.String getText(java.lang.String html)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code given as a String. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
html - The HTML code as a String. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(org.xml.sax.InputSource is)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given InputSource. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
is - The InputSource containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(java.net.URL url)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given URL. - NOTE: This method is mainly to be used for show case purposes. If you are - going to crawl the Web, consider using getText(InputSource) - instead. -

-

-
-
-
-
Parameters:
url - The URL pointing to the HTML code. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(java.io.Reader r)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given Reader. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
r - The Reader containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(TextDocument doc)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the given TextDocument object. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
doc - The TextDocument. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html deleted file mode 100644 index f5dabe7..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -KeepEverythingExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class KeepEverythingExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.KeepEverythingExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class KeepEverythingExtractor
extends ExtractorBase
- - -

-Marks everything as content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static KeepEverythingExtractorINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepEverythingExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html deleted file mode 100644 index 1b1649b..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - -KeepEverythingWithMinKWordsExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class KeepEverythingWithMinKWordsExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class KeepEverythingWithMinKWordsExtractor
extends ExtractorBase
- - -

-A full-text extractor which extracts the largest text component of a page. - For news articles, it may perform better than the DefaultExtractor, - but usually worse than ArticleExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
KeepEverythingWithMinKWordsExtractor(int kMin) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-KeepEverythingWithMinKWordsExtractor

-
-public KeepEverythingWithMinKWordsExtractor(int kMin)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/LargestContentExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/LargestContentExtractor.html deleted file mode 100644 index a08d07c..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/LargestContentExtractor.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -LargestContentExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class LargestContentExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.LargestContentExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class LargestContentExtractor
extends ExtractorBase
- - -

-A full-text extractor which extracts the largest text component of a page. - For news articles, it may perform better than the DefaultExtractor, - but usually worse than ArticleExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static LargestContentExtractorINSTANCE - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static LargestContentExtractorgetInstance() - -
-          Returns the singleton instance for LargestContentExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final LargestContentExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static LargestContentExtractor getInstance()
-
-
Returns the singleton instance for LargestContentExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html deleted file mode 100644 index e5dcbf4..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -NumWordsRulesExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class NumWordsRulesExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.NumWordsRulesExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public class NumWordsRulesExtractor
extends ExtractorBase
- - -

-A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block). -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static NumWordsRulesExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
NumWordsRulesExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static NumWordsRulesExtractorgetInstance() - -
-          Returns the singleton instance for NumWordsRulesExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final NumWordsRulesExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-NumWordsRulesExtractor

-
-public NumWordsRulesExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static NumWordsRulesExtractor getInstance()
-
-
Returns the singleton instance for NumWordsRulesExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html deleted file mode 100644 index dcc5079..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ArticleExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ArticleExtractor

-
- - - - - - - - - -
-Packages that use ArticleExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ArticleExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as ArticleExtractor
-static ArticleExtractorArticleExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return ArticleExtractor
-static ArticleExtractorArticleExtractor.getInstance() - -
-          Returns the singleton instance for ArticleExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html deleted file mode 100644 index f6caecd..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ArticleSentencesExtractor

-
- - - - - - - - - -
-Packages that use ArticleSentencesExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ArticleSentencesExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as ArticleSentencesExtractor
-static ArticleSentencesExtractorArticleSentencesExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return ArticleSentencesExtractor
-static ArticleSentencesExtractorArticleSentencesExtractor.getInstance() - -
-          Returns the singleton instance for ArticleSentencesExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html deleted file mode 100644 index 13f439f..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.DefaultExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.DefaultExtractor

-
- - - - - - - - - -
-Packages that use DefaultExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of DefaultExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as DefaultExtractor
-static DefaultExtractorDefaultExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return DefaultExtractor
-static DefaultExtractorDefaultExtractor.getInstance() - -
-          Returns the singleton instance for DefaultExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html deleted file mode 100644 index 2af9fe2..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ExtractorBase (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ExtractorBase

-
- - - - - - - - - -
-Packages that use ExtractorBase
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ExtractorBase in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of ExtractorBase in de.l3s.boilerpipe.extractors
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html deleted file mode 100644 index a8ddc13..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.KeepEverythingExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.KeepEverythingExtractor

-
- - - - - - - - - -
-Packages that use KeepEverythingExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of KeepEverythingExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as KeepEverythingExtractor
-static KeepEverythingExtractorKeepEverythingExtractor.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html deleted file mode 100644 index b0418e4..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor

-
-No usage of de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html deleted file mode 100644 index 437fa45..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.LargestContentExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.LargestContentExtractor

-
- - - - - - - - - -
-Packages that use LargestContentExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of LargestContentExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as LargestContentExtractor
-static LargestContentExtractorLargestContentExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return LargestContentExtractor
-static LargestContentExtractorLargestContentExtractor.getInstance() - -
-          Returns the singleton instance for LargestContentExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html deleted file mode 100644 index 5f386c3..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.NumWordsRulesExtractor

-
- - - - - - - - - -
-Packages that use NumWordsRulesExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of NumWordsRulesExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as NumWordsRulesExtractor
-static NumWordsRulesExtractorNumWordsRulesExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return NumWordsRulesExtractor
-static NumWordsRulesExtractorNumWordsRulesExtractor.getInstance() - -
-          Returns the singleton instance for NumWordsRulesExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/package-frame.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/package-frame.html deleted file mode 100644 index 250c480..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/package-frame.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors (1.0 API) - - - - - - - - - -de.l3s.boilerpipe.extractors - - - - -
-Classes  - -
-ArticleExtractor -
-ArticleSentencesExtractor -
-DefaultExtractor -
-ExtractorBase -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-LargestContentExtractor -
-NumWordsRulesExtractor
- - - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/package-summary.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/package-summary.html deleted file mode 100644 index 4344764..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/package-summary.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.extractors -

- -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
ArticleExtractorA full-text extractor which is tuned towards news articles.
ArticleSentencesExtractorA full-text extractor which is tuned towards extracting sentences from news articles.
DefaultExtractorA quite generic full-text extractor.
ExtractorBaseThe base class of Extractors.
KeepEverythingExtractorMarks everything as content.
KeepEverythingWithMinKWordsExtractorA full-text extractor which extracts the largest text component of a page.
LargestContentExtractorA full-text extractor which extracts the largest text component of a page.
NumWordsRulesExtractorA quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  - -

-

-Package de.l3s.boilerpipe.extractors Description -

- -

-

-This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/package-tree.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/package-tree.html deleted file mode 100644 index a849037..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/package-tree.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.extractors -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/extractors/package-use.html b/javadoc/1.0/de/l3s/boilerpipe/extractors/package-use.html deleted file mode 100644 index 5096011..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/extractors/package-use.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.extractors (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.extractors

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.extractors
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.extractors used by de.l3s.boilerpipe.extractors
ArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
ArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
DefaultExtractor - -
-          A quite generic full-text extractor.
ExtractorBase - -
-          The base class of Extractors.
KeepEverythingExtractor - -
-          Marks everything as content.
LargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
NumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html deleted file mode 100644 index 3d51817..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - -DensityRulesClassifier (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class DensityRulesClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.DensityRulesClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class DensityRulesClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static DensityRulesClassifierINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
DensityRulesClassifier() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  booleanclassify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-static DensityRulesClassifiergetInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final DensityRulesClassifier INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DensityRulesClassifier

-
-public DensityRulesClassifier()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static DensityRulesClassifier getInstance()
-
-
Returns the singleton instance for RulebasedBoilerpipeClassifier. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-classify

-
-protected boolean classify(TextBlock prev,
-                           TextBlock curr,
-                           TextBlock next)
-
-
-
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html deleted file mode 100644 index fb7d780..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - -IgnoreBlocksAfterContentFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class IgnoreBlocksAfterContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class IgnoreBlocksAfterContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks as "non-content" that occur after blocks that have been - marked TextBlockLabel.INDICATES_END_OF_TEXT. These marks are ignored - unless a minimum number of words in content blocks occur before this mark (default: 60). - This can be used in conjunction with an upstream TerminatingBlocksFinder. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
TerminatingBlocksFinder
-
- -

- - - - - - - - - - - -
-Field Summary
-static IgnoreBlocksAfterContentFilterDEFAULT_INSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
IgnoreBlocksAfterContentFilter(int minNumWords) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-static IgnoreBlocksAfterContentFiltergetDefaultInstance() - -
-          Returns the singleton instance for DeleteBlocksAfterContentFilter.
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-DEFAULT_INSTANCE

-
-public static final IgnoreBlocksAfterContentFilter DEFAULT_INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-IgnoreBlocksAfterContentFilter

-
-public IgnoreBlocksAfterContentFilter(int minNumWords)
-
-
- - - - - - - - -
-Method Detail
- -

-getDefaultInstance

-
-public static IgnoreBlocksAfterContentFilter getDefaultInstance()
-
-
Returns the singleton instance for DeleteBlocksAfterContentFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html deleted file mode 100644 index 44cbee7..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - -KeepLargestFulltextBlockFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class KeepLargestFulltextBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class KeepLargestFulltextBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps the largest TextBlock only (by the number of words). In case of - more than one block with the same number of words, the first block is chosen. - All discarded blocks are marked "not content" and flagged as - TextBlockLabel.MIGHT_BE_CONTENT. - - As opposed to KeepLargestBlockFilter, the number of words are - computed using TextBlock#getNumFullTextWords(), which only counts - words that occur in text elements with at least 9 words and are thus believed to be full text. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static KeepLargestFulltextBlockFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
KeepLargestFulltextBlockFilter() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepLargestFulltextBlockFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-KeepLargestFulltextBlockFilter

-
-public KeepLargestFulltextBlockFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html deleted file mode 100644 index 2dee3b8..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - -MinFulltextWordsFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class MinFulltextWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinFulltextWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only those content blocks which contain at least k full-text words - (measured by TextBlock#getNumFullTextWords()). k is 30 by default. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static MinFulltextWordsFilterDEFAULT_INSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
MinFulltextWordsFilter(int minWords) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-static MinFulltextWordsFiltergetDefaultInstance() - -
-           
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-DEFAULT_INSTANCE

-
-public static final MinFulltextWordsFilter DEFAULT_INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-MinFulltextWordsFilter

-
-public MinFulltextWordsFilter(int minWords)
-
-
- - - - - - - - -
-Method Detail
- -

-getDefaultInstance

-
-public static MinFulltextWordsFilter getDefaultInstance()
-
-
-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html deleted file mode 100644 index d08fa26..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - -NumWordsRulesClassifier (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class NumWordsRulesClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class NumWordsRulesClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static NumWordsRulesClassifierINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
NumWordsRulesClassifier() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  booleanclassify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-static NumWordsRulesClassifiergetInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final NumWordsRulesClassifier INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-NumWordsRulesClassifier

-
-public NumWordsRulesClassifier()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static NumWordsRulesClassifier getInstance()
-
-
Returns the singleton instance for RulebasedBoilerpipeClassifier. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-classify

-
-protected boolean classify(TextBlock prev,
-                           TextBlock curr,
-                           TextBlock next)
-
-
-
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html deleted file mode 100644 index 94b755b..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - -TerminatingBlocksFinder (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class TerminatingBlocksFinder

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class TerminatingBlocksFinder
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Finds blocks which are potentially indicating the end of an article text and marks - them with TextBlockLabel.INDICATES_END_OF_TEXT. This can be used in conjunction - with a downstream IgnoreBlocksAfterContentFilter. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
IgnoreBlocksAfterContentFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static TerminatingBlocksFinderINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
TerminatingBlocksFinder() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static TerminatingBlocksFindergetInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final TerminatingBlocksFinder INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-TerminatingBlocksFinder

-
-public TerminatingBlocksFinder()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static TerminatingBlocksFinder getInstance()
-
-
Returns the singleton instance for TerminatingBlocksFinder. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html deleted file mode 100644 index 774cc04..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.DensityRulesClassifier (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.DensityRulesClassifier

-
- - - - - - - - - -
-Packages that use DensityRulesClassifier
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of DensityRulesClassifier in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as DensityRulesClassifier
-static DensityRulesClassifierDensityRulesClassifier.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return DensityRulesClassifier
-static DensityRulesClassifierDensityRulesClassifier.getInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html deleted file mode 100644 index 600dc27..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter

-
- - - - - - - - - -
-Packages that use IgnoreBlocksAfterContentFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of IgnoreBlocksAfterContentFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as IgnoreBlocksAfterContentFilter
-static IgnoreBlocksAfterContentFilterIgnoreBlocksAfterContentFilter.DEFAULT_INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return IgnoreBlocksAfterContentFilter
-static IgnoreBlocksAfterContentFilterIgnoreBlocksAfterContentFilter.getDefaultInstance() - -
-          Returns the singleton instance for DeleteBlocksAfterContentFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html deleted file mode 100644 index c279ca7..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter

-
- - - - - - - - - -
-Packages that use KeepLargestFulltextBlockFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of KeepLargestFulltextBlockFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as KeepLargestFulltextBlockFilter
-static KeepLargestFulltextBlockFilterKeepLargestFulltextBlockFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html deleted file mode 100644 index 9a52468..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter

-
- - - - - - - - - -
-Packages that use MinFulltextWordsFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of MinFulltextWordsFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as MinFulltextWordsFilter
-static MinFulltextWordsFilterMinFulltextWordsFilter.DEFAULT_INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return MinFulltextWordsFilter
-static MinFulltextWordsFilterMinFulltextWordsFilter.getDefaultInstance() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html deleted file mode 100644 index 666bc96..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier

-
- - - - - - - - - -
-Packages that use NumWordsRulesClassifier
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of NumWordsRulesClassifier in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as NumWordsRulesClassifier
-static NumWordsRulesClassifierNumWordsRulesClassifier.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return NumWordsRulesClassifier
-static NumWordsRulesClassifierNumWordsRulesClassifier.getInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html deleted file mode 100644 index a64742a..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder

-
- - - - - - - - - -
-Packages that use TerminatingBlocksFinder
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of TerminatingBlocksFinder in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as TerminatingBlocksFinder
-static TerminatingBlocksFinderTerminatingBlocksFinder.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return TerminatingBlocksFinder
-static TerminatingBlocksFinderTerminatingBlocksFinder.getInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-frame.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-frame.html deleted file mode 100644 index fe694f7..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-frame.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english (1.0 API) - - - - - - - - - -de.l3s.boilerpipe.filters.english - - - - -
-Classes  - -
-DensityRulesClassifier -
-IgnoreBlocksAfterContentFilter -
-KeepLargestFulltextBlockFilter -
-MinFulltextWordsFilter -
-NumWordsRulesClassifier -
-TerminatingBlocksFinder
- - - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-summary.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-summary.html deleted file mode 100644 index cb81d7a..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-summary.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.english -

- -The BoilerpipeFilters in this package have only been tested on English text. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
DensityRulesClassifierClassifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
IgnoreBlocksAfterContentFilterMarks all blocks as "non-content" that occur after blocks that have been - marked TextBlockLabel.INDICATES_END_OF_TEXT.
KeepLargestFulltextBlockFilterKeeps the largest TextBlock only (by the number of words).
MinFulltextWordsFilterKeeps only those content blocks which contain at least k full-text words - (measured by TextBlock#getNumFullTextWords()). k is 30 by default.
NumWordsRulesClassifierClassifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
TerminatingBlocksFinderFinds blocks which are potentially indicating the end of an article text and marks - them with TextBlockLabel.INDICATES_END_OF_TEXT.
-  - -

-

-Package de.l3s.boilerpipe.filters.english Description -

- -

-

-The BoilerpipeFilters in this package have only been tested on English text. -

-

-That is, they will probably work with other Western languages, but maybe need some parameter tuning to perform well. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-tree.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-tree.html deleted file mode 100644 index 5341cc1..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-tree.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.english -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-use.html b/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-use.html deleted file mode 100644 index 29ce452..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/english/package-use.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.english (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.english

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.english
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.english used by de.l3s.boilerpipe.filters.english
DensityRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
IgnoreBlocksAfterContentFilter - -
-          Marks all blocks as "non-content" that occur after blocks that have been - marked TextBlockLabel.INDICATES_END_OF_TEXT.
KeepLargestFulltextBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
MinFulltextWordsFilter - -
-          Keeps only those content blocks which contain at least k full-text words - (measured by TextBlock#getNumFullTextWords()). k is 30 by default.
NumWordsRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
TerminatingBlocksFinder - -
-          Finds blocks which are potentially indicating the end of an article text and marks - them with TextBlockLabel.INDICATES_END_OF_TEXT.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html deleted file mode 100644 index a2259d2..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html +++ /dev/null @@ -1,335 +0,0 @@ - - - - - - -BlockProximityFusion (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class BlockProximityFusion

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class BlockProximityFusion
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit. - This probably makes sense only in cases where an upstream filter already has removed some blocks. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static BlockProximityFusionMAX_DISTANCE_1 - -
-           
-static BlockProximityFusionMAX_DISTANCE_1_CONTENT_ONLY - -
-           
-  - - - - - - - - - - -
-Constructor Summary
BlockProximityFusion(int maxBlocksDistance, - boolean contentOnly) - -
-          Creates a new BlockProximityFusion instance.
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-MAX_DISTANCE_1

-
-public static final BlockProximityFusion MAX_DISTANCE_1
-
-
-
-
-
- -

-MAX_DISTANCE_1_CONTENT_ONLY

-
-public static final BlockProximityFusion MAX_DISTANCE_1_CONTENT_ONLY
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-BlockProximityFusion

-
-public BlockProximityFusion(int maxBlocksDistance,
-                            boolean contentOnly)
-
-
Creates a new BlockProximityFusion instance. -

-

-
Parameters:
maxBlocksDistance - The maximum distance in blocks.
contentOnly -
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html deleted file mode 100644 index 5e7e66e..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - -DocumentTitleMatchClassifier (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class DocumentTitleMatchClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class DocumentTitleMatchClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
DocumentTitleMatchClassifier(java.lang.String title) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-DocumentTitleMatchClassifier

-
-public DocumentTitleMatchClassifier(java.lang.String title)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html deleted file mode 100644 index de81e06..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - -ExpandTitleToContentFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class ExpandTitleToContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class ExpandTitleToContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked TextBlockLabel.MIGHT_BE_CONTENT. - - This filter is quite specific to the news domain. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ExpandTitleToContentFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ExpandTitleToContentFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ExpandTitleToContentFiltergetInstance() - -
-          Returns the singleton instance for ExpandTitleToContentFilter.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ExpandTitleToContentFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ExpandTitleToContentFilter

-
-public ExpandTitleToContentFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ExpandTitleToContentFilter getInstance()
-
-
Returns the singleton instance for ExpandTitleToContentFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html deleted file mode 100644 index b4c8c68..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - -KeepLargestBlockFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class KeepLargestBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class KeepLargestBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps the largest TextBlock only (by the number of words). In case of - more than one block with the same number of words, the first block is chosen. - All discarded blocks are marked "not content" and flagged as - TextBlockLabel.MIGHT_BE_CONTENT. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static KeepLargestBlockFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
KeepLargestBlockFilter() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepLargestBlockFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-KeepLargestBlockFilter

-
-public KeepLargestBlockFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html deleted file mode 100644 index ba6a75c..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - -SimpleBlockFusionProcessor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class SimpleBlockFusionProcessor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class SimpleBlockFusionProcessor
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Merges two subsequent blocks if their text densities are equal. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static SimpleBlockFusionProcessorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
SimpleBlockFusionProcessor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static SimpleBlockFusionProcessorgetInstance() - -
-          Returns the singleton instance for BlockFusionProcessor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final SimpleBlockFusionProcessor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-SimpleBlockFusionProcessor

-
-public SimpleBlockFusionProcessor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static SimpleBlockFusionProcessor getInstance()
-
-
Returns the singleton instance for BlockFusionProcessor. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html deleted file mode 100644 index 56f5882..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion

-
- - - - - - - - - -
-Packages that use BlockProximityFusion
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of BlockProximityFusion in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as BlockProximityFusion
-static BlockProximityFusionBlockProximityFusion.MAX_DISTANCE_1 - -
-           
-static BlockProximityFusionBlockProximityFusion.MAX_DISTANCE_1_CONTENT_ONLY - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html deleted file mode 100644 index 44e0f77..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier

-
-No usage of de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html deleted file mode 100644 index 97f52f5..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter

-
- - - - - - - - - -
-Packages that use ExpandTitleToContentFilter
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of ExpandTitleToContentFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as ExpandTitleToContentFilter
-static ExpandTitleToContentFilterExpandTitleToContentFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that return ExpandTitleToContentFilter
-static ExpandTitleToContentFilterExpandTitleToContentFilter.getInstance() - -
-          Returns the singleton instance for ExpandTitleToContentFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html deleted file mode 100644 index 94a7403..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter

-
- - - - - - - - - -
-Packages that use KeepLargestBlockFilter
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of KeepLargestBlockFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as KeepLargestBlockFilter
-static KeepLargestBlockFilterKeepLargestBlockFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html deleted file mode 100644 index e5a0139..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor

-
- - - - - - - - - -
-Packages that use SimpleBlockFusionProcessor
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of SimpleBlockFusionProcessor in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as SimpleBlockFusionProcessor
-static SimpleBlockFusionProcessorSimpleBlockFusionProcessor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that return SimpleBlockFusionProcessor
-static SimpleBlockFusionProcessorSimpleBlockFusionProcessor.getInstance() - -
-          Returns the singleton instance for BlockFusionProcessor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-frame.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-frame.html deleted file mode 100644 index 51f5a17..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-frame.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics (1.0 API) - - - - - - - - - -de.l3s.boilerpipe.filters.heuristics - - - - -
-Classes  - -
-BlockProximityFusion -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-KeepLargestBlockFilter -
-SimpleBlockFusionProcessor
- - - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-summary.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-summary.html deleted file mode 100644 index a1fb37e..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-summary.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.heuristics -

- -The BoilerpipeFilters in this package are pure heuristics. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BlockProximityFusionFuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
DocumentTitleMatchClassifierMarks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
ExpandTitleToContentFilterMarks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked TextBlockLabel.MIGHT_BE_CONTENT.
KeepLargestBlockFilterKeeps the largest TextBlock only (by the number of words).
SimpleBlockFusionProcessorMerges two subsequent blocks if their text densities are equal.
-  - -

-

-Package de.l3s.boilerpipe.filters.heuristics Description -

- -

-

-The BoilerpipeFilters in this package are pure heuristics. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-tree.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-tree.html deleted file mode 100644 index 0148478..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-tree.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.heuristics -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-use.html b/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-use.html deleted file mode 100644 index 6a43ddb..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/heuristics/package-use.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.heuristics (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.heuristics

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.heuristics
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.heuristics used by de.l3s.boilerpipe.filters.heuristics
BlockProximityFusion - -
-          Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
ExpandTitleToContentFilter - -
-          Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked TextBlockLabel.MIGHT_BE_CONTENT.
KeepLargestBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
SimpleBlockFusionProcessor - -
-          Merges two subsequent blocks if their text densities are equal.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html deleted file mode 100644 index 777283c..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - -BoilerplateBlockFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class BoilerplateBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class BoilerplateBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Removes TextBlocks which have explicitly been marked as "not content". -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static BoilerplateBlockFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
BoilerplateBlockFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static BoilerplateBlockFiltergetInstance() - -
-          Returns the singleton instance for BoilerplateBlockFilter.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final BoilerplateBlockFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-BoilerplateBlockFilter

-
-public BoilerplateBlockFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static BoilerplateBlockFilter getInstance()
-
-
Returns the singleton instance for BoilerplateBlockFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/InvertedFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/InvertedFilter.html deleted file mode 100644 index ddb72b5..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/InvertedFilter.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - -InvertedFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class InvertedFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.InvertedFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class InvertedFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Reverts the "isContent" flag for all TextBlocks -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static InvertedFilterINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final InvertedFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html deleted file mode 100644 index 1b1d9f2..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - -MarkEverythingContentFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MarkEverythingContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MarkEverythingContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks as content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static MarkEverythingContentFilterINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final MarkEverythingContentFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html deleted file mode 100644 index f8f13b7..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - -MinClauseWordsFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MinClauseWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinClauseWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5). - - NOTE: You might consider using the SplitParagraphBlocksFilter - upstream. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
SplitParagraphBlocksFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static MinClauseWordsFilterINSTANCE - -
-           
-  - - - - - - - - - - - - - -
-Constructor Summary
MinClauseWordsFilter(int minWords) - -
-           
MinClauseWordsFilter(int minWords, - boolean acceptClausesWithoutDelimiter) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final MinClauseWordsFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-MinClauseWordsFilter

-
-public MinClauseWordsFilter(int minWords)
-
-
-
- -

-MinClauseWordsFilter

-
-public MinClauseWordsFilter(int minWords,
-                            boolean acceptClausesWithoutDelimiter)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html deleted file mode 100644 index ed4a250..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -MinWordsFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MinWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MinWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only those content blocks which contain at least k words. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
MinWordsFilter(int minWords) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MinWordsFilter

-
-public MinWordsFilter(int minWords)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html deleted file mode 100644 index bd9fa5c..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -SplitParagraphBlocksFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class SplitParagraphBlocksFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class SplitParagraphBlocksFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Splits TextBlocks at paragraph boundaries. - - NOTE: This is not fully supported (i.e., it will break highlighting support - via #getContainedTextElements()), but this one probably is necessary for some other - filters. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
MinClauseWordsFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static SplitParagraphBlocksFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
SplitParagraphBlocksFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static SplitParagraphBlocksFiltergetInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final SplitParagraphBlocksFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-SplitParagraphBlocksFilter

-
-public SplitParagraphBlocksFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static SplitParagraphBlocksFilter getInstance()
-
-
Returns the singleton instance for TerminatingBlocksFinder. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html deleted file mode 100644 index b1968d9..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter

-
- - - - - - - - - -
-Packages that use BoilerplateBlockFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of BoilerplateBlockFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as BoilerplateBlockFilter
-static BoilerplateBlockFilterBoilerplateBlockFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that return BoilerplateBlockFilter
-static BoilerplateBlockFilterBoilerplateBlockFilter.getInstance() - -
-          Returns the singleton instance for BoilerplateBlockFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html deleted file mode 100644 index fe6a21d..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.InvertedFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.InvertedFilter

-
- - - - - - - - - -
-Packages that use InvertedFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of InvertedFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as InvertedFilter
-static InvertedFilterInvertedFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html deleted file mode 100644 index e9ffa81..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter

-
- - - - - - - - - -
-Packages that use MarkEverythingContentFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of MarkEverythingContentFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as MarkEverythingContentFilter
-static MarkEverythingContentFilterMarkEverythingContentFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html deleted file mode 100644 index abbd439..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter

-
- - - - - - - - - -
-Packages that use MinClauseWordsFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of MinClauseWordsFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as MinClauseWordsFilter
-static MinClauseWordsFilterMinClauseWordsFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html deleted file mode 100644 index 4f883fc..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MinWordsFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MinWordsFilter

-
-No usage of de.l3s.boilerpipe.filters.simple.MinWordsFilter -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html deleted file mode 100644 index e127af4..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter

-
- - - - - - - - - -
-Packages that use SplitParagraphBlocksFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of SplitParagraphBlocksFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as SplitParagraphBlocksFilter
-static SplitParagraphBlocksFilterSplitParagraphBlocksFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that return SplitParagraphBlocksFilter
-static SplitParagraphBlocksFilterSplitParagraphBlocksFilter.getInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-frame.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-frame.html deleted file mode 100644 index 822c0ca..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-frame.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple (1.0 API) - - - - - - - - - -de.l3s.boilerpipe.filters.simple - - - - -
-Classes  - -
-BoilerplateBlockFilter -
-InvertedFilter -
-MarkEverythingContentFilter -
-MinClauseWordsFilter -
-MinWordsFilter -
-SplitParagraphBlocksFilter
- - - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-summary.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-summary.html deleted file mode 100644 index 6181b43..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-summary.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.simple -

- -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BoilerplateBlockFilterRemoves TextBlocks which have explicitly been marked as "not content".
InvertedFilterReverts the "isContent" flag for all TextBlocks
MarkEverythingContentFilterMarks all blocks as content.
MinClauseWordsFilterKeeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
MinWordsFilterKeeps only those content blocks which contain at least k words.
SplitParagraphBlocksFilterSplits TextBlocks at paragraph boundaries.
-  - -

-

-Package de.l3s.boilerpipe.filters.simple Description -

- -

-

-The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-tree.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-tree.html deleted file mode 100644 index e96b789..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-tree.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.simple -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-use.html b/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-use.html deleted file mode 100644 index 3519551..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/filters/simple/package-use.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.simple (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.simple

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.simple
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.simple used by de.l3s.boilerpipe.filters.simple
BoilerplateBlockFilter - -
-          Removes TextBlocks which have explicitly been marked as "not content".
InvertedFilter - -
-          Reverts the "isContent" flag for all TextBlocks
MarkEverythingContentFilter - -
-          Marks all blocks as content.
MinClauseWordsFilter - -
-          Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
SplitParagraphBlocksFilter - -
-          Splits TextBlocks at paragraph boundaries.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/package-frame.html b/javadoc/1.0/de/l3s/boilerpipe/package-frame.html deleted file mode 100644 index 7491e3a..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/package-frame.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -de.l3s.boilerpipe (1.0 API) - - - - - - - - - -de.l3s.boilerpipe - - - - -
-Interfaces  - -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeInput
- - - - - - -
-Exceptions  - -
-BoilerpipeProcessingException
- - - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/package-summary.html b/javadoc/1.0/de/l3s/boilerpipe/package-summary.html deleted file mode 100644 index 9f51ecb..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/package-summary.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -de.l3s.boilerpipe (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe -

- -The Boilerpipe top-level package. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - -
-Interface Summary
BoilerpipeExtractorDescribes a complete filter pipeline.
BoilerpipeFilterA generic BoilerpipeFilter.
BoilerpipeInputA source that returns TextDocuments.
-  - -

- - - - - - - - - -
-Exception Summary
BoilerpipeProcessingExceptionException for signaling failure in the processing pipeline.
-  - -

-

-Package de.l3s.boilerpipe Description -

- -

-

-The Boilerpipe top-level package. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/package-tree.html b/javadoc/1.0/de/l3s/boilerpipe/package-tree.html deleted file mode 100644 index 97690ea..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/package-tree.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -de.l3s.boilerpipe Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

-
    -
  • java.lang.Object -
-

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/package-use.html b/javadoc/1.0/de/l3s/boilerpipe/package-use.html deleted file mode 100644 index 50e161e..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/package-use.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.extractors
BoilerpipeExtractor - -
-          Describes a complete filter pipeline.
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.english
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.heuristics
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.simple
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.sax
BoilerpipeInput - -
-          A source that returns TextDocuments.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html b/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html deleted file mode 100644 index f54f376..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html +++ /dev/null @@ -1,609 +0,0 @@ - - - - - - -BoilerpipeHTMLContentHandler (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeHTMLContentHandler

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler
-
-
-
All Implemented Interfaces:
org.xml.sax.ContentHandler
-
-
-
-
public class BoilerpipeHTMLContentHandler
extends java.lang.Object
implements org.xml.sax.ContentHandler
- - -

-A simple SAX ContentHandler, used by BoilerpipeSAXInput. - Can be used by different parser implementations, e.g. NekoHTML and TagSoup. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
BoilerpipeHTMLContentHandler() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidcharacters(char[] ch, - int start, - int length) - -
-           
- voidendDocument() - -
-           
- voidendElement(java.lang.String uri, - java.lang.String localName, - java.lang.String qName) - -
-           
- voidendPrefixMapping(java.lang.String prefix) - -
-           
- java.lang.StringgetTitle() - -
-           
- voidignorableWhitespace(char[] ch, - int start, - int length) - -
-           
- voidprocessingInstruction(java.lang.String target, - java.lang.String data) - -
-           
- voidsetDocumentLocator(org.xml.sax.Locator locator) - -
-           
- voidsetTitle(java.lang.String s) - -
-           
- voidskippedEntity(java.lang.String name) - -
-           
- voidstartDocument() - -
-           
- voidstartElement(java.lang.String uri, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- voidstartPrefixMapping(java.lang.String prefix, - java.lang.String uri) - -
-           
- TextDocumenttoTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlocks.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeHTMLContentHandler

-
-public BoilerpipeHTMLContentHandler()
-
-
- - - - - - - - -
-Method Detail
- -

-endDocument

-
-public void endDocument()
-                 throws org.xml.sax.SAXException
-
-
-
Specified by:
endDocument in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-endPrefixMapping

-
-public void endPrefixMapping(java.lang.String prefix)
-                      throws org.xml.sax.SAXException
-
-
-
Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-ignorableWhitespace

-
-public void ignorableWhitespace(char[] ch,
-                                int start,
-                                int length)
-                         throws org.xml.sax.SAXException
-
-
-
Specified by:
ignorableWhitespace in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-processingInstruction

-
-public void processingInstruction(java.lang.String target,
-                                  java.lang.String data)
-                           throws org.xml.sax.SAXException
-
-
-
Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-setDocumentLocator

-
-public void setDocumentLocator(org.xml.sax.Locator locator)
-
-
-
Specified by:
setDocumentLocator in interface org.xml.sax.ContentHandler
-
-
-
-
-
-
- -

-skippedEntity

-
-public void skippedEntity(java.lang.String name)
-                   throws org.xml.sax.SAXException
-
-
-
Specified by:
skippedEntity in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startDocument

-
-public void startDocument()
-                   throws org.xml.sax.SAXException
-
-
-
Specified by:
startDocument in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startPrefixMapping

-
-public void startPrefixMapping(java.lang.String prefix,
-                               java.lang.String uri)
-                        throws org.xml.sax.SAXException
-
-
-
Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startElement

-
-public void startElement(java.lang.String uri,
-                         java.lang.String localName,
-                         java.lang.String qName,
-                         org.xml.sax.Attributes atts)
-                  throws org.xml.sax.SAXException
-
-
-
Specified by:
startElement in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-endElement

-
-public void endElement(java.lang.String uri,
-                       java.lang.String localName,
-                       java.lang.String qName)
-                throws org.xml.sax.SAXException
-
-
-
Specified by:
endElement in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-characters

-
-public void characters(char[] ch,
-                       int start,
-                       int length)
-                throws org.xml.sax.SAXException
-
-
-
Specified by:
characters in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-getTitle

-
-public java.lang.String getTitle()
-
-
-
-
-
-
-
-
-
- -

-setTitle

-
-public void setTitle(java.lang.String s)
-
-
-
-
-
-
-
-
-
- -

-toTextDocument

-
-public TextDocument toTextDocument()
-
-
Returns a TextDocument containing the extracted TextBlocks. - NOTE: Only call this after #parse(org.xml.sax.InputSource). -

-

-
-
-
- -
Returns:
The TextDocument
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html b/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html deleted file mode 100644 index 4a6648e..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html +++ /dev/null @@ -1,371 +0,0 @@ - - - - - - -BoilerpipeHTMLParser (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeHTMLParser

-
-java.lang.Object
-  extended by org.apache.xerces.parsers.XMLParser
-      extended by org.apache.xerces.parsers.AbstractXMLDocumentParser
-          extended by org.apache.xerces.parsers.AbstractSAXParser
-              extended by de.l3s.boilerpipe.sax.BoilerpipeHTMLParser
-
-
-
All Implemented Interfaces:
org.apache.xerces.xni.XMLDocumentHandler, org.apache.xerces.xni.XMLDTDContentModelHandler, org.apache.xerces.xni.XMLDTDHandler, org.apache.xerces.xs.PSVIProvider, org.xml.sax.Parser, org.xml.sax.XMLReader
-
-
-
-
public class BoilerpipeHTMLParser
extends org.apache.xerces.parsers.AbstractSAXParser
- - -

-A simple SAX Parser, used by BoilerpipeSAXInput. The parser uses CyberNeko to parse HTML content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - -
-Nested Class Summary
- - - - - - - -
Nested classes/interfaces inherited from class org.apache.xerces.parsers.AbstractSAXParser
org.apache.xerces.parsers.AbstractSAXParser.AttributesProxy, org.apache.xerces.parsers.AbstractSAXParser.LocatorProxy
-  - - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.AbstractSAXParser
ALLOW_UE_AND_NOTATION_EVENTS, DECLARATION_HANDLER, DOM_NODE, fContentHandler, fDeclaredAttrs, fDeclHandler, fDocumentHandler, fDTDHandler, fLexicalHandler, fLexicalHandlerParameterEntities, fNamespaceContext, fNamespacePrefixes, fNamespaces, fParseInProgress, fQName, fResolveDTDURIs, fStandalone, fUseEntityResolver2, fVersion, fXMLNSURIs, LEXICAL_HANDLER, NAMESPACES, STRING_INTERNING
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.AbstractXMLDocumentParser
fDocumentSource, fDTDContentModelSource, fDTDSource, fInDTD
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.XMLParser
ENTITY_RESOLVER, ERROR_HANDLER, fConfiguration
- - - - - - - -
Fields inherited from interface org.apache.xerces.xni.XMLDTDHandler
CONDITIONAL_IGNORE, CONDITIONAL_INCLUDE
- - - - - - - -
Fields inherited from interface org.apache.xerces.xni.XMLDTDContentModelHandler
OCCURS_ONE_OR_MORE, OCCURS_ZERO_OR_MORE, OCCURS_ZERO_OR_ONE, SEPARATOR_CHOICE, SEPARATOR_SEQUENCE
-  - - - - - - - - - - -
-Constructor Summary
BoilerpipeHTMLParser() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- TextDocumenttoTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlocks.
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.AbstractSAXParser
attributeDecl, characters, comment, doctypeDecl, elementDecl, endCDATA, endDocument, endDTD, endElement, endExternalSubset, endGeneralEntity, endNamespaceMapping, endParameterEntity, externalEntityDecl, getAttributePSVI, getAttributePSVIByName, getContentHandler, getDeclHandler, getDTDHandler, getElementPSVI, getEntityResolver, getErrorHandler, getFeature, getLexicalHandler, getProperty, ignorableWhitespace, internalEntityDecl, notationDecl, parse, parse, processingInstruction, reset, setContentHandler, setDeclHandler, setDocumentHandler, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setLexicalHandler, setLocale, setProperty, startCDATA, startDocument, startElement, startExternalSubset, startGeneralEntity, startNamespaceMapping, startParameterEntity, unparsedEntityDecl, xmlDecl
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.AbstractXMLDocumentParser
any, element, empty, emptyElement, endAttlist, endConditional, endContentModel, endGroup, getDocumentSource, getDTDContentModelSource, getDTDSource, ignoredCharacters, occurrence, pcdata, separator, setDocumentSource, setDTDContentModelSource, setDTDSource, startAttlist, startConditional, startContentModel, startDTD, startGroup, textDecl
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.XMLParser
parse
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeHTMLParser

-
-public BoilerpipeHTMLParser()
-
-
- - - - - - - - -
-Method Detail
- -

-toTextDocument

-
-public TextDocument toTextDocument()
-
-
Returns a TextDocument containing the extracted TextBlocks. - NOTE: Only call this after AbstractSAXParser.parse(org.xml.sax.InputSource). -

-

- -
Returns:
The TextDocument
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html b/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html deleted file mode 100644 index 5e9cc96..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - -BoilerpipeSAXInput (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeSAXInput

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.BoilerpipeSAXInput
-
-
-
All Implemented Interfaces:
BoilerpipeInput
-
-
-
-
public final class BoilerpipeSAXInput
extends java.lang.Object
implements BoilerpipeInput
- - -

-Parses an InputSource using SAX and returns a TextDocument. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
BoilerpipeSAXInput(org.xml.sax.InputSource is) - -
-          Creates a new instance of BoilerpipeSAXInput for the given InputSource.
-  - - - - - - - - - - - -
-Method Summary
- TextDocumentgetTextDocument() - -
-          Returns (somehow) a TextDocument.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeSAXInput

-
-public BoilerpipeSAXInput(org.xml.sax.InputSource is)
-                   throws org.xml.sax.SAXException
-
-
Creates a new instance of BoilerpipeSAXInput for the given InputSource. -

-

-
Parameters:
is - -
Throws: -
org.xml.sax.SAXException
-
- - - - - - - - -
-Method Detail
- -

-getTextDocument

-
-public TextDocument getTextDocument()
-                             throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeInput
-
Returns (somehow) a TextDocument. -

-

-
Specified by:
getTextDocument in interface BoilerpipeInput
-
-
- -
Returns:
A TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/HTMLHighlighter.html b/javadoc/1.0/de/l3s/boilerpipe/sax/HTMLHighlighter.html deleted file mode 100644 index 993a406..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/HTMLHighlighter.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - -HTMLHighlighter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class HTMLHighlighter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.HTMLHighlighter
-
-
-
-
public final class HTMLHighlighter
extends java.lang.Object
- - -

-Highlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
HTMLHighlighter(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as an InputSource).
HTMLHighlighter(TextDocument doc, - java.lang.String origHTML) - -
-          Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as a String).
-  - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetHTML() - -
-          Returns the highlighted HTML code.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-HTMLHighlighter

-
-public HTMLHighlighter(TextDocument doc,
-                       java.lang.String origHTML)
-                throws BoilerpipeProcessingException
-
-
Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as a String). -

-

-
Parameters:
doc - The processed TextDocument.
origHTML - The original HTML document. -
Throws: -
BoilerpipeProcessingException
-
-
- -

-HTMLHighlighter

-
-public HTMLHighlighter(TextDocument doc,
-                       org.xml.sax.InputSource is)
-                throws BoilerpipeProcessingException
-
-
Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as an InputSource). Please remember - to re-initialize the InputSource if you have used it already for - creating the TextDocument. -

-

-
Parameters:
doc - The processed TextDocument.
is - The original HTML document. -
Throws: -
BoilerpipeProcessingException
-
- - - - - - - - -
-Method Detail
- -

-getHTML

-
-public java.lang.String getHTML()
-
-
Returns the highlighted HTML code. -

-

- -
Returns:
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html b/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html deleted file mode 100644 index 146e5bd..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler

-
-No usage of de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html b/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html deleted file mode 100644 index a92a877..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeHTMLParser

-
-No usage of de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html b/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html deleted file mode 100644 index 294bea4..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeSAXInput (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeSAXInput

-
-No usage of de.l3s.boilerpipe.sax.BoilerpipeSAXInput -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html b/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html deleted file mode 100644 index d2a4da6..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.HTMLHighlighter (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.HTMLHighlighter

-
-No usage of de.l3s.boilerpipe.sax.HTMLHighlighter -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/package-frame.html b/javadoc/1.0/de/l3s/boilerpipe/sax/package-frame.html deleted file mode 100644 index 71b3bc4..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/package-frame.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax (1.0 API) - - - - - - - - - -de.l3s.boilerpipe.sax - - - - -
-Classes  - -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeSAXInput -
-HTMLHighlighter
- - - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/package-summary.html b/javadoc/1.0/de/l3s/boilerpipe/sax/package-summary.html deleted file mode 100644 index ea0877e..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/package-summary.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.sax -

- -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BoilerpipeHTMLContentHandlerA simple SAX ContentHandler, used by BoilerpipeSAXInput.
BoilerpipeHTMLParserA simple SAX Parser, used by BoilerpipeSAXInput.
BoilerpipeSAXInputParses an InputSource using SAX and returns a TextDocument.
HTMLHighlighterHighlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument.
-  - -

-

-Package de.l3s.boilerpipe.sax Description -

- -

-

-Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/package-tree.html b/javadoc/1.0/de/l3s/boilerpipe/sax/package-tree.html deleted file mode 100644 index 16d78c1..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/package-tree.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.sax -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

-
    -
  • java.lang.Object
      -
    • de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler (implements org.xml.sax.ContentHandler) -
    • de.l3s.boilerpipe.sax.BoilerpipeSAXInput (implements de.l3s.boilerpipe.BoilerpipeInput) -
    • de.l3s.boilerpipe.sax.HTMLHighlighter
    • org.apache.xerces.parsers.XMLParser
        -
      • org.apache.xerces.parsers.AbstractXMLDocumentParser (implements org.apache.xerces.xni.XMLDocumentHandler, org.apache.xerces.xni.XMLDTDContentModelHandler, org.apache.xerces.xni.XMLDTDHandler) -
          -
        • org.apache.xerces.parsers.AbstractSAXParser (implements org.xml.sax.Parser, org.apache.xerces.xs.PSVIProvider, org.xml.sax.XMLReader) - -
        -
      -
    -
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/sax/package-use.html b/javadoc/1.0/de/l3s/boilerpipe/sax/package-use.html deleted file mode 100644 index 1bd4e1f..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/sax/package-use.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.sax (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.sax

-
-No usage of de.l3s.boilerpipe.sax -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/util/UnicodeTokenizer.html b/javadoc/1.0/de/l3s/boilerpipe/util/UnicodeTokenizer.html deleted file mode 100644 index 9eba9b3..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/util/UnicodeTokenizer.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - -UnicodeTokenizer (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.util -
-Class UnicodeTokenizer

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.util.UnicodeTokenizer
-
-
-
-
public class UnicodeTokenizer
extends java.lang.Object
- - -

-Tokenizes text according to Unicode word boundaries and strips off non-word - characters. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
UnicodeTokenizer() - -
-           
-  - - - - - - - - - - - -
-Method Summary
-static java.lang.String[]tokenize(java.lang.CharSequence text) - -
-          Tokenizes the text and returns an array of tokens.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-UnicodeTokenizer

-
-public UnicodeTokenizer()
-
-
- - - - - - - - -
-Method Detail
- -

-tokenize

-
-public static java.lang.String[] tokenize(java.lang.CharSequence text)
-
-
Tokenizes the text and returns an array of tokens. -

-

-
Parameters:
text - The text -
Returns:
The tokens
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html b/javadoc/1.0/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html deleted file mode 100644 index 863f292..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.util.UnicodeTokenizer (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.util.UnicodeTokenizer

-
-No usage of de.l3s.boilerpipe.util.UnicodeTokenizer -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/util/package-frame.html b/javadoc/1.0/de/l3s/boilerpipe/util/package-frame.html deleted file mode 100644 index 6e1c726..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/util/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util (1.0 API) - - - - - - - - - -de.l3s.boilerpipe.util - - - - -
-Classes  - -
-UnicodeTokenizer
- - - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/util/package-summary.html b/javadoc/1.0/de/l3s/boilerpipe/util/package-summary.html deleted file mode 100644 index 602675f..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/util/package-summary.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.util -

- -Some helper classes. -

-See: -
-          Description -

- - - - - - - - - -
-Class Summary
UnicodeTokenizerTokenizes text according to Unicode word boundaries and strips off non-word - characters.
-  - -

-

-Package de.l3s.boilerpipe.util Description -

- -

-

-Some helper classes. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/util/package-tree.html b/javadoc/1.0/de/l3s/boilerpipe/util/package-tree.html deleted file mode 100644 index a196c80..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/util/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.util -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/de/l3s/boilerpipe/util/package-use.html b/javadoc/1.0/de/l3s/boilerpipe/util/package-use.html deleted file mode 100644 index 40db119..0000000 --- a/javadoc/1.0/de/l3s/boilerpipe/util/package-use.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.util (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.util

-
-No usage of de.l3s.boilerpipe.util -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/deprecated-list.html b/javadoc/1.0/deprecated-list.html deleted file mode 100644 index c8d2ac0..0000000 --- a/javadoc/1.0/deprecated-list.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -Deprecated List (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Deprecated API

-
-
-Contents
    -
- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/help-doc.html b/javadoc/1.0/help-doc.html deleted file mode 100644 index d62c122..0000000 --- a/javadoc/1.0/help-doc.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -API Help (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-How This API Document Is Organized

-
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

-Overview

-
- -

-The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

-

-Package

-
- -

-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    -
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
-
-

-Class/Interface

-
- -

-Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    -
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description -

    -

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary -

    -

  • Field Detail
  • Constructor Detail
  • Method Detail
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
- -

-Annotation Type

-
- -

-Each annotation type has its own separate page with the following sections:

    -
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
-
- -

-Enum

-
- -

-Each enum has its own separate page with the following sections:

    -
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
-
-

-Use

-
-Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
-

-Tree (Class Hierarchy)

-
-There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    -
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
-
-

-Deprecated API

-
-The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
-

-Index

-
-The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
-

-Prev/Next

-These links take you to the next or previous class, interface, package, or related page.

-Frames/No Frames

-These links show and hide the HTML frames. All pages are available with or without frames. -

-

-Serialized Form

-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. -

-

-Constant Field Values

-The Constant Field Values page lists the static final fields and their values. -

- - -This help file applies to API documentation generated using the standard doclet. - -
-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/index-all.html b/javadoc/1.0/index-all.html deleted file mode 100644 index a183081..0000000 --- a/javadoc/1.0/index-all.html +++ /dev/null @@ -1,715 +0,0 @@ - - - - - - -Index (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E G H I K L M N P S T U
-

-A

-
-
addLabel(String) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Adds an arbitrary String label to this TextBlock. -
addLabels(Set<String>) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Adds a set of labels to this TextBlock. -
ArticleExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which is tuned towards news articles.
ArticleExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
ArticleSentencesExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which is tuned towards extracting sentences from news articles.
ArticleSentencesExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
-
-

-B

-
-
BlockProximityFusion - Class in de.l3s.boilerpipe.filters.heuristics
Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
BlockProximityFusion(int, boolean) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
Creates a new BlockProximityFusion instance. -
BoilerpipeExtractor - Interface in de.l3s.boilerpipe
Describes a complete filter pipeline.
BoilerpipeFilter - Interface in de.l3s.boilerpipe
A generic BoilerpipeFilter.
BoilerpipeHTMLContentHandler - Class in de.l3s.boilerpipe.sax
A simple SAX ContentHandler, used by BoilerpipeSAXInput.
BoilerpipeHTMLContentHandler() - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
BoilerpipeHTMLParser - Class in de.l3s.boilerpipe.sax
A simple SAX Parser, used by BoilerpipeSAXInput.
BoilerpipeHTMLParser() - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
  -
BoilerpipeInput - Interface in de.l3s.boilerpipe
A source that returns TextDocuments.
BoilerpipeProcessingException - Exception in de.l3s.boilerpipe
Exception for signaling failure in the processing pipeline.
BoilerpipeProcessingException() - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(String, Throwable) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(String) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(Throwable) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeSAXInput - Class in de.l3s.boilerpipe.sax
Parses an InputSource using SAX and returns a TextDocument.
BoilerpipeSAXInput(InputSource) - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeSAXInput -
Creates a new instance of BoilerpipeSAXInput for the given InputSource. -
BoilerplateBlockFilter - Class in de.l3s.boilerpipe.filters.simple
Removes TextBlocks which have explicitly been marked as "not content".
BoilerplateBlockFilter() - -Constructor for class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
-
-

-C

-
-
characters(char[], int, int) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
classify(TextBlock, TextBlock, TextBlock) - -Method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
classify(TextBlock, TextBlock, TextBlock) - -Method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
-
-

-D

-
-
de.l3s.boilerpipe - package de.l3s.boilerpipe
-The Boilerpipe top-level package.
de.l3s.boilerpipe.document - package de.l3s.boilerpipe.document
-The classes in this package represent the simple Boilerpipe document model.
de.l3s.boilerpipe.extractors - package de.l3s.boilerpipe.extractors
-This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -
de.l3s.boilerpipe.filters.english - package de.l3s.boilerpipe.filters.english
-The BoilerpipeFilters in this package have only been tested on English text.
de.l3s.boilerpipe.filters.heuristics - package de.l3s.boilerpipe.filters.heuristics
-The BoilerpipeFilters in this package are pure heuristics.
de.l3s.boilerpipe.filters.simple - package de.l3s.boilerpipe.filters.simple
-The BoilerpipeFilters in this package are straight-forward and probably not really specific to English.
de.l3s.boilerpipe.sax - package de.l3s.boilerpipe.sax
-Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments.
de.l3s.boilerpipe.util - package de.l3s.boilerpipe.util
-Some helper classes.
debugString() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns detailed debugging information about the contained TextBlocks. -
DEFAULT_INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
DEFAULT_INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
DefaultExtractor - Class in de.l3s.boilerpipe.extractors
A quite generic full-text extractor.
DefaultExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
DensityRulesClassifier - Class in de.l3s.boilerpipe.filters.english
Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
DensityRulesClassifier() - -Constructor for class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
DocumentTitleMatchClassifier - Class in de.l3s.boilerpipe.filters.heuristics
Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
DocumentTitleMatchClassifier(String) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -
  -
-
-

-E

-
-
EMPTY_END - -Static variable in class de.l3s.boilerpipe.document.TextBlock -
  -
EMPTY_START - -Static variable in class de.l3s.boilerpipe.document.TextBlock -
  -
endDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
endElement(String, String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
endPrefixMapping(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
ExpandTitleToContentFilter - Class in de.l3s.boilerpipe.filters.heuristics
Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked TextBlockLabel.MIGHT_BE_CONTENT.
ExpandTitleToContentFilter() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
ExtractorBase - Class in de.l3s.boilerpipe.extractors
The base class of Extractors.
ExtractorBase() - -Constructor for class de.l3s.boilerpipe.extractors.ExtractorBase -
  -
-
-

-G

-
-
getContainedTextElements() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getContent() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextDocument's content. -
getDefaultInstance() - -Static method in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
Returns the singleton instance for DeleteBlocksAfterContentFilter. -
getDefaultInstance() - -Static method in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
getHTML() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Returns the highlighted HTML code. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.ArticleExtractor -
Returns the singleton instance for ArticleExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
Returns the singleton instance for ArticleSentencesExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.DefaultExtractor -
Returns the singleton instance for DefaultExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
Returns the singleton instance for LargestContentExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
Returns the singleton instance for NumWordsRulesExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
Returns the singleton instance for RulebasedBoilerpipeClassifier. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
Returns the singleton instance for RulebasedBoilerpipeClassifier. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
Returns the singleton instance for TerminatingBlocksFinder. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
Returns the singleton instance for ExpandTitleToContentFilter. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
Returns the singleton instance for BlockFusionProcessor. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
Returns the singleton instance for BoilerplateBlockFilter. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
Returns the singleton instance for TerminatingBlocksFinder. -
getLabels() - -Method in class de.l3s.boilerpipe.document.TextBlock -
Returns the labels associated to this TextBlock, or null if no such labels - exist. -
getLinkDensity() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getNumWords() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getNumWordsInAnchorText() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getOffsetBlocksEnd() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getOffsetBlocksStart() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getText(String) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code given as a String. -
getText(InputSource) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code available from the given - InputSource. -
getText(Reader) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code available from the given Reader. -
getText(TextDocument) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the given TextDocument object. -
getText() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getText(boolean, boolean) - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextDocument's content, non-content or both -
getText(String) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code given as a String. -
getText(InputSource) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given InputSource. -
getText(URL) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given URL. -
getText(Reader) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given Reader. -
getText(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the given TextDocument object. -
getTextBlocks() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextBlocks of this document. -
getTextDensity() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getTextDocument() - -Method in interface de.l3s.boilerpipe.BoilerpipeInput -
Returns (somehow) a TextDocument. -
getTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeSAXInput -
  -
getTitle() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the "main" title for this document, or null if no - such title has ben set. -
getTitle() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-H

-
-
hasLabel(String) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Checks whether this TextBlock has the given label. -
HTMLHighlighter - Class in de.l3s.boilerpipe.sax
Highlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument.
HTMLHighlighter(TextDocument, String) - -Constructor for class de.l3s.boilerpipe.sax.HTMLHighlighter -
Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as a String). -
HTMLHighlighter(TextDocument, InputSource) - -Constructor for class de.l3s.boilerpipe.sax.HTMLHighlighter -
Prepares the HTMLHighlighter for the given TextDocument - and the original HTML text (as an InputSource). -
-
-

-I

-
-
ignorableWhitespace(char[], int, int) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
IgnoreBlocksAfterContentFilter - Class in de.l3s.boilerpipe.filters.english
Marks all blocks as "non-content" that occur after blocks that have been - marked TextBlockLabel.INDICATES_END_OF_TEXT.
IgnoreBlocksAfterContentFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
INDICATES_END_OF_TEXT - -Static variable in class de.l3s.boilerpipe.document.TextBlockLabel -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.KeepEverythingExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.InvertedFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
InvertedFilter - Class in de.l3s.boilerpipe.filters.simple
Reverts the "isContent" flag for all TextBlocks
isContent() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
-
-

-K

-
-
KeepEverythingExtractor - Class in de.l3s.boilerpipe.extractors
Marks everything as content.
KeepEverythingWithMinKWordsExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which extracts the largest text component of a page.
KeepEverythingWithMinKWordsExtractor(int) - -Constructor for class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -
  -
KeepLargestBlockFilter - Class in de.l3s.boilerpipe.filters.heuristics
Keeps the largest TextBlock only (by the number of words).
KeepLargestBlockFilter() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
KeepLargestFulltextBlockFilter - Class in de.l3s.boilerpipe.filters.english
Keeps the largest TextBlock only (by the number of words).
KeepLargestFulltextBlockFilter() - -Constructor for class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
-
-

-L

-
-
LargestContentExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which extracts the largest text component of a page.
-
-

-M

-
-
MarkEverythingContentFilter - Class in de.l3s.boilerpipe.filters.simple
Marks all blocks as content.
MAX_DISTANCE_1 - -Static variable in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
MAX_DISTANCE_1_CONTENT_ONLY - -Static variable in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
mergeNext(TextBlock) - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
MIGHT_BE_CONTENT - -Static variable in class de.l3s.boilerpipe.document.TextBlockLabel -
  -
MinClauseWordsFilter - Class in de.l3s.boilerpipe.filters.simple
Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
MinClauseWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
MinClauseWordsFilter(int, boolean) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
MinFulltextWordsFilter - Class in de.l3s.boilerpipe.filters.english
Keeps only those content blocks which contain at least k full-text words - (measured by TextBlock#getNumFullTextWords()). k is 30 by default.
MinFulltextWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
MinWordsFilter - Class in de.l3s.boilerpipe.filters.simple
Keeps only those content blocks which contain at least k words.
MinWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinWordsFilter -
  -
-
-

-N

-
-
NumWordsRulesClassifier - Class in de.l3s.boilerpipe.filters.english
Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
NumWordsRulesClassifier() - -Constructor for class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
NumWordsRulesExtractor - Class in de.l3s.boilerpipe.extractors
A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
NumWordsRulesExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
-
-

-P

-
-
process(TextDocument) - -Method in interface de.l3s.boilerpipe.BoilerpipeFilter -
Processes the given document doc. -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.KeepEverythingExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.InvertedFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MinWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
processingInstruction(String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-S

-
-
setDocumentLocator(Locator) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
setIsContent(boolean) - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
setTitle(String) - -Method in class de.l3s.boilerpipe.document.TextDocument -
Updates the "main" title for this document. -
setTitle(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
SimpleBlockFusionProcessor - Class in de.l3s.boilerpipe.filters.heuristics
Merges two subsequent blocks if their text densities are equal.
SimpleBlockFusionProcessor() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
skippedEntity(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
SplitParagraphBlocksFilter - Class in de.l3s.boilerpipe.filters.simple
Splits TextBlocks at paragraph boundaries.
SplitParagraphBlocksFilter() - -Constructor for class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
startDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
startElement(String, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
startPrefixMapping(String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-T

-
-
TerminatingBlocksFinder - Class in de.l3s.boilerpipe.filters.english
Finds blocks which are potentially indicating the end of an article text and marks - them with TextBlockLabel.INDICATES_END_OF_TEXT.
TerminatingBlocksFinder() - -Constructor for class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
TextBlock - Class in de.l3s.boilerpipe.document
Describes a block of text.
TextBlock(String) - -Constructor for class de.l3s.boilerpipe.document.TextBlock -
  -
TextBlock(String, BitSet, int, int, int, int, int) - -Constructor for class de.l3s.boilerpipe.document.TextBlock -
  -
TextBlockLabel - Class in de.l3s.boilerpipe.document
Some pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String).
TextBlockLabel() - -Constructor for class de.l3s.boilerpipe.document.TextBlockLabel -
  -
TextDocument - Class in de.l3s.boilerpipe.document
A text document, consisting of one or more TextBlocks.
TextDocument(List<TextBlock>) - -Constructor for class de.l3s.boilerpipe.document.TextDocument -
Creates a new TextDocument with given TextBlocks, and no - title. -
TextDocument(String, List<TextBlock>) - -Constructor for class de.l3s.boilerpipe.document.TextDocument -
Creates a new TextDocument with given TextBlocks and - given title. -
TITLE - -Static variable in class de.l3s.boilerpipe.document.TextBlockLabel -
  -
tokenize(CharSequence) - -Static method in class de.l3s.boilerpipe.util.UnicodeTokenizer -
Tokenizes the text and returns an array of tokens. -
toString() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
toTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Returns a TextDocument containing the extracted TextBlocks. -
toTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
Returns a TextDocument containing the extracted TextBlocks. -
-
-

-U

-
-
UnicodeTokenizer - Class in de.l3s.boilerpipe.util
Tokenizes text according to Unicode word boundaries and strips off non-word - characters.
UnicodeTokenizer() - -Constructor for class de.l3s.boilerpipe.util.UnicodeTokenizer -
  -
-
-A B C D E G H I K L M N P S T U - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/index.html b/javadoc/1.0/index.html deleted file mode 100644 index 5d3106f..0000000 --- a/javadoc/1.0/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -1.0 API - - - - - - - - - - - -<H2> -Frame Alert</H2> - -<P> -This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. -<BR> -Link to<A HREF="overview-summary.html">Non-frame version.</A> - - - diff --git a/javadoc/1.0/overview-frame.html b/javadoc/1.0/overview-frame.html deleted file mode 100644 index df50fff..0000000 --- a/javadoc/1.0/overview-frame.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - -Overview List (1.0 API) - - - - - - - - - - - - - -
-
- - - - - -
All Classes -

- -Packages -
-de.l3s.boilerpipe -
-de.l3s.boilerpipe.document -
-de.l3s.boilerpipe.extractors -
-de.l3s.boilerpipe.filters.english -
-de.l3s.boilerpipe.filters.heuristics -
-de.l3s.boilerpipe.filters.simple -
-de.l3s.boilerpipe.sax -
-de.l3s.boilerpipe.util -
-

- -

-  - - diff --git a/javadoc/1.0/overview-summary.html b/javadoc/1.0/overview-summary.html deleted file mode 100644 index 09e4c6f..0000000 --- a/javadoc/1.0/overview-summary.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -Overview (1.0 API) - - - - - - - - - - -


- - - - - - - - - - - - - - - -
- -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages
de.l3s.boilerpipe -The Boilerpipe top-level package.
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model.
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text.
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics.
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English.
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments.
de.l3s.boilerpipe.util -Some helper classes.
- -


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/overview-tree.html b/javadoc/1.0/overview-tree.html deleted file mode 100644 index 1106b39..0000000 --- a/javadoc/1.0/overview-tree.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -Class Hierarchy (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For All Packages

-
-
-
Package Hierarchies:
de.l3s.boilerpipe, de.l3s.boilerpipe.document, de.l3s.boilerpipe.extractors, de.l3s.boilerpipe.filters.english, de.l3s.boilerpipe.filters.heuristics, de.l3s.boilerpipe.filters.simple, de.l3s.boilerpipe.sax, de.l3s.boilerpipe.util
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/package-list b/javadoc/1.0/package-list deleted file mode 100644 index 23182cc..0000000 --- a/javadoc/1.0/package-list +++ /dev/null @@ -1,8 +0,0 @@ -de.l3s.boilerpipe -de.l3s.boilerpipe.document -de.l3s.boilerpipe.extractors -de.l3s.boilerpipe.filters.english -de.l3s.boilerpipe.filters.heuristics -de.l3s.boilerpipe.filters.simple -de.l3s.boilerpipe.sax -de.l3s.boilerpipe.util diff --git a/javadoc/1.0/resources/inherit.gif b/javadoc/1.0/resources/inherit.gif deleted file mode 100644 index c814867a13deb0ca7ea2156c6ca1d5a03372af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X diff --git a/javadoc/1.0/serialized-form.html b/javadoc/1.0/serialized-form.html deleted file mode 100644 index 7892f5d..0000000 --- a/javadoc/1.0/serialized-form.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - -Serialized Form (1.0 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Serialized Form

-
-
- - - - - -
-Package de.l3s.boilerpipe
- -

- - - - - -
-Class de.l3s.boilerpipe.BoilerpipeProcessingException extends java.lang.Exception implements Serializable
- -

-serialVersionUID: 1L - -

- -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.0/stylesheet.css b/javadoc/1.0/stylesheet.css deleted file mode 100644 index 6ea9e51..0000000 --- a/javadoc/1.0/stylesheet.css +++ /dev/null @@ -1,29 +0,0 @@ -/* Javadoc style sheet */ - -/* Define colors, fonts and other style attributes here to override the defaults */ - -/* Page background color */ -body { background-color: #FFFFFF; color:#000000 } - -/* Headings */ -h1 { font-size: 145% } - -/* Table colors */ -.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */ -.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */ -.TableRowColor { background: #FFFFFF; color:#000000 } /* White */ - -/* Font used in left-hand frame lists */ -.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 } -.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } -.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } - -/* Navigation bar fonts and colors */ -.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */ -.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */ -.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;} -.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;} - -.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} -.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} - diff --git a/javadoc/1.1/allclasses-frame.html b/javadoc/1.1/allclasses-frame.html deleted file mode 100644 index 47dc918..0000000 --- a/javadoc/1.1/allclasses-frame.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -All Classes (1.1 API) - - - - - - - - - -All Classes -
- - - - - -
ArticleExtractor -
-ArticleSentencesExtractor -
-BlockProximityFusion -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeInput -
-BoilerpipeProcessingException -
-BoilerpipeSAXInput -
-BoilerplateBlockFilter -
-CanolaExtractor -
-CommonExtractors -
-CommonTagActions -
-CommonTagActions.BlockTagLabelAction -
-CommonTagActions.Chained -
-CommonTagActions.InlineTagLabelAction -
-ConditionalLabelAction -
-DefaultExtractor -
-DefaultLabels -
-DefaultTagActionMap -
-DensityRulesClassifier -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-ExtractorBase -
-HTMLDocument -
-HTMLFetcher -
-HTMLHighlighter -
-IgnoreBlocksAfterContentFilter -
-InputSourceable -
-InvertedFilter -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-KeepLargestBlockFilter -
-KeepLargestFulltextBlockFilter -
-LabelAction -
-LabelToBoilerplateFilter -
-LabelToContentFilter -
-LargestContentExtractor -
-MarkEverythingContentFilter -
-MinClauseWordsFilter -
-MinFulltextWordsFilter -
-MinWordsFilter -
-NumWordsRulesClassifier -
-NumWordsRulesExtractor -
-SimpleBlockFusionProcessor -
-SimpleEstimator -
-SplitParagraphBlocksFilter -
-TagAction -
-TagActionMap -
-TerminatingBlocksFinder -
-TextBlock -
-TextBlockCondition -
-TextDocument -
-TextDocumentStatistics -
-UnicodeTokenizer -
-
- - - diff --git a/javadoc/1.1/allclasses-noframe.html b/javadoc/1.1/allclasses-noframe.html deleted file mode 100644 index e0623ac..0000000 --- a/javadoc/1.1/allclasses-noframe.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -All Classes (1.1 API) - - - - - - - - - -All Classes -
- - - - - -
ArticleExtractor -
-ArticleSentencesExtractor -
-BlockProximityFusion -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeInput -
-BoilerpipeProcessingException -
-BoilerpipeSAXInput -
-BoilerplateBlockFilter -
-CanolaExtractor -
-CommonExtractors -
-CommonTagActions -
-CommonTagActions.BlockTagLabelAction -
-CommonTagActions.Chained -
-CommonTagActions.InlineTagLabelAction -
-ConditionalLabelAction -
-DefaultExtractor -
-DefaultLabels -
-DefaultTagActionMap -
-DensityRulesClassifier -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-ExtractorBase -
-HTMLDocument -
-HTMLFetcher -
-HTMLHighlighter -
-IgnoreBlocksAfterContentFilter -
-InputSourceable -
-InvertedFilter -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-KeepLargestBlockFilter -
-KeepLargestFulltextBlockFilter -
-LabelAction -
-LabelToBoilerplateFilter -
-LabelToContentFilter -
-LargestContentExtractor -
-MarkEverythingContentFilter -
-MinClauseWordsFilter -
-MinFulltextWordsFilter -
-MinWordsFilter -
-NumWordsRulesClassifier -
-NumWordsRulesExtractor -
-SimpleBlockFusionProcessor -
-SimpleEstimator -
-SplitParagraphBlocksFilter -
-TagAction -
-TagActionMap -
-TerminatingBlocksFinder -
-TextBlock -
-TextBlockCondition -
-TextDocument -
-TextDocumentStatistics -
-UnicodeTokenizer -
-
- - - diff --git a/javadoc/1.1/constant-values.html b/javadoc/1.1/constant-values.html deleted file mode 100644 index aab71f1..0000000 --- a/javadoc/1.1/constant-values.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -Constant Field Values (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Constant Field Values

-
-
-Contents - - - - - - -
-de.l3s.*
- -

- - - - - - - - - - - - - - - - - - - - - - -
de.l3s.boilerpipe.labels.DefaultLabels
-public static final java.lang.StringINDICATES_END_OF_TEXT"de.l3s.boilerpipe/INDICATES_END_OF_TEXT"
-public static final java.lang.StringMIGHT_BE_CONTENT"de.l3s.boilerpipe/MIGHT_BE_CONTENT"
-public static final java.lang.StringTITLE"de.l3s.boilerpipe/TITLE"
- -

- -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeExtractor.html deleted file mode 100644 index 30900e7..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeExtractor.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - -BoilerpipeExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeExtractor

-
-
All Superinterfaces:
BoilerpipeFilter
-
-
-
All Known Implementing Classes:
ArticleExtractor, ArticleSentencesExtractor, CanolaExtractor, DefaultExtractor, ExtractorBase, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, LargestContentExtractor, NumWordsRulesExtractor
-
-
-
-
public interface BoilerpipeExtractor
extends BoilerpipeFilter
- - -

-Describes a complete filter pipeline. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given - InputSource.
- java.lang.StringgetText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringgetText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringgetText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- - - - - - - -
Methods inherited from interface de.l3s.boilerpipe.BoilerpipeFilter
process
-  -

- - - - - - - - -
-Method Detail
- -

-getText

-
-java.lang.String getText(java.lang.String html)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code given as a String. -

-

-
-
-
-
Parameters:
html - The HTML code as a String. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(org.xml.sax.InputSource is)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given - InputSource. -

-

-
-
-
-
Parameters:
is - The InputSource containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(java.io.Reader r)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given Reader. -

-

-
-
-
-
Parameters:
r - The Reader containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(TextDocument doc)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the given TextDocument object. -

-

-
-
-
-
Parameters:
doc - The TextDocument. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeFilter.html b/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeFilter.html deleted file mode 100644 index 62e02ac..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeFilter.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - -BoilerpipeFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeFilter

-
-
All Known Subinterfaces:
BoilerpipeExtractor
-
-
-
All Known Implementing Classes:
ArticleExtractor, ArticleSentencesExtractor, BlockProximityFusion, BoilerplateBlockFilter, CanolaExtractor, DefaultExtractor, DensityRulesClassifier, DocumentTitleMatchClassifier, ExpandTitleToContentFilter, ExtractorBase, IgnoreBlocksAfterContentFilter, InvertedFilter, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, KeepLargestBlockFilter, KeepLargestFulltextBlockFilter, LabelToBoilerplateFilter, LabelToContentFilter, LargestContentExtractor, MarkEverythingContentFilter, MinClauseWordsFilter, MinFulltextWordsFilter, MinWordsFilter, NumWordsRulesClassifier, NumWordsRulesExtractor, SimpleBlockFusionProcessor, SplitParagraphBlocksFilter, TerminatingBlocksFinder
-
-
-
-
public interface BoilerpipeFilter
- - -

-A generic BoilerpipeFilter. Takes a TextDocument and - processes it somehow. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
-  -

- - - - - - - - -
-Method Detail
- -

-process

-
-boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeInput.html b/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeInput.html deleted file mode 100644 index 6fce2fd..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeInput.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -BoilerpipeInput (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeInput

-
-
All Known Implementing Classes:
BoilerpipeSAXInput
-
-
-
-
public interface BoilerpipeInput
- - -

-A source that returns TextDocuments. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- TextDocumentgetTextDocument() - -
-          Returns (somehow) a TextDocument.
-  -

- - - - - - - - -
-Method Detail
- -

-getTextDocument

-
-TextDocument getTextDocument()
-                             throws BoilerpipeProcessingException
-
-
Returns (somehow) a TextDocument. -

-

- -
Returns:
A TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeProcessingException.html b/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeProcessingException.html deleted file mode 100644 index a8fbbd5..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/BoilerpipeProcessingException.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - -BoilerpipeProcessingException (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Class BoilerpipeProcessingException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by de.l3s.boilerpipe.BoilerpipeProcessingException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class BoilerpipeProcessingException
extends java.lang.Exception
- - -

-Exception for signaling failure in the processing pipeline. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - - - - - - - - - - -
-Constructor Summary
BoilerpipeProcessingException() - -
-           
BoilerpipeProcessingException(java.lang.String message) - -
-           
BoilerpipeProcessingException(java.lang.String message, - java.lang.Throwable cause) - -
-           
BoilerpipeProcessingException(java.lang.Throwable cause) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException()
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.String message,
-                                     java.lang.Throwable cause)
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.String message)
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.Throwable cause)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html deleted file mode 100644 index 5483d4c..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html +++ /dev/null @@ -1,281 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeExtractor

-
- - - - - - - - - - - - - -
-Packages that use BoilerpipeExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.extractors that implement BoilerpipeExtractor
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classCanolaExtractor - -
-          A full-text extractor trained on krdwrd Canola - .
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classExtractorBase - -
-          The base class of Extractors.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

- - - - - -
-Uses of BoilerpipeExtractor in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type BoilerpipeExtractor
- java.lang.StringHTMLHighlighter.process(java.net.URL url, - BoilerpipeExtractor extractor) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html b/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html deleted file mode 100644 index 26cf52e..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeFilter

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use BoilerpipeFilter
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe
-  -

- - - - - - - - - -
Subinterfaces of BoilerpipeFilter in de.l3s.boilerpipe
- interfaceBoilerpipeExtractor - -
-          Describes a complete filter pipeline.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.extractors that implement BoilerpipeFilter
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classCanolaExtractor - -
-          A full-text extractor trained on krdwrd Canola - .
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classExtractorBase - -
-          The base class of Extractors.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as BoilerpipeFilter
-static BoilerpipeFilterCanolaExtractor.CLASSIFIER - -
-          The actual classifier, exposed.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.english that implement BoilerpipeFilter
- classDensityRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
- classIgnoreBlocksAfterContentFilter - -
-          Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT.
- classKeepLargestFulltextBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
- classMinFulltextWordsFilter - -
-          Keeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default.
- classNumWordsRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
- classTerminatingBlocksFinder - -
-          Finds blocks which are potentially indicating the end of an article text and marks - them with DefaultLabels.INDICATES_END_OF_TEXT.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.heuristics that implement BoilerpipeFilter
- classBlockProximityFusion - -
-          Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
- classDocumentTitleMatchClassifier - -
-          Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
- classExpandTitleToContentFilter - -
-          Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT.
- classKeepLargestBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
- classSimpleBlockFusionProcessor - -
-          Merges two subsequent blocks if their text densities are equal.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.simple that implement BoilerpipeFilter
- classBoilerplateBlockFilter - -
-          Removes TextBlocks which have explicitly been marked as "not content".
- classInvertedFilter - -
-          Reverts the "isContent" flag for all TextBlocks
- classLabelToBoilerplateFilter - -
-          Marks all blocks that contain a given label as "boilerplate".
- classLabelToContentFilter - -
-          Marks all blocks that contain a given label as "content".
- classMarkEverythingContentFilter - -
-          Marks all blocks as content.
- classMinClauseWordsFilter - -
-          Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
- classMinWordsFilter - -
-          Keeps only those content blocks which contain at least k words.
- classSplitParagraphBlocksFilter - -
-          Splits TextBlocks at paragraph boundaries.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeInput.html b/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeInput.html deleted file mode 100644 index 556f86f..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeInput.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeInput (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeInput

-
- - - - - - - - - -
-Packages that use BoilerpipeInput
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeInput in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Classes in de.l3s.boilerpipe.sax that implement BoilerpipeInput
- classBoilerpipeSAXInput - -
-          Parses an InputSource using SAX and returns a TextDocument.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html b/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html deleted file mode 100644 index 5a973f6..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html +++ /dev/null @@ -1,634 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.BoilerpipeProcessingException (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.BoilerpipeProcessingException

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use BoilerpipeProcessingException
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe that throw BoilerpipeProcessingException
- java.lang.StringBoilerpipeExtractor.getText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given - InputSource.
- java.lang.StringBoilerpipeExtractor.getText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringBoilerpipeExtractor.getText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringBoilerpipeExtractor.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- TextDocumentBoilerpipeInput.getTextDocument() - -
-          Returns (somehow) a TextDocument.
- booleanBoilerpipeFilter.process(TextDocument doc) - -
-          Processes the given document doc.
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that throw BoilerpipeProcessingException
- java.lang.StringExtractorBase.getText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given InputSource.
- java.lang.StringExtractorBase.getText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringExtractorBase.getText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringExtractorBase.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- java.lang.StringExtractorBase.getText(java.net.URL url) - -
-          Extracts text from the HTML code available from the given URL.
- booleanNumWordsRulesExtractor.process(TextDocument doc) - -
-           
- booleanLargestContentExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingWithMinKWordsExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingExtractor.process(TextDocument doc) - -
-           
- booleanDefaultExtractor.process(TextDocument doc) - -
-           
- booleanCanolaExtractor.process(TextDocument doc) - -
-           
- booleanArticleSentencesExtractor.process(TextDocument doc) - -
-           
- booleanArticleExtractor.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that throw BoilerpipeProcessingException
- booleanTerminatingBlocksFinder.process(TextDocument doc) - -
-           
- booleanNumWordsRulesClassifier.process(TextDocument doc) - -
-           
- booleanMinFulltextWordsFilter.process(TextDocument doc) - -
-           
- booleanKeepLargestFulltextBlockFilter.process(TextDocument doc) - -
-           
- booleanIgnoreBlocksAfterContentFilter.process(TextDocument doc) - -
-           
- booleanDensityRulesClassifier.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that throw BoilerpipeProcessingException
- booleanSimpleBlockFusionProcessor.process(TextDocument doc) - -
-           
- booleanKeepLargestBlockFilter.process(TextDocument doc) - -
-           
- booleanExpandTitleToContentFilter.process(TextDocument doc) - -
-           
- booleanDocumentTitleMatchClassifier.process(TextDocument doc) - -
-           
- booleanBlockProximityFusion.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that throw BoilerpipeProcessingException
- booleanSplitParagraphBlocksFilter.process(TextDocument doc) - -
-           
- booleanMinWordsFilter.process(TextDocument doc) - -
-           
- booleanMinClauseWordsFilter.process(TextDocument doc) - -
-           
- booleanMarkEverythingContentFilter.process(TextDocument doc) - -
-           
- booleanLabelToContentFilter.process(TextDocument doc) - -
-           
- booleanLabelToBoilerplateFilter.process(TextDocument doc) - -
-           
- booleanInvertedFilter.process(TextDocument doc) - -
-           
- booleanBoilerplateBlockFilter.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that throw BoilerpipeProcessingException
- TextDocumentBoilerpipeSAXInput.getTextDocument() - -
-          Retrieves the TextDocument using a default HTML parser.
- TextDocumentBoilerpipeSAXInput.getTextDocument(BoilerpipeHTMLParser parser) - -
-          Retrieves the TextDocument using the given HTML parser.
- java.lang.StringHTMLHighlighter.process(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Processes the given TextDocument and the original HTML text (as - an InputSource).
- java.lang.StringHTMLHighlighter.process(TextDocument doc, - java.lang.String origHTML) - -
-          Processes the given TextDocument and the original HTML text (as a - String).
- java.lang.StringHTMLHighlighter.process(java.net.URL url, - BoilerpipeExtractor extractor) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/conditions/TextBlockCondition.html b/javadoc/1.1/de/l3s/boilerpipe/conditions/TextBlockCondition.html deleted file mode 100644 index 75129e4..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/conditions/TextBlockCondition.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - -TextBlockCondition (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.conditions -
-Interface TextBlockCondition

-
-
-
public interface TextBlockCondition
- - -

-Evaluates whether a given TextBlock meets a certain condition. - Useful in combination with ConditionalLabelAction. -

- -

-

-
Author:
-
Christian Kohlschuetter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- booleanmeetsCondition(TextBlock tb) - -
-          Returns true iff the given TextBlock tb meets the defined condition.
-  -

- - - - - - - - -
-Method Detail
- -

-meetsCondition

-
-boolean meetsCondition(TextBlock tb)
-
-
Returns true iff the given TextBlock tb meets the defined condition. -

-

-
Parameters:
tb - -
Returns:
iff the condition is met.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/conditions/class-use/TextBlockCondition.html b/javadoc/1.1/de/l3s/boilerpipe/conditions/class-use/TextBlockCondition.html deleted file mode 100644 index fc45971..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/conditions/class-use/TextBlockCondition.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.conditions.TextBlockCondition (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.conditions.TextBlockCondition

-
- - - - - - - - - -
-Packages that use TextBlockCondition
de.l3s.boilerpipe.labels  
-  -

- - - - - -
-Uses of TextBlockCondition in de.l3s.boilerpipe.labels
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.labels with parameters of type TextBlockCondition
ConditionalLabelAction(TextBlockCondition condition, - java.lang.String... labels) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/conditions/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/conditions/package-frame.html deleted file mode 100644 index 1bc01f2..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/conditions/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -de.l3s.boilerpipe.conditions (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.conditions - - - - -
-Interfaces  - -
-TextBlockCondition
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/conditions/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/conditions/package-summary.html deleted file mode 100644 index 1a57b45..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/conditions/package-summary.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -de.l3s.boilerpipe.conditions (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.conditions -

- - - - - - - - - -
-Interface Summary
TextBlockConditionEvaluates whether a given TextBlock meets a certain condition.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/conditions/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/conditions/package-tree.html deleted file mode 100644 index 7506cd3..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/conditions/package-tree.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -de.l3s.boilerpipe.conditions Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.conditions -

-
-
-
Package Hierarchies:
All Packages
-
-

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/conditions/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/conditions/package-use.html deleted file mode 100644 index 5370a56..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/conditions/package-use.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.conditions (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.conditions

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.conditions
de.l3s.boilerpipe.labels  
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.conditions used by de.l3s.boilerpipe.labels
TextBlockCondition - -
-          Evaluates whether a given TextBlock meets a certain condition.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/TextBlock.html b/javadoc/1.1/de/l3s/boilerpipe/document/TextBlock.html deleted file mode 100644 index 2cd446c..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/TextBlock.html +++ /dev/null @@ -1,746 +0,0 @@ - - - - - - -TextBlock (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextBlock

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextBlock
-
-
-
All Implemented Interfaces:
java.lang.Cloneable
-
-
-
-
public class TextBlock
extends java.lang.Object
implements java.lang.Cloneable
- - -

-Describes a block of text. - - A block can be an "atomic" text element (i.e., a sequence of text that is not - interrupted by any HTML markup) or a compound of such atomic elements. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static TextBlockEMPTY_END - -
-           
-static TextBlockEMPTY_START - -
-           
-  - - - - - - - - - - - - - -
-Constructor Summary
TextBlock(java.lang.String text) - -
-           
TextBlock(java.lang.String text, - java.util.BitSet containedTextElements, - int numWords, - int numWordsInAnchorText, - int numWordsInWrappedLines, - int numWrappedLines, - int offsetBlocks) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddLabel(java.lang.String label) - -
-          Adds an arbitrary String label to this TextBlock.
- voidaddLabels(java.util.Set<java.lang.String> l) - -
-          Adds a set of labels to this TextBlock.
- voidaddLabels(java.lang.String... l) - -
-          Adds a set of labels to this TextBlock.
-protected  java.lang.Objectclone() - -
-           
- java.util.BitSetgetContainedTextElements() - -
-          Returns the containedTextElements BitSet, or null.
- java.util.Set<java.lang.String>getLabels() - -
-          Returns the labels associated to this TextBlock, or null if no such labels - exist.
- floatgetLinkDensity() - -
-           
- intgetNumWords() - -
-           
- intgetNumWordsInAnchorText() - -
-           
- intgetOffsetBlocksEnd() - -
-           
- intgetOffsetBlocksStart() - -
-           
- java.lang.StringgetText() - -
-           
- floatgetTextDensity() - -
-           
- booleanhasLabel(java.lang.String label) - -
-          Checks whether this TextBlock has the given label.
- booleanisContent() - -
-           
- voidmergeNext(TextBlock other) - -
-           
- booleansetIsContent(boolean isContent) - -
-           
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-EMPTY_START

-
-public static final TextBlock EMPTY_START
-
-
-
-
-
- -

-EMPTY_END

-
-public static final TextBlock EMPTY_END
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-TextBlock

-
-public TextBlock(java.lang.String text)
-
-
-
- -

-TextBlock

-
-public TextBlock(java.lang.String text,
-                 java.util.BitSet containedTextElements,
-                 int numWords,
-                 int numWordsInAnchorText,
-                 int numWordsInWrappedLines,
-                 int numWrappedLines,
-                 int offsetBlocks)
-
-
- - - - - - - - -
-Method Detail
- -

-isContent

-
-public boolean isContent()
-
-
-
-
-
-
-
-
-
- -

-setIsContent

-
-public boolean setIsContent(boolean isContent)
-
-
-
-
-
-
-
-
-
- -

-getText

-
-public java.lang.String getText()
-
-
-
-
-
-
-
-
-
- -

-getNumWords

-
-public int getNumWords()
-
-
-
-
-
-
-
-
-
- -

-getNumWordsInAnchorText

-
-public int getNumWordsInAnchorText()
-
-
-
-
-
-
-
-
-
- -

-getTextDensity

-
-public float getTextDensity()
-
-
-
-
-
-
-
-
-
- -

-getLinkDensity

-
-public float getLinkDensity()
-
-
-
-
-
-
-
-
-
- -

-mergeNext

-
-public void mergeNext(TextBlock other)
-
-
-
-
-
-
-
-
-
- -

-getOffsetBlocksStart

-
-public int getOffsetBlocksStart()
-
-
-
-
-
-
-
-
-
- -

-getOffsetBlocksEnd

-
-public int getOffsetBlocksEnd()
-
-
-
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-addLabel

-
-public void addLabel(java.lang.String label)
-
-
Adds an arbitrary String label to this TextBlock. -

-

-
-
-
-
Parameters:
label - The label
See Also:
DefaultLabels
-
-
-
- -

-hasLabel

-
-public boolean hasLabel(java.lang.String label)
-
-
Checks whether this TextBlock has the given label. -

-

-
-
-
-
Parameters:
label - The label -
Returns:
true if this block is marked by the given label.
-
-
-
- -

-getLabels

-
-public java.util.Set<java.lang.String> getLabels()
-
-
Returns the labels associated to this TextBlock, or null if no such labels - exist. - - NOTE: The returned instance is the one used directly in TextBlock. You have full access - to the data structure. However it is recommended to use the label-specific methods in TextBlock - whenever possible. -

-

-
-
-
- -
Returns:
Returns the set of labels, or null if no labels was added yet.
-
-
-
- -

-addLabels

-
-public void addLabels(java.util.Set<java.lang.String> l)
-
-
Adds a set of labels to this TextBlock. - null-references are silently ignored. -

-

-
-
-
-
Parameters:
l - The labels to be added.
-
-
-
- -

-addLabels

-
-public void addLabels(java.lang.String... l)
-
-
Adds a set of labels to this TextBlock. - null-references are silently ignored. -

-

-
-
-
-
Parameters:
l - The labels to be added.
-
-
-
- -

-getContainedTextElements

-
-public java.util.BitSet getContainedTextElements()
-
-
Returns the containedTextElements BitSet, or null. -

-

-
-
-
- -
Returns:
-
-
-
- -

-clone

-
-protected java.lang.Object clone()
-
-
-
Overrides:
clone in class java.lang.Object
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/TextDocument.html b/javadoc/1.1/de/l3s/boilerpipe/document/TextDocument.html deleted file mode 100644 index d612394..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/TextDocument.html +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - -TextDocument (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextDocument

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextDocument
-
-
-
-
public class TextDocument
extends java.lang.Object
- - -

-A text document, consisting of one or more TextBlocks. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
TextDocument(java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks, and no - title.
TextDocument(java.lang.String title, - java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks and - given title.
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringdebugString() - -
-          Returns detailed debugging information about the contained TextBlocks.
- java.lang.StringgetContent() - -
-          Returns the TextDocument's content.
- java.lang.StringgetText(boolean includeContent, - boolean includeNonContent) - -
-          Returns the TextDocument's content, non-content or both
- java.util.List<TextBlock>getTextBlocks() - -
-          Returns the TextBlocks of this document.
- java.lang.StringgetTitle() - -
-          Returns the "main" title for this document, or null if no - such title has ben set.
- voidsetTitle(java.lang.String title) - -
-          Updates the "main" title for this document.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-TextDocument

-
-public TextDocument(java.util.List<TextBlock> textBlocks)
-
-
Creates a new TextDocument with given TextBlocks, and no - title. -

-

-
Parameters:
textBlocks - The text blocks of this document.
-
-
- -

-TextDocument

-
-public TextDocument(java.lang.String title,
-                    java.util.List<TextBlock> textBlocks)
-
-
Creates a new TextDocument with given TextBlocks and - given title. -

-

-
Parameters:
title - The "main" title for this text document.
textBlocks - The text blocks of this document.
-
- - - - - - - - -
-Method Detail
- -

-getTextBlocks

-
-public java.util.List<TextBlock> getTextBlocks()
-
-
Returns the TextBlocks of this document. -

-

- -
Returns:
A list of TextBlocks, in sequential order of appearance.
-
-
-
- -

-getTitle

-
-public java.lang.String getTitle()
-
-
Returns the "main" title for this document, or null if no - such title has ben set. -

-

- -
Returns:
The "main" title.
-
-
-
- -

-setTitle

-
-public void setTitle(java.lang.String title)
-
-
Updates the "main" title for this document. -

-

-
Parameters:
title -
-
-
-
- -

-getContent

-
-public java.lang.String getContent()
-
-
Returns the TextDocument's content. -

-

- -
Returns:
The content text.
-
-
-
- -

-getText

-
-public java.lang.String getText(boolean includeContent,
-                                boolean includeNonContent)
-
-
Returns the TextDocument's content, non-content or both -

-

-
Parameters:
includeContent - Whether to include TextBlocks marked as "content".
includeNonContent - Whether to include TextBlocks marked as "non-content". -
Returns:
The text.
-
-
-
- -

-debugString

-
-public java.lang.String debugString()
-
-
Returns detailed debugging information about the contained TextBlocks. -

-

- -
Returns:
Debug information.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/TextDocumentStatistics.html b/javadoc/1.1/de/l3s/boilerpipe/document/TextDocumentStatistics.html deleted file mode 100644 index 1422eed..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/TextDocumentStatistics.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - -TextDocumentStatistics (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextDocumentStatistics

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextDocumentStatistics
-
-
-
-
public final class TextDocumentStatistics
extends java.lang.Object
- - -

-Provides shallow statistics on a given TextDocument -

- -

-

-
Author:
-
Christian Kohlschuetter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
TextDocumentStatistics(TextDocument doc, - boolean contentOnly) - -
-          Computes statistics on a given TextDocument.
-  - - - - - - - - - - - - - - - -
-Method Summary
- floatavgNumWords() - -
-          Returns the average number of words at block-level (= overall number of words divided by - the number of blocks).
- intgetNumWords() - -
-          Returns the overall number of words in all blocks.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-TextDocumentStatistics

-
-public TextDocumentStatistics(TextDocument doc,
-                              boolean contentOnly)
-
-
Computes statistics on a given TextDocument. -

-

-
Parameters:
doc - The TextDocument.
contentOnly - if true then o
-
- - - - - - - - -
-Method Detail
- -

-avgNumWords

-
-public float avgNumWords()
-
-
Returns the average number of words at block-level (= overall number of words divided by - the number of blocks). -

-

- -
Returns:
Average
-
-
-
- -

-getNumWords

-
-public int getNumWords()
-
-
Returns the overall number of words in all blocks. -

-

- -
Returns:
Sum
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextBlock.html b/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextBlock.html deleted file mode 100644 index 77dace4..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextBlock.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextBlock (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextBlock

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use TextBlock
de.l3s.boilerpipe.conditions  
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model. 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.labels  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.conditions
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.conditions with parameters of type TextBlock
- booleanTextBlockCondition.meetsCondition(TextBlock tb) - -
-          Returns true iff the given TextBlock tb meets the defined condition.
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.document
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.document declared as TextBlock
-static TextBlockTextBlock.EMPTY_END - -
-           
-static TextBlockTextBlock.EMPTY_START - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.document that return types with arguments of type TextBlock
- java.util.List<TextBlock>TextDocument.getTextBlocks() - -
-          Returns the TextBlocks of this document.
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.document with parameters of type TextBlock
- voidTextBlock.mergeNext(TextBlock other) - -
-           
-  -

- - - - - - - - - - - -
Constructor parameters in de.l3s.boilerpipe.document with type arguments of type TextBlock
TextDocument(java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks, and no - title.
TextDocument(java.lang.String title, - java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks and - given title.
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english with parameters of type TextBlock
-protected  booleanNumWordsRulesClassifier.classify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-protected  booleanDensityRulesClassifier.classify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.labels
-  -

- - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.labels with parameters of type TextBlock
-protected  voidLabelAction.addLabelsTo(TextBlock tb) - -
-           
- voidLabelAction.addTo(TextBlock tb) - -
-           
- voidConditionalLabelAction.addTo(TextBlock tb) - -
-           
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type TextBlock
-protected  voidBoilerpipeHTMLContentHandler.addTextBlock(TextBlock tb) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextDocument.html b/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextDocument.html deleted file mode 100644 index d5caada..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextDocument.html +++ /dev/null @@ -1,631 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextDocument (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextDocument

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use TextDocument
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe that return TextDocument
- TextDocumentBoilerpipeInput.getTextDocument() - -
-          Returns (somehow) a TextDocument.
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe with parameters of type TextDocument
- java.lang.StringBoilerpipeExtractor.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- booleanBoilerpipeFilter.process(TextDocument doc) - -
-          Processes the given document doc.
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.document
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.document with parameters of type TextDocument
TextDocumentStatistics(TextDocument doc, - boolean contentOnly) - -
-          Computes statistics on a given TextDocument.
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors with parameters of type TextDocument
- java.lang.StringExtractorBase.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- booleanNumWordsRulesExtractor.process(TextDocument doc) - -
-           
- booleanLargestContentExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingWithMinKWordsExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingExtractor.process(TextDocument doc) - -
-           
- booleanDefaultExtractor.process(TextDocument doc) - -
-           
- booleanCanolaExtractor.process(TextDocument doc) - -
-           
- booleanArticleSentencesExtractor.process(TextDocument doc) - -
-           
- booleanArticleExtractor.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english with parameters of type TextDocument
- booleanTerminatingBlocksFinder.process(TextDocument doc) - -
-           
- booleanNumWordsRulesClassifier.process(TextDocument doc) - -
-           
- booleanMinFulltextWordsFilter.process(TextDocument doc) - -
-           
- booleanKeepLargestFulltextBlockFilter.process(TextDocument doc) - -
-           
- booleanIgnoreBlocksAfterContentFilter.process(TextDocument doc) - -
-           
- booleanDensityRulesClassifier.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics with parameters of type TextDocument
- booleanSimpleBlockFusionProcessor.process(TextDocument doc) - -
-           
- booleanKeepLargestBlockFilter.process(TextDocument doc) - -
-           
- booleanExpandTitleToContentFilter.process(TextDocument doc) - -
-           
- booleanDocumentTitleMatchClassifier.process(TextDocument doc) - -
-           
- booleanBlockProximityFusion.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple with parameters of type TextDocument
- booleanSplitParagraphBlocksFilter.process(TextDocument doc) - -
-           
- booleanMinWordsFilter.process(TextDocument doc) - -
-           
- booleanMinClauseWordsFilter.process(TextDocument doc) - -
-           
- booleanMarkEverythingContentFilter.process(TextDocument doc) - -
-           
- booleanLabelToContentFilter.process(TextDocument doc) - -
-           
- booleanLabelToBoilerplateFilter.process(TextDocument doc) - -
-           
- booleanInvertedFilter.process(TextDocument doc) - -
-           
- booleanBoilerplateBlockFilter.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that return TextDocument
- TextDocumentBoilerpipeSAXInput.getTextDocument() - -
-          Retrieves the TextDocument using a default HTML parser.
- TextDocumentBoilerpipeSAXInput.getTextDocument(BoilerpipeHTMLParser parser) - -
-          Retrieves the TextDocument using the given HTML parser.
- TextDocumentBoilerpipeHTMLParser.toTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlock - s.
- TextDocumentBoilerpipeHTMLContentHandler.toTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlock - s.
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type TextDocument
- java.lang.StringHTMLHighlighter.process(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Processes the given TextDocument and the original HTML text (as - an InputSource).
- java.lang.StringHTMLHighlighter.process(TextDocument doc, - java.lang.String origHTML) - -
-          Processes the given TextDocument and the original HTML text (as a - String).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextDocumentStatistics.html b/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextDocumentStatistics.html deleted file mode 100644 index a005a37..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/class-use/TextDocumentStatistics.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextDocumentStatistics (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextDocumentStatistics

-
- - - - - - - - - -
-Packages that use TextDocumentStatistics
de.l3s.boilerpipe.estimators  
-  -

- - - - - -
-Uses of TextDocumentStatistics in de.l3s.boilerpipe.estimators
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.estimators with parameters of type TextDocumentStatistics
- booleanSimpleEstimator.isLowQuality(TextDocumentStatistics dsBefore, - TextDocumentStatistics dsAfter) - -
-          Given the statistics of the document before and after applying the BoilerpipeExtractor, - can we regard the extraction quality (too) low?
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/document/package-frame.html deleted file mode 100644 index c0a40d4..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/package-frame.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.document - - - - -
-Classes  - -
-TextBlock -
-TextDocument -
-TextDocumentStatistics
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/document/package-summary.html deleted file mode 100644 index d3e6337..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/package-summary.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.document -

- -The classes in this package represent the simple Boilerpipe document model. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - -
-Class Summary
TextBlockDescribes a block of text.
TextDocumentA text document, consisting of one or more TextBlocks.
TextDocumentStatisticsProvides shallow statistics on a given TextDocument
-  - -

-

-Package de.l3s.boilerpipe.document Description -

- -

-

-The classes in this package represent the simple Boilerpipe document model. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/document/package-tree.html deleted file mode 100644 index d1bfafd..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/package-tree.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.document -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/document/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/document/package-use.html deleted file mode 100644 index 46f75f5..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/document/package-use.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.document (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.document

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe.document
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.conditions  
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model. 
de.l3s.boilerpipe.estimators  
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.labels  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.conditions
TextBlock - -
-          Describes a block of text.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.document
TextBlock - -
-          Describes a block of text.
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.estimators
TextDocumentStatistics - -
-          Provides shallow statistics on a given TextDocument
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.extractors
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.english
TextBlock - -
-          Describes a block of text.
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.heuristics
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.simple
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.labels
TextBlock - -
-          Describes a block of text.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.sax
TextBlock - -
-          Describes a block of text.
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/estimators/SimpleEstimator.html b/javadoc/1.1/de/l3s/boilerpipe/estimators/SimpleEstimator.html deleted file mode 100644 index 121e027..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/estimators/SimpleEstimator.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -SimpleEstimator (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.estimators -
-Class SimpleEstimator

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.estimators.SimpleEstimator
-
-
-
-
public final class SimpleEstimator
extends java.lang.Object
- - -

-Estimates the "goodness" of a BoilerpipeExtractor on a given document. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static SimpleEstimatorINSTANCE - -
-          Returns the singleton instance of SimpleEstimator
-  - - - - - - - - - - - -
-Method Summary
- booleanisLowQuality(TextDocumentStatistics dsBefore, - TextDocumentStatistics dsAfter) - -
-          Given the statistics of the document before and after applying the BoilerpipeExtractor, - can we regard the extraction quality (too) low?
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final SimpleEstimator INSTANCE
-
-
Returns the singleton instance of SimpleEstimator -

-

-
-
- - - - - - - - -
-Method Detail
- -

-isLowQuality

-
-public boolean isLowQuality(TextDocumentStatistics dsBefore,
-                            TextDocumentStatistics dsAfter)
-
-
Given the statistics of the document before and after applying the BoilerpipeExtractor, - can we regard the extraction quality (too) low? - - Works well with DefaultExtractor, ArticleExtractor and others. -

-

-
Parameters:
dsBefore -
dsAfter - -
Returns:
true if low quality is to be expected.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/estimators/class-use/SimpleEstimator.html b/javadoc/1.1/de/l3s/boilerpipe/estimators/class-use/SimpleEstimator.html deleted file mode 100644 index eba6c6b..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/estimators/class-use/SimpleEstimator.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.estimators.SimpleEstimator (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.estimators.SimpleEstimator

-
- - - - - - - - - -
-Packages that use SimpleEstimator
de.l3s.boilerpipe.estimators  
-  -

- - - - - -
-Uses of SimpleEstimator in de.l3s.boilerpipe.estimators
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.estimators declared as SimpleEstimator
-static SimpleEstimatorSimpleEstimator.INSTANCE - -
-          Returns the singleton instance of SimpleEstimator
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/estimators/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/estimators/package-frame.html deleted file mode 100644 index bd5e2d9..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/estimators/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -de.l3s.boilerpipe.estimators (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.estimators - - - - -
-Classes  - -
-SimpleEstimator
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/estimators/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/estimators/package-summary.html deleted file mode 100644 index 5bbcb0b..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/estimators/package-summary.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -de.l3s.boilerpipe.estimators (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.estimators -

- - - - - - - - - -
-Class Summary
SimpleEstimatorEstimates the "goodness" of a BoilerpipeExtractor on a given document.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/estimators/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/estimators/package-tree.html deleted file mode 100644 index bc8fac9..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/estimators/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -de.l3s.boilerpipe.estimators Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.estimators -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/estimators/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/estimators/package-use.html deleted file mode 100644 index d59ba73..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/estimators/package-use.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.estimators (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.estimators

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.estimators
de.l3s.boilerpipe.estimators  
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.estimators used by de.l3s.boilerpipe.estimators
SimpleEstimator - -
-          Estimates the "goodness" of a BoilerpipeExtractor on a given document.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/ArticleExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/ArticleExtractor.html deleted file mode 100644 index 69c6da0..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/ArticleExtractor.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -ArticleExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ArticleExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.ArticleExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class ArticleExtractor
extends ExtractorBase
- - -

-A full-text extractor which is tuned towards news articles. In this scenario - it achieves higher accuracy than DefaultExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ArticleExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ArticleExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ArticleExtractorgetInstance() - -
-          Returns the singleton instance for ArticleExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ArticleExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ArticleExtractor

-
-public ArticleExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ArticleExtractor getInstance()
-
-
Returns the singleton instance for ArticleExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html deleted file mode 100644 index 3e6a0dc..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -ArticleSentencesExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ArticleSentencesExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.ArticleSentencesExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class ArticleSentencesExtractor
extends ExtractorBase
- - -

-A full-text extractor which is tuned towards extracting sentences from news articles. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ArticleSentencesExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ArticleSentencesExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ArticleSentencesExtractorgetInstance() - -
-          Returns the singleton instance for ArticleSentencesExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ArticleSentencesExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ArticleSentencesExtractor

-
-public ArticleSentencesExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ArticleSentencesExtractor getInstance()
-
-
Returns the singleton instance for ArticleSentencesExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/CanolaExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/CanolaExtractor.html deleted file mode 100644 index fd86648..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/CanolaExtractor.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - -CanolaExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class CanolaExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.CanolaExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public class CanolaExtractor
extends ExtractorBase
- - -

-A full-text extractor trained on krdwrd Canola - . Works well with SimpleEstimator, too. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static BoilerpipeFilterCLASSIFIER - -
-          The actual classifier, exposed.
-static CanolaExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
CanolaExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static CanolaExtractorgetInstance() - -
-          Returns the singleton instance for CanolaExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final CanolaExtractor INSTANCE
-
-
-
-
-
- -

-CLASSIFIER

-
-public static final BoilerpipeFilter CLASSIFIER
-
-
The actual classifier, exposed. -

-

-
-
- - - - - - - - -
-Constructor Detail
- -

-CanolaExtractor

-
-public CanolaExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static CanolaExtractor getInstance()
-
-
Returns the singleton instance for CanolaExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/CommonExtractors.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/CommonExtractors.html deleted file mode 100644 index 60cf04f..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/CommonExtractors.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - -CommonExtractors (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class CommonExtractors

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.CommonExtractors
-
-
-
-
public final class CommonExtractors
extends java.lang.Object
- - -

-Provides quick access to common BoilerpipeExtractors. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static ArticleExtractorARTICLE_EXTRACTOR - -
-          Works very well for most types of Article-like HTML.
-static CanolaExtractorCANOLA_EXTRACTOR - -
-          Trained on krdwrd Canola (different definition of "boilerplate").
-static DefaultExtractorDEFAULT_EXTRACTOR - -
-          Usually worse than ArticleExtractor, but simpler/no heuristics.
-static KeepEverythingExtractorKEEP_EVERYTHING_EXTRACTOR - -
-          Dummy Extractor; should return the input text.
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-ARTICLE_EXTRACTOR

-
-public static final ArticleExtractor ARTICLE_EXTRACTOR
-
-
Works very well for most types of Article-like HTML. -

-

-
-
-
- -

-DEFAULT_EXTRACTOR

-
-public static final DefaultExtractor DEFAULT_EXTRACTOR
-
-
Usually worse than ArticleExtractor, but simpler/no heuristics. -

-

-
-
-
- -

-CANOLA_EXTRACTOR

-
-public static final CanolaExtractor CANOLA_EXTRACTOR
-
-
Trained on krdwrd Canola (different definition of "boilerplate"). You may - give it a try. -

-

-
-
-
- -

-KEEP_EVERYTHING_EXTRACTOR

-
-public static final KeepEverythingExtractor KEEP_EVERYTHING_EXTRACTOR
-
-
Dummy Extractor; should return the input text. Use this to double-check - that your problem is within a particular BoilerpipeExtractor, or - somewhere else. -

-

-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/DefaultExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/DefaultExtractor.html deleted file mode 100644 index 15441b9..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/DefaultExtractor.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -DefaultExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class DefaultExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.DefaultExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public class DefaultExtractor
extends ExtractorBase
- - -

-A quite generic full-text extractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static DefaultExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
DefaultExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static DefaultExtractorgetInstance() - -
-          Returns the singleton instance for DefaultExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final DefaultExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DefaultExtractor

-
-public DefaultExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static DefaultExtractor getInstance()
-
-
Returns the singleton instance for DefaultExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/ExtractorBase.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/ExtractorBase.html deleted file mode 100644 index 1ab5ba7..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/ExtractorBase.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - -ExtractorBase (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ExtractorBase

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
Direct Known Subclasses:
ArticleExtractor, ArticleSentencesExtractor, CanolaExtractor, DefaultExtractor, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, LargestContentExtractor, NumWordsRulesExtractor
-
-
-
-
public abstract class ExtractorBase
extends java.lang.Object
implements BoilerpipeExtractor
- - -

-The base class of Extractors. Also provides some helper methods to quickly - retrieve the text that remained after processing. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
ExtractorBase() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given InputSource.
- java.lang.StringgetText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringgetText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringgetText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- java.lang.StringgetText(java.net.URL url) - -
-          Extracts text from the HTML code available from the given URL.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
- - - - - - - -
Methods inherited from interface de.l3s.boilerpipe.BoilerpipeFilter
process
-  -

- - - - - - - - -
-Constructor Detail
- -

-ExtractorBase

-
-public ExtractorBase()
-
-
- - - - - - - - -
-Method Detail
- -

-getText

-
-public java.lang.String getText(java.lang.String html)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code given as a String. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
html - The HTML code as a String. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(org.xml.sax.InputSource is)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given InputSource. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
is - The InputSource containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(java.net.URL url)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given URL. - NOTE: This method is mainly to be used for show case purposes. If you are - going to crawl the Web, consider using getText(InputSource) - instead. -

-

-
-
-
-
Parameters:
url - The URL pointing to the HTML code. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(java.io.Reader r)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given Reader. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
r - The Reader containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(TextDocument doc)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the given TextDocument object. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
doc - The TextDocument. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html deleted file mode 100644 index c7d51e4..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -KeepEverythingExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class KeepEverythingExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.KeepEverythingExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class KeepEverythingExtractor
extends ExtractorBase
- - -

-Marks everything as content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static KeepEverythingExtractorINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepEverythingExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html deleted file mode 100644 index 44d547c..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - -KeepEverythingWithMinKWordsExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class KeepEverythingWithMinKWordsExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class KeepEverythingWithMinKWordsExtractor
extends ExtractorBase
- - -

-A full-text extractor which extracts the largest text component of a page. - For news articles, it may perform better than the DefaultExtractor, - but usually worse than ArticleExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
KeepEverythingWithMinKWordsExtractor(int kMin) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-KeepEverythingWithMinKWordsExtractor

-
-public KeepEverythingWithMinKWordsExtractor(int kMin)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/LargestContentExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/LargestContentExtractor.html deleted file mode 100644 index 6799a4a..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/LargestContentExtractor.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -LargestContentExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class LargestContentExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.LargestContentExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class LargestContentExtractor
extends ExtractorBase
- - -

-A full-text extractor which extracts the largest text component of a page. - For news articles, it may perform better than the DefaultExtractor, - but usually worse than ArticleExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static LargestContentExtractorINSTANCE - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static LargestContentExtractorgetInstance() - -
-          Returns the singleton instance for LargestContentExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final LargestContentExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static LargestContentExtractor getInstance()
-
-
Returns the singleton instance for LargestContentExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html deleted file mode 100644 index 5c7284a..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -NumWordsRulesExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class NumWordsRulesExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.NumWordsRulesExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public class NumWordsRulesExtractor
extends ExtractorBase
- - -

-A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block). -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static NumWordsRulesExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
NumWordsRulesExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static NumWordsRulesExtractorgetInstance() - -
-          Returns the singleton instance for NumWordsRulesExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final NumWordsRulesExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-NumWordsRulesExtractor

-
-public NumWordsRulesExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static NumWordsRulesExtractor getInstance()
-
-
Returns the singleton instance for NumWordsRulesExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html deleted file mode 100644 index 8e9aa10..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ArticleExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ArticleExtractor

-
- - - - - - - - - -
-Packages that use ArticleExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ArticleExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as ArticleExtractor
-static ArticleExtractorCommonExtractors.ARTICLE_EXTRACTOR - -
-          Works very well for most types of Article-like HTML.
-static ArticleExtractorArticleExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return ArticleExtractor
-static ArticleExtractorArticleExtractor.getInstance() - -
-          Returns the singleton instance for ArticleExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html deleted file mode 100644 index 2d8a880..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ArticleSentencesExtractor

-
- - - - - - - - - -
-Packages that use ArticleSentencesExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ArticleSentencesExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as ArticleSentencesExtractor
-static ArticleSentencesExtractorArticleSentencesExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return ArticleSentencesExtractor
-static ArticleSentencesExtractorArticleSentencesExtractor.getInstance() - -
-          Returns the singleton instance for ArticleSentencesExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/CanolaExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/CanolaExtractor.html deleted file mode 100644 index 0d349f1..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/CanolaExtractor.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.CanolaExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.CanolaExtractor

-
- - - - - - - - - -
-Packages that use CanolaExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of CanolaExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as CanolaExtractor
-static CanolaExtractorCommonExtractors.CANOLA_EXTRACTOR - -
-          Trained on krdwrd Canola (different definition of "boilerplate").
-static CanolaExtractorCanolaExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return CanolaExtractor
-static CanolaExtractorCanolaExtractor.getInstance() - -
-          Returns the singleton instance for CanolaExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/CommonExtractors.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/CommonExtractors.html deleted file mode 100644 index 4f32f91..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/CommonExtractors.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.CommonExtractors (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.CommonExtractors

-
-No usage of de.l3s.boilerpipe.extractors.CommonExtractors -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html deleted file mode 100644 index 0ab674c..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.DefaultExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.DefaultExtractor

-
- - - - - - - - - -
-Packages that use DefaultExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of DefaultExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as DefaultExtractor
-static DefaultExtractorCommonExtractors.DEFAULT_EXTRACTOR - -
-          Usually worse than ArticleExtractor, but simpler/no heuristics.
-static DefaultExtractorDefaultExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return DefaultExtractor
-static DefaultExtractorDefaultExtractor.getInstance() - -
-          Returns the singleton instance for DefaultExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html deleted file mode 100644 index 7d72208..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ExtractorBase (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ExtractorBase

-
- - - - - - - - - -
-Packages that use ExtractorBase
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ExtractorBase in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of ExtractorBase in de.l3s.boilerpipe.extractors
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classCanolaExtractor - -
-          A full-text extractor trained on krdwrd Canola - .
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html deleted file mode 100644 index 4645c0a..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.KeepEverythingExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.KeepEverythingExtractor

-
- - - - - - - - - -
-Packages that use KeepEverythingExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of KeepEverythingExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as KeepEverythingExtractor
-static KeepEverythingExtractorKeepEverythingExtractor.INSTANCE - -
-           
-static KeepEverythingExtractorCommonExtractors.KEEP_EVERYTHING_EXTRACTOR - -
-          Dummy Extractor; should return the input text.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html deleted file mode 100644 index b8122b1..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor

-
-No usage of de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html deleted file mode 100644 index d73ec86..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.LargestContentExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.LargestContentExtractor

-
- - - - - - - - - -
-Packages that use LargestContentExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of LargestContentExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as LargestContentExtractor
-static LargestContentExtractorLargestContentExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return LargestContentExtractor
-static LargestContentExtractorLargestContentExtractor.getInstance() - -
-          Returns the singleton instance for LargestContentExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html deleted file mode 100644 index 66d827e..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.NumWordsRulesExtractor

-
- - - - - - - - - -
-Packages that use NumWordsRulesExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of NumWordsRulesExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as NumWordsRulesExtractor
-static NumWordsRulesExtractorNumWordsRulesExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return NumWordsRulesExtractor
-static NumWordsRulesExtractorNumWordsRulesExtractor.getInstance() - -
-          Returns the singleton instance for NumWordsRulesExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/package-frame.html deleted file mode 100644 index 9cfa48f..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/package-frame.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.extractors - - - - -
-Classes  - -
-ArticleExtractor -
-ArticleSentencesExtractor -
-CanolaExtractor -
-CommonExtractors -
-DefaultExtractor -
-ExtractorBase -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-LargestContentExtractor -
-NumWordsRulesExtractor
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/package-summary.html deleted file mode 100644 index 3ca398a..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/package-summary.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.extractors -

- -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
ArticleExtractorA full-text extractor which is tuned towards news articles.
ArticleSentencesExtractorA full-text extractor which is tuned towards extracting sentences from news articles.
CanolaExtractorA full-text extractor trained on krdwrd Canola - .
CommonExtractorsProvides quick access to common BoilerpipeExtractors.
DefaultExtractorA quite generic full-text extractor.
ExtractorBaseThe base class of Extractors.
KeepEverythingExtractorMarks everything as content.
KeepEverythingWithMinKWordsExtractorA full-text extractor which extracts the largest text component of a page.
LargestContentExtractorA full-text extractor which extracts the largest text component of a page.
NumWordsRulesExtractorA quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  - -

-

-Package de.l3s.boilerpipe.extractors Description -

- -

-

-This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/package-tree.html deleted file mode 100644 index c1fd6f4..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/package-tree.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.extractors -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/extractors/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/extractors/package-use.html deleted file mode 100644 index 6ac41d2..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/extractors/package-use.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.extractors (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.extractors

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.extractors
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.extractors used by de.l3s.boilerpipe.extractors
ArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
ArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
CanolaExtractor - -
-          A full-text extractor trained on krdwrd Canola - .
DefaultExtractor - -
-          A quite generic full-text extractor.
ExtractorBase - -
-          The base class of Extractors.
KeepEverythingExtractor - -
-          Marks everything as content.
LargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
NumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html deleted file mode 100644 index 0eef6ee..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - -DensityRulesClassifier (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class DensityRulesClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.DensityRulesClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class DensityRulesClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static DensityRulesClassifierINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
DensityRulesClassifier() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  booleanclassify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-static DensityRulesClassifiergetInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final DensityRulesClassifier INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DensityRulesClassifier

-
-public DensityRulesClassifier()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static DensityRulesClassifier getInstance()
-
-
Returns the singleton instance for RulebasedBoilerpipeClassifier. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-classify

-
-protected boolean classify(TextBlock prev,
-                           TextBlock curr,
-                           TextBlock next)
-
-
-
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html deleted file mode 100644 index 8693936..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - -IgnoreBlocksAfterContentFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class IgnoreBlocksAfterContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class IgnoreBlocksAfterContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT. These marks are ignored - unless a minimum number of words in content blocks occur before this mark (default: 60). - This can be used in conjunction with an upstream TerminatingBlocksFinder. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
TerminatingBlocksFinder
-
- -

- - - - - - - - - - - -
-Field Summary
-static IgnoreBlocksAfterContentFilterDEFAULT_INSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
IgnoreBlocksAfterContentFilter(int minNumWords) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-static IgnoreBlocksAfterContentFiltergetDefaultInstance() - -
-          Returns the singleton instance for DeleteBlocksAfterContentFilter.
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-DEFAULT_INSTANCE

-
-public static final IgnoreBlocksAfterContentFilter DEFAULT_INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-IgnoreBlocksAfterContentFilter

-
-public IgnoreBlocksAfterContentFilter(int minNumWords)
-
-
- - - - - - - - -
-Method Detail
- -

-getDefaultInstance

-
-public static IgnoreBlocksAfterContentFilter getDefaultInstance()
-
-
Returns the singleton instance for DeleteBlocksAfterContentFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html deleted file mode 100644 index 8704373..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - -KeepLargestFulltextBlockFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class KeepLargestFulltextBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class KeepLargestFulltextBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps the largest TextBlock only (by the number of words). In case of - more than one block with the same number of words, the first block is chosen. - All discarded blocks are marked "not content" and flagged as - DefaultLabels.MIGHT_BE_CONTENT. - - As opposed to KeepLargestBlockFilter, the number of words are - computed using HeuristicFilterBase.getNumFullTextWords(TextBlock), which only counts - words that occur in text elements with at least 9 words and are thus believed to be full text. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static KeepLargestFulltextBlockFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
KeepLargestFulltextBlockFilter() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepLargestFulltextBlockFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-KeepLargestFulltextBlockFilter

-
-public KeepLargestFulltextBlockFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html deleted file mode 100644 index 3c0ebc9..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - -MinFulltextWordsFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class MinFulltextWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinFulltextWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static MinFulltextWordsFilterDEFAULT_INSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
MinFulltextWordsFilter(int minWords) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-static MinFulltextWordsFiltergetDefaultInstance() - -
-           
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-DEFAULT_INSTANCE

-
-public static final MinFulltextWordsFilter DEFAULT_INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-MinFulltextWordsFilter

-
-public MinFulltextWordsFilter(int minWords)
-
-
- - - - - - - - -
-Method Detail
- -

-getDefaultInstance

-
-public static MinFulltextWordsFilter getDefaultInstance()
-
-
-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html deleted file mode 100644 index ae22cf3..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - -NumWordsRulesClassifier (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class NumWordsRulesClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class NumWordsRulesClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static NumWordsRulesClassifierINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
NumWordsRulesClassifier() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  booleanclassify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-static NumWordsRulesClassifiergetInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final NumWordsRulesClassifier INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-NumWordsRulesClassifier

-
-public NumWordsRulesClassifier()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static NumWordsRulesClassifier getInstance()
-
-
Returns the singleton instance for RulebasedBoilerpipeClassifier. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-classify

-
-protected boolean classify(TextBlock prev,
-                           TextBlock curr,
-                           TextBlock next)
-
-
-
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html deleted file mode 100644 index 0d2e447..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - -TerminatingBlocksFinder (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class TerminatingBlocksFinder

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class TerminatingBlocksFinder
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Finds blocks which are potentially indicating the end of an article text and marks - them with DefaultLabels.INDICATES_END_OF_TEXT. This can be used in conjunction - with a downstream IgnoreBlocksAfterContentFilter. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
IgnoreBlocksAfterContentFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static TerminatingBlocksFinderINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
TerminatingBlocksFinder() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static TerminatingBlocksFindergetInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final TerminatingBlocksFinder INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-TerminatingBlocksFinder

-
-public TerminatingBlocksFinder()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static TerminatingBlocksFinder getInstance()
-
-
Returns the singleton instance for TerminatingBlocksFinder. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html deleted file mode 100644 index 9a75c5a..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.DensityRulesClassifier (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.DensityRulesClassifier

-
- - - - - - - - - -
-Packages that use DensityRulesClassifier
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of DensityRulesClassifier in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as DensityRulesClassifier
-static DensityRulesClassifierDensityRulesClassifier.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return DensityRulesClassifier
-static DensityRulesClassifierDensityRulesClassifier.getInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html deleted file mode 100644 index 474b324..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter

-
- - - - - - - - - -
-Packages that use IgnoreBlocksAfterContentFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of IgnoreBlocksAfterContentFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as IgnoreBlocksAfterContentFilter
-static IgnoreBlocksAfterContentFilterIgnoreBlocksAfterContentFilter.DEFAULT_INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return IgnoreBlocksAfterContentFilter
-static IgnoreBlocksAfterContentFilterIgnoreBlocksAfterContentFilter.getDefaultInstance() - -
-          Returns the singleton instance for DeleteBlocksAfterContentFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html deleted file mode 100644 index 41249c8..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter

-
- - - - - - - - - -
-Packages that use KeepLargestFulltextBlockFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of KeepLargestFulltextBlockFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as KeepLargestFulltextBlockFilter
-static KeepLargestFulltextBlockFilterKeepLargestFulltextBlockFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html deleted file mode 100644 index 40be7d0..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter

-
- - - - - - - - - -
-Packages that use MinFulltextWordsFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of MinFulltextWordsFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as MinFulltextWordsFilter
-static MinFulltextWordsFilterMinFulltextWordsFilter.DEFAULT_INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return MinFulltextWordsFilter
-static MinFulltextWordsFilterMinFulltextWordsFilter.getDefaultInstance() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html deleted file mode 100644 index dda1e05..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier

-
- - - - - - - - - -
-Packages that use NumWordsRulesClassifier
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of NumWordsRulesClassifier in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as NumWordsRulesClassifier
-static NumWordsRulesClassifierNumWordsRulesClassifier.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return NumWordsRulesClassifier
-static NumWordsRulesClassifierNumWordsRulesClassifier.getInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html deleted file mode 100644 index 6a295e8..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder

-
- - - - - - - - - -
-Packages that use TerminatingBlocksFinder
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of TerminatingBlocksFinder in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as TerminatingBlocksFinder
-static TerminatingBlocksFinderTerminatingBlocksFinder.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return TerminatingBlocksFinder
-static TerminatingBlocksFinderTerminatingBlocksFinder.getInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-frame.html deleted file mode 100644 index 9575598..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-frame.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.filters.english - - - - -
-Classes  - -
-DensityRulesClassifier -
-IgnoreBlocksAfterContentFilter -
-KeepLargestFulltextBlockFilter -
-MinFulltextWordsFilter -
-NumWordsRulesClassifier -
-TerminatingBlocksFinder
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-summary.html deleted file mode 100644 index 415d3a8..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-summary.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.english -

- -The BoilerpipeFilters in this package have only been tested on English text. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
DensityRulesClassifierClassifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
IgnoreBlocksAfterContentFilterMarks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT.
KeepLargestFulltextBlockFilterKeeps the largest TextBlock only (by the number of words).
MinFulltextWordsFilterKeeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default.
NumWordsRulesClassifierClassifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
TerminatingBlocksFinderFinds blocks which are potentially indicating the end of an article text and marks - them with DefaultLabels.INDICATES_END_OF_TEXT.
-  - -

-

-Package de.l3s.boilerpipe.filters.english Description -

- -

-

-The BoilerpipeFilters in this package have only been tested on English text. -

-

-That is, they will probably work with other Western languages, but maybe need some parameter tuning to perform well. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-tree.html deleted file mode 100644 index 9362f54..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-tree.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.english -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-use.html deleted file mode 100644 index 76ed267..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/english/package-use.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.english (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.english

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.english
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.english used by de.l3s.boilerpipe.filters.english
DensityRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
IgnoreBlocksAfterContentFilter - -
-          Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT.
KeepLargestFulltextBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
MinFulltextWordsFilter - -
-          Keeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default.
NumWordsRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
TerminatingBlocksFinder - -
-          Finds blocks which are potentially indicating the end of an article text and marks - them with DefaultLabels.INDICATES_END_OF_TEXT.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html deleted file mode 100644 index b552ad7..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html +++ /dev/null @@ -1,335 +0,0 @@ - - - - - - -BlockProximityFusion (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class BlockProximityFusion

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class BlockProximityFusion
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit. - This probably makes sense only in cases where an upstream filter already has removed some blocks. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static BlockProximityFusionMAX_DISTANCE_1 - -
-           
-static BlockProximityFusionMAX_DISTANCE_1_CONTENT_ONLY - -
-           
-  - - - - - - - - - - -
-Constructor Summary
BlockProximityFusion(int maxBlocksDistance, - boolean contentOnly) - -
-          Creates a new BlockProximityFusion instance.
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-MAX_DISTANCE_1

-
-public static final BlockProximityFusion MAX_DISTANCE_1
-
-
-
-
-
- -

-MAX_DISTANCE_1_CONTENT_ONLY

-
-public static final BlockProximityFusion MAX_DISTANCE_1_CONTENT_ONLY
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-BlockProximityFusion

-
-public BlockProximityFusion(int maxBlocksDistance,
-                            boolean contentOnly)
-
-
Creates a new BlockProximityFusion instance. -

-

-
Parameters:
maxBlocksDistance - The maximum distance in blocks.
contentOnly -
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html deleted file mode 100644 index 2992d33..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - -DocumentTitleMatchClassifier (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class DocumentTitleMatchClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class DocumentTitleMatchClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
DocumentTitleMatchClassifier(java.lang.String title) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-DocumentTitleMatchClassifier

-
-public DocumentTitleMatchClassifier(java.lang.String title)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html deleted file mode 100644 index 616b52f..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - -ExpandTitleToContentFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class ExpandTitleToContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class ExpandTitleToContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT. - - This filter is quite specific to the news domain. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ExpandTitleToContentFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ExpandTitleToContentFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ExpandTitleToContentFiltergetInstance() - -
-          Returns the singleton instance for ExpandTitleToContentFilter.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ExpandTitleToContentFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ExpandTitleToContentFilter

-
-public ExpandTitleToContentFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ExpandTitleToContentFilter getInstance()
-
-
Returns the singleton instance for ExpandTitleToContentFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html deleted file mode 100644 index cb0c7dd..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - -KeepLargestBlockFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class KeepLargestBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class KeepLargestBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps the largest TextBlock only (by the number of words). In case of - more than one block with the same number of words, the first block is chosen. - All discarded blocks are marked "not content" and flagged as - DefaultLabels.MIGHT_BE_CONTENT. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static KeepLargestBlockFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
KeepLargestBlockFilter() - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepLargestBlockFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-KeepLargestBlockFilter

-
-public KeepLargestBlockFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html deleted file mode 100644 index ecb6500..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - -SimpleBlockFusionProcessor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class SimpleBlockFusionProcessor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class SimpleBlockFusionProcessor
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Merges two subsequent blocks if their text densities are equal. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static SimpleBlockFusionProcessorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
SimpleBlockFusionProcessor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static SimpleBlockFusionProcessorgetInstance() - -
-          Returns the singleton instance for BlockFusionProcessor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final SimpleBlockFusionProcessor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-SimpleBlockFusionProcessor

-
-public SimpleBlockFusionProcessor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static SimpleBlockFusionProcessor getInstance()
-
-
Returns the singleton instance for BlockFusionProcessor. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html deleted file mode 100644 index e0452ed..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion

-
- - - - - - - - - -
-Packages that use BlockProximityFusion
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of BlockProximityFusion in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as BlockProximityFusion
-static BlockProximityFusionBlockProximityFusion.MAX_DISTANCE_1 - -
-           
-static BlockProximityFusionBlockProximityFusion.MAX_DISTANCE_1_CONTENT_ONLY - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html deleted file mode 100644 index 8b4d1db..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier

-
-No usage of de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html deleted file mode 100644 index 5b6d176..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter

-
- - - - - - - - - -
-Packages that use ExpandTitleToContentFilter
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of ExpandTitleToContentFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as ExpandTitleToContentFilter
-static ExpandTitleToContentFilterExpandTitleToContentFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that return ExpandTitleToContentFilter
-static ExpandTitleToContentFilterExpandTitleToContentFilter.getInstance() - -
-          Returns the singleton instance for ExpandTitleToContentFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html deleted file mode 100644 index 0fc550d..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter

-
- - - - - - - - - -
-Packages that use KeepLargestBlockFilter
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of KeepLargestBlockFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as KeepLargestBlockFilter
-static KeepLargestBlockFilterKeepLargestBlockFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html deleted file mode 100644 index 076ad36..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor

-
- - - - - - - - - -
-Packages that use SimpleBlockFusionProcessor
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of SimpleBlockFusionProcessor in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as SimpleBlockFusionProcessor
-static SimpleBlockFusionProcessorSimpleBlockFusionProcessor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that return SimpleBlockFusionProcessor
-static SimpleBlockFusionProcessorSimpleBlockFusionProcessor.getInstance() - -
-          Returns the singleton instance for BlockFusionProcessor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-frame.html deleted file mode 100644 index dfe00d7..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-frame.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.filters.heuristics - - - - -
-Classes  - -
-BlockProximityFusion -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-KeepLargestBlockFilter -
-SimpleBlockFusionProcessor
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-summary.html deleted file mode 100644 index 84c1139..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-summary.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.heuristics -

- -The BoilerpipeFilters in this package are pure heuristics. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BlockProximityFusionFuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
DocumentTitleMatchClassifierMarks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
ExpandTitleToContentFilterMarks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT.
KeepLargestBlockFilterKeeps the largest TextBlock only (by the number of words).
SimpleBlockFusionProcessorMerges two subsequent blocks if their text densities are equal.
-  - -

-

-Package de.l3s.boilerpipe.filters.heuristics Description -

- -

-

-The BoilerpipeFilters in this package are pure heuristics. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-tree.html deleted file mode 100644 index 520f2f3..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-tree.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.heuristics -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-use.html deleted file mode 100644 index 31f6575..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/heuristics/package-use.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.heuristics (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.heuristics

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.heuristics
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.heuristics used by de.l3s.boilerpipe.filters.heuristics
BlockProximityFusion - -
-          Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
ExpandTitleToContentFilter - -
-          Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT.
KeepLargestBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
SimpleBlockFusionProcessor - -
-          Merges two subsequent blocks if their text densities are equal.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html deleted file mode 100644 index 0b3cc30..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - -BoilerplateBlockFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class BoilerplateBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class BoilerplateBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Removes TextBlocks which have explicitly been marked as "not content". -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static BoilerplateBlockFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
BoilerplateBlockFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static BoilerplateBlockFiltergetInstance() - -
-          Returns the singleton instance for BoilerplateBlockFilter.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final BoilerplateBlockFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-BoilerplateBlockFilter

-
-public BoilerplateBlockFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static BoilerplateBlockFilter getInstance()
-
-
Returns the singleton instance for BoilerplateBlockFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/InvertedFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/InvertedFilter.html deleted file mode 100644 index 1340ec4..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/InvertedFilter.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - -InvertedFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class InvertedFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.InvertedFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class InvertedFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Reverts the "isContent" flag for all TextBlocks -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static InvertedFilterINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final InvertedFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.html deleted file mode 100644 index 449331d..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -LabelToBoilerplateFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class LabelToBoilerplateFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class LabelToBoilerplateFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks that contain a given label as "boilerplate". -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
LabelToBoilerplateFilter(java.lang.String... label) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-LabelToBoilerplateFilter

-
-public LabelToBoilerplateFilter(java.lang.String... label)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.html deleted file mode 100644 index f9a3dd4..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -LabelToContentFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class LabelToContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.LabelToContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class LabelToContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks that contain a given label as "content". -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
LabelToContentFilter(java.lang.String... label) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-LabelToContentFilter

-
-public LabelToContentFilter(java.lang.String... label)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html deleted file mode 100644 index af8247b..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - -MarkEverythingContentFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MarkEverythingContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MarkEverythingContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks as content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static MarkEverythingContentFilterINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final MarkEverythingContentFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html deleted file mode 100644 index fd238bd..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - -MinClauseWordsFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MinClauseWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinClauseWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5). - - NOTE: You might consider using the SplitParagraphBlocksFilter - upstream. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
SplitParagraphBlocksFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static MinClauseWordsFilterINSTANCE - -
-           
-  - - - - - - - - - - - - - -
-Constructor Summary
MinClauseWordsFilter(int minWords) - -
-           
MinClauseWordsFilter(int minWords, - boolean acceptClausesWithoutDelimiter) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final MinClauseWordsFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-MinClauseWordsFilter

-
-public MinClauseWordsFilter(int minWords)
-
-
-
- -

-MinClauseWordsFilter

-
-public MinClauseWordsFilter(int minWords,
-                            boolean acceptClausesWithoutDelimiter)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html deleted file mode 100644 index d1289c5..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -MinWordsFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MinWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MinWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only those content blocks which contain at least k words. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
MinWordsFilter(int minWords) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MinWordsFilter

-
-public MinWordsFilter(int minWords)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html deleted file mode 100644 index 9a4b7a7..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -SplitParagraphBlocksFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class SplitParagraphBlocksFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class SplitParagraphBlocksFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Splits TextBlocks at paragraph boundaries. - - NOTE: This is not fully supported (i.e., it will break highlighting support - via #getContainedTextElements()), but this one probably is necessary for some other - filters. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
MinClauseWordsFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static SplitParagraphBlocksFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
SplitParagraphBlocksFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static SplitParagraphBlocksFiltergetInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final SplitParagraphBlocksFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-SplitParagraphBlocksFilter

-
-public SplitParagraphBlocksFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static SplitParagraphBlocksFilter getInstance()
-
-
Returns the singleton instance for TerminatingBlocksFinder. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html deleted file mode 100644 index bb66cdd..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter

-
- - - - - - - - - -
-Packages that use BoilerplateBlockFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of BoilerplateBlockFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as BoilerplateBlockFilter
-static BoilerplateBlockFilterBoilerplateBlockFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that return BoilerplateBlockFilter
-static BoilerplateBlockFilterBoilerplateBlockFilter.getInstance() - -
-          Returns the singleton instance for BoilerplateBlockFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html deleted file mode 100644 index 7ff3515..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.InvertedFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.InvertedFilter

-
- - - - - - - - - -
-Packages that use InvertedFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of InvertedFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as InvertedFilter
-static InvertedFilterInvertedFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/LabelToBoilerplateFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/LabelToBoilerplateFilter.html deleted file mode 100644 index 475e250..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/LabelToBoilerplateFilter.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter

-
-No usage of de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/LabelToContentFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/LabelToContentFilter.html deleted file mode 100644 index cf8f5ba..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/LabelToContentFilter.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.LabelToContentFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.LabelToContentFilter

-
-No usage of de.l3s.boilerpipe.filters.simple.LabelToContentFilter -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html deleted file mode 100644 index 4ab1b2e..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter

-
- - - - - - - - - -
-Packages that use MarkEverythingContentFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of MarkEverythingContentFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as MarkEverythingContentFilter
-static MarkEverythingContentFilterMarkEverythingContentFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html deleted file mode 100644 index fc46e4e..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter

-
- - - - - - - - - -
-Packages that use MinClauseWordsFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of MinClauseWordsFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as MinClauseWordsFilter
-static MinClauseWordsFilterMinClauseWordsFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html deleted file mode 100644 index eba479a..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MinWordsFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MinWordsFilter

-
-No usage of de.l3s.boilerpipe.filters.simple.MinWordsFilter -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html deleted file mode 100644 index caaa75e..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter

-
- - - - - - - - - -
-Packages that use SplitParagraphBlocksFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of SplitParagraphBlocksFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as SplitParagraphBlocksFilter
-static SplitParagraphBlocksFilterSplitParagraphBlocksFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that return SplitParagraphBlocksFilter
-static SplitParagraphBlocksFilterSplitParagraphBlocksFilter.getInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-frame.html deleted file mode 100644 index 410b071..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-frame.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.filters.simple - - - - -
-Classes  - -
-BoilerplateBlockFilter -
-InvertedFilter -
-LabelToBoilerplateFilter -
-LabelToContentFilter -
-MarkEverythingContentFilter -
-MinClauseWordsFilter -
-MinWordsFilter -
-SplitParagraphBlocksFilter
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-summary.html deleted file mode 100644 index 7ddc291..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-summary.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.simple -

- -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BoilerplateBlockFilterRemoves TextBlocks which have explicitly been marked as "not content".
InvertedFilterReverts the "isContent" flag for all TextBlocks
LabelToBoilerplateFilterMarks all blocks that contain a given label as "boilerplate".
LabelToContentFilterMarks all blocks that contain a given label as "content".
MarkEverythingContentFilterMarks all blocks as content.
MinClauseWordsFilterKeeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
MinWordsFilterKeeps only those content blocks which contain at least k words.
SplitParagraphBlocksFilterSplits TextBlocks at paragraph boundaries.
-  - -

-

-Package de.l3s.boilerpipe.filters.simple Description -

- -

-

-The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-tree.html deleted file mode 100644 index e53e58c..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-tree.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.simple -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-use.html deleted file mode 100644 index 4d36bba..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/filters/simple/package-use.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.simple (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.simple

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.simple
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.simple used by de.l3s.boilerpipe.filters.simple
BoilerplateBlockFilter - -
-          Removes TextBlocks which have explicitly been marked as "not content".
InvertedFilter - -
-          Reverts the "isContent" flag for all TextBlocks
MarkEverythingContentFilter - -
-          Marks all blocks as content.
MinClauseWordsFilter - -
-          Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
SplitParagraphBlocksFilter - -
-          Splits TextBlocks at paragraph boundaries.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/ConditionalLabelAction.html b/javadoc/1.1/de/l3s/boilerpipe/labels/ConditionalLabelAction.html deleted file mode 100644 index 9510b6b..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/ConditionalLabelAction.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - -ConditionalLabelAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.labels -
-Class ConditionalLabelAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.labels.LabelAction
-      extended by de.l3s.boilerpipe.labels.ConditionalLabelAction
-
-
-
-
public final class ConditionalLabelAction
extends LabelAction
- - -

-Adds labels to a TextBlock if the given criteria are met. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class de.l3s.boilerpipe.labels.LabelAction
labels
-  - - - - - - - - - - -
-Constructor Summary
ConditionalLabelAction(TextBlockCondition condition, - java.lang.String... labels) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidaddTo(TextBlock tb) - -
-           
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.labels.LabelAction
addLabelsTo
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-ConditionalLabelAction

-
-public ConditionalLabelAction(TextBlockCondition condition,
-                              java.lang.String... labels)
-
-
- - - - - - - - -
-Method Detail
- -

-addTo

-
-public void addTo(TextBlock tb)
-
-
-
Overrides:
addTo in class LabelAction
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/DefaultLabels.html b/javadoc/1.1/de/l3s/boilerpipe/labels/DefaultLabels.html deleted file mode 100644 index b77de1c..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/DefaultLabels.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -DefaultLabels (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.labels -
-Class DefaultLabels

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.labels.DefaultLabels
-
-
-
-
public final class DefaultLabels
extends java.lang.Object
- - -

-Some pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String). -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - -
-Field Summary
-static java.lang.StringINDICATES_END_OF_TEXT - -
-           
-static java.lang.StringMIGHT_BE_CONTENT - -
-           
-static java.lang.StringTITLE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
DefaultLabels() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-TITLE

-
-public static final java.lang.String TITLE
-
-
-
See Also:
Constant Field Values
-
-
- -

-INDICATES_END_OF_TEXT

-
-public static final java.lang.String INDICATES_END_OF_TEXT
-
-
-
See Also:
Constant Field Values
-
-
- -

-MIGHT_BE_CONTENT

-
-public static final java.lang.String MIGHT_BE_CONTENT
-
-
-
See Also:
Constant Field Values
-
- - - - - - - - -
-Constructor Detail
- -

-DefaultLabels

-
-public DefaultLabels()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/LabelAction.html b/javadoc/1.1/de/l3s/boilerpipe/labels/LabelAction.html deleted file mode 100644 index 4bac1d0..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/LabelAction.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - - -LabelAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.labels -
-Class LabelAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.labels.LabelAction
-
-
-
Direct Known Subclasses:
ConditionalLabelAction
-
-
-
-
public class LabelAction
extends java.lang.Object
- - -

-Helps adding labels to TextBlocks. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
ConditionalLabelAction
-
- -

- - - - - - - - - - - -
-Field Summary
-protected  java.lang.String[]labels - -
-           
-  - - - - - - - - - - -
-Constructor Summary
LabelAction(java.lang.String... labels) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-protected  voidaddLabelsTo(TextBlock tb) - -
-           
- voidaddTo(TextBlock tb) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-labels

-
-protected final java.lang.String[] labels
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-LabelAction

-
-public LabelAction(java.lang.String... labels)
-
-
- - - - - - - - -
-Method Detail
- -

-addTo

-
-public void addTo(TextBlock tb)
-
-
-
-
-
-
- -

-addLabelsTo

-
-protected final void addLabelsTo(TextBlock tb)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/ConditionalLabelAction.html b/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/ConditionalLabelAction.html deleted file mode 100644 index 811d555..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/ConditionalLabelAction.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.labels.ConditionalLabelAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.labels.ConditionalLabelAction

-
-No usage of de.l3s.boilerpipe.labels.ConditionalLabelAction -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/DefaultLabels.html b/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/DefaultLabels.html deleted file mode 100644 index 59a9b22..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/DefaultLabels.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.labels.DefaultLabels (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.labels.DefaultLabels

-
-No usage of de.l3s.boilerpipe.labels.DefaultLabels -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/LabelAction.html b/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/LabelAction.html deleted file mode 100644 index 5948c63..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/class-use/LabelAction.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.labels.LabelAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.labels.LabelAction

-
- - - - - - - - - - - - - -
-Packages that use LabelAction
de.l3s.boilerpipe.labels  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of LabelAction in de.l3s.boilerpipe.labels
-  -

- - - - - - - - - -
Subclasses of LabelAction in de.l3s.boilerpipe.labels
- classConditionalLabelAction - -
-          Adds labels to a TextBlock if the given criteria are met.
-  -

- - - - - -
-Uses of LabelAction in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type LabelAction
CommonTagActions.BlockTagLabelAction(LabelAction action) - -
-           
CommonTagActions.InlineTagLabelAction(LabelAction action) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/labels/package-frame.html deleted file mode 100644 index dce79ac..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/package-frame.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - -de.l3s.boilerpipe.labels (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.labels - - - - -
-Classes  - -
-ConditionalLabelAction -
-DefaultLabels -
-LabelAction
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/labels/package-summary.html deleted file mode 100644 index 4a64bbb..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/package-summary.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - -de.l3s.boilerpipe.labels (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.labels -

- - - - - - - - - - - - - - - - - -
-Class Summary
ConditionalLabelActionAdds labels to a TextBlock if the given criteria are met.
DefaultLabelsSome pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String).
LabelActionHelps adding labels to TextBlocks.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/labels/package-tree.html deleted file mode 100644 index e12d814..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/package-tree.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -de.l3s.boilerpipe.labels Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.labels -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/labels/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/labels/package-use.html deleted file mode 100644 index a73b56e..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/labels/package-use.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.labels (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.labels

-
- - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe.labels
de.l3s.boilerpipe.labels  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.labels used by de.l3s.boilerpipe.labels
LabelAction - -
-          Helps adding labels to TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.labels used by de.l3s.boilerpipe.sax
LabelAction - -
-          Helps adding labels to TextBlocks.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/package-frame.html deleted file mode 100644 index a878207..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/package-frame.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - -de.l3s.boilerpipe (1.1 API) - - - - - - - - - -de.l3s.boilerpipe - - - - -
-Interfaces  - -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeInput
- - - - - - -
-Exceptions  - -
-BoilerpipeProcessingException
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/package-summary.html deleted file mode 100644 index 11ea7d7..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/package-summary.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -de.l3s.boilerpipe (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe -

- -The Boilerpipe top-level package. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - -
-Interface Summary
BoilerpipeExtractorDescribes a complete filter pipeline.
BoilerpipeFilterA generic BoilerpipeFilter.
BoilerpipeInputA source that returns TextDocuments.
-  - -

- - - - - - - - - -
-Exception Summary
BoilerpipeProcessingExceptionException for signaling failure in the processing pipeline.
-  - -

-

-Package de.l3s.boilerpipe Description -

- -

-

-The Boilerpipe top-level package. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/package-tree.html deleted file mode 100644 index d3f38e6..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/package-tree.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -de.l3s.boilerpipe Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

-
    -
  • java.lang.Object -
-

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/package-use.html deleted file mode 100644 index 5ff6777..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/package-use.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.extractors
BoilerpipeExtractor - -
-          Describes a complete filter pipeline.
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.english
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.heuristics
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.simple
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.sax
BoilerpipeExtractor - -
-          Describes a complete filter pipeline.
BoilerpipeInput - -
-          A source that returns TextDocuments.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html b/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html deleted file mode 100644 index f5014c5..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - -BoilerpipeHTMLContentHandler (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeHTMLContentHandler

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler
-
-
-
All Implemented Interfaces:
org.xml.sax.ContentHandler
-
-
-
-
public class BoilerpipeHTMLContentHandler
extends java.lang.Object
implements org.xml.sax.ContentHandler
- - -

-A simple SAX ContentHandler, used by BoilerpipeSAXInput. Can - be used by different parser implementations, e.g. NekoHTML and TagSoup. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
BoilerpipeHTMLContentHandler() - -
-          Constructs a BoilerpipeHTMLContentHandler using the - DefaultTagActionMap.
BoilerpipeHTMLContentHandler(TagActionMap tagActions) - -
-          Constructs a BoilerpipeHTMLContentHandler using the given - TagActionMap.
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  voidaddTextBlock(TextBlock tb) - -
-           
- voidaddWhitespaceIfNecessary() - -
-           
- voidcharacters(char[] ch, - int start, - int length) - -
-           
- voidendDocument() - -
-           
- voidendElement(java.lang.String uri, - java.lang.String localName, - java.lang.String qName) - -
-           
- voidendPrefixMapping(java.lang.String prefix) - -
-           
- java.lang.StringgetTitle() - -
-           
- voidignorableWhitespace(char[] ch, - int start, - int length) - -
-           
- voidprocessingInstruction(java.lang.String target, - java.lang.String data) - -
-           
- voidrecycle() - -
-          Recycles this instance.
- voidsetDocumentLocator(org.xml.sax.Locator locator) - -
-           
- voidsetTitle(java.lang.String s) - -
-           
- voidskippedEntity(java.lang.String name) - -
-           
- voidstartDocument() - -
-           
- voidstartElement(java.lang.String uri, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- voidstartPrefixMapping(java.lang.String prefix, - java.lang.String uri) - -
-           
- TextDocumenttoTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlock - s.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeHTMLContentHandler

-
-public BoilerpipeHTMLContentHandler()
-
-
Constructs a BoilerpipeHTMLContentHandler using the - DefaultTagActionMap. -

-

-
- -

-BoilerpipeHTMLContentHandler

-
-public BoilerpipeHTMLContentHandler(TagActionMap tagActions)
-
-
Constructs a BoilerpipeHTMLContentHandler using the given - TagActionMap. -

-

-
Parameters:
tagActions - The TagActionMap to use, e.g. - DefaultTagActionMap.
-
- - - - - - - - -
-Method Detail
- -

-recycle

-
-public void recycle()
-
-
Recycles this instance. -

-

-
-
-
-
-
-
-
- -

-endDocument

-
-public void endDocument()
-                 throws org.xml.sax.SAXException
-
-
-
Specified by:
endDocument in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-endPrefixMapping

-
-public void endPrefixMapping(java.lang.String prefix)
-                      throws org.xml.sax.SAXException
-
-
-
Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-ignorableWhitespace

-
-public void ignorableWhitespace(char[] ch,
-                                int start,
-                                int length)
-                         throws org.xml.sax.SAXException
-
-
-
Specified by:
ignorableWhitespace in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-processingInstruction

-
-public void processingInstruction(java.lang.String target,
-                                  java.lang.String data)
-                           throws org.xml.sax.SAXException
-
-
-
Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-setDocumentLocator

-
-public void setDocumentLocator(org.xml.sax.Locator locator)
-
-
-
Specified by:
setDocumentLocator in interface org.xml.sax.ContentHandler
-
-
-
-
-
-
- -

-skippedEntity

-
-public void skippedEntity(java.lang.String name)
-                   throws org.xml.sax.SAXException
-
-
-
Specified by:
skippedEntity in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startDocument

-
-public void startDocument()
-                   throws org.xml.sax.SAXException
-
-
-
Specified by:
startDocument in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startPrefixMapping

-
-public void startPrefixMapping(java.lang.String prefix,
-                               java.lang.String uri)
-                        throws org.xml.sax.SAXException
-
-
-
Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startElement

-
-public void startElement(java.lang.String uri,
-                         java.lang.String localName,
-                         java.lang.String qName,
-                         org.xml.sax.Attributes atts)
-                  throws org.xml.sax.SAXException
-
-
-
Specified by:
startElement in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-endElement

-
-public void endElement(java.lang.String uri,
-                       java.lang.String localName,
-                       java.lang.String qName)
-                throws org.xml.sax.SAXException
-
-
-
Specified by:
endElement in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-characters

-
-public void characters(char[] ch,
-                       int start,
-                       int length)
-                throws org.xml.sax.SAXException
-
-
-
Specified by:
characters in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-addTextBlock

-
-protected void addTextBlock(TextBlock tb)
-
-
-
-
-
-
-
-
-
- -

-getTitle

-
-public java.lang.String getTitle()
-
-
-
-
-
-
-
-
-
- -

-setTitle

-
-public void setTitle(java.lang.String s)
-
-
-
-
-
-
-
-
-
- -

-toTextDocument

-
-public TextDocument toTextDocument()
-
-
Returns a TextDocument containing the extracted TextBlock - s. NOTE: Only call this after parsing. -

-

-
-
-
- -
Returns:
The TextDocument
-
-
-
- -

-addWhitespaceIfNecessary

-
-public void addWhitespaceIfNecessary()
-
-
-
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html b/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html deleted file mode 100644 index a5e6bf9..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - -BoilerpipeHTMLParser (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeHTMLParser

-
-java.lang.Object
-  extended by org.apache.xerces.parsers.XMLParser
-      extended by org.apache.xerces.parsers.AbstractXMLDocumentParser
-          extended by org.apache.xerces.parsers.AbstractSAXParser
-              extended by de.l3s.boilerpipe.sax.BoilerpipeHTMLParser
-
-
-
All Implemented Interfaces:
org.apache.xerces.xni.XMLDocumentHandler, org.apache.xerces.xni.XMLDTDContentModelHandler, org.apache.xerces.xni.XMLDTDHandler, org.apache.xerces.xs.PSVIProvider, org.xml.sax.Parser, org.xml.sax.XMLReader
-
-
-
-
public class BoilerpipeHTMLParser
extends org.apache.xerces.parsers.AbstractSAXParser
- - -

-A simple SAX Parser, used by BoilerpipeSAXInput. The parser uses CyberNeko to parse HTML content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - -
-Nested Class Summary
- - - - - - - -
Nested classes/interfaces inherited from class org.apache.xerces.parsers.AbstractSAXParser
org.apache.xerces.parsers.AbstractSAXParser.AttributesProxy, org.apache.xerces.parsers.AbstractSAXParser.LocatorProxy
-  - - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.AbstractSAXParser
ALLOW_UE_AND_NOTATION_EVENTS, DECLARATION_HANDLER, DOM_NODE, fContentHandler, fDeclaredAttrs, fDeclHandler, fDocumentHandler, fDTDHandler, fLexicalHandler, fLexicalHandlerParameterEntities, fNamespaceContext, fNamespacePrefixes, fNamespaces, fParseInProgress, fQName, fResolveDTDURIs, fStandalone, fUseEntityResolver2, fVersion, fXMLNSURIs, LEXICAL_HANDLER, NAMESPACES, STRING_INTERNING
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.AbstractXMLDocumentParser
fDocumentSource, fDTDContentModelSource, fDTDSource, fInDTD
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.XMLParser
ENTITY_RESOLVER, ERROR_HANDLER, fConfiguration
- - - - - - - -
Fields inherited from interface org.apache.xerces.xni.XMLDTDHandler
CONDITIONAL_IGNORE, CONDITIONAL_INCLUDE
- - - - - - - -
Fields inherited from interface org.apache.xerces.xni.XMLDTDContentModelHandler
OCCURS_ONE_OR_MORE, OCCURS_ZERO_OR_MORE, OCCURS_ZERO_OR_ONE, SEPARATOR_CHOICE, SEPARATOR_SEQUENCE
-  - - - - - - - - - - - - - -
-Constructor Summary
BoilerpipeHTMLParser() - -
-          Constructs a BoilerpipeHTMLParser using a default HTML content handler.
BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler contentHandler) - -
-          Constructs a BoilerpipeHTMLParser using the given BoilerpipeHTMLContentHandler.
-  - - - - - - - - - - - -
-Method Summary
- TextDocumenttoTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlock - s.
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.AbstractSAXParser
attributeDecl, characters, comment, doctypeDecl, elementDecl, endCDATA, endDocument, endDTD, endElement, endExternalSubset, endGeneralEntity, endNamespaceMapping, endParameterEntity, externalEntityDecl, getAttributePSVI, getAttributePSVIByName, getContentHandler, getDeclHandler, getDTDHandler, getElementPSVI, getEntityResolver, getErrorHandler, getFeature, getLexicalHandler, getProperty, ignorableWhitespace, internalEntityDecl, notationDecl, parse, parse, processingInstruction, reset, setContentHandler, setDeclHandler, setDocumentHandler, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setLexicalHandler, setLocale, setProperty, startCDATA, startDocument, startElement, startExternalSubset, startGeneralEntity, startNamespaceMapping, startParameterEntity, unparsedEntityDecl, xmlDecl
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.AbstractXMLDocumentParser
any, element, empty, emptyElement, endAttlist, endConditional, endContentModel, endGroup, getDocumentSource, getDTDContentModelSource, getDTDSource, ignoredCharacters, occurrence, pcdata, separator, setDocumentSource, setDTDContentModelSource, setDTDSource, startAttlist, startConditional, startContentModel, startDTD, startGroup, textDecl
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.XMLParser
parse
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeHTMLParser

-
-public BoilerpipeHTMLParser()
-
-
Constructs a BoilerpipeHTMLParser using a default HTML content handler. -

-

-
- -

-BoilerpipeHTMLParser

-
-public BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler contentHandler)
-
-
Constructs a BoilerpipeHTMLParser using the given BoilerpipeHTMLContentHandler. -

-

-
Parameters:
contentHandler -
-
- - - - - - - - -
-Method Detail
- -

-toTextDocument

-
-public TextDocument toTextDocument()
-
-
Returns a TextDocument containing the extracted TextBlock - s. NOTE: Only call this after AbstractSAXParser.parse(org.xml.sax.InputSource). -

-

- -
Returns:
The TextDocument
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html b/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html deleted file mode 100644 index 9088ed7..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -BoilerpipeSAXInput (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeSAXInput

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.BoilerpipeSAXInput
-
-
-
All Implemented Interfaces:
BoilerpipeInput
-
-
-
-
public final class BoilerpipeSAXInput
extends java.lang.Object
implements BoilerpipeInput
- - -

-Parses an InputSource using SAX and returns a TextDocument. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
BoilerpipeSAXInput(org.xml.sax.InputSource is) - -
-          Creates a new instance of BoilerpipeSAXInput for the given InputSource.
-  - - - - - - - - - - - - - - - -
-Method Summary
- TextDocumentgetTextDocument() - -
-          Retrieves the TextDocument using a default HTML parser.
- TextDocumentgetTextDocument(BoilerpipeHTMLParser parser) - -
-          Retrieves the TextDocument using the given HTML parser.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeSAXInput

-
-public BoilerpipeSAXInput(org.xml.sax.InputSource is)
-                   throws org.xml.sax.SAXException
-
-
Creates a new instance of BoilerpipeSAXInput for the given InputSource. -

-

-
Parameters:
is - -
Throws: -
org.xml.sax.SAXException
-
- - - - - - - - -
-Method Detail
- -

-getTextDocument

-
-public TextDocument getTextDocument()
-                             throws BoilerpipeProcessingException
-
-
Retrieves the TextDocument using a default HTML parser. -

-

-
Specified by:
getTextDocument in interface BoilerpipeInput
-
-
- -
Returns:
A TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getTextDocument

-
-public TextDocument getTextDocument(BoilerpipeHTMLParser parser)
-                             throws BoilerpipeProcessingException
-
-
Retrieves the TextDocument using the given HTML parser. -

-

-
-
-
-
Parameters:
parser - The parser used to transform the input into boilerpipe's internal representation. -
Returns:
The retrieved TextDocument -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.BlockTagLabelAction.html b/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.BlockTagLabelAction.html deleted file mode 100644 index e095801..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.BlockTagLabelAction.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - -CommonTagActions.BlockTagLabelAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class CommonTagActions.BlockTagLabelAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction
-
-
-
All Implemented Interfaces:
TagAction
-
-
-
Enclosing class:
CommonTagActions
-
-
-
-
public static final class CommonTagActions.BlockTagLabelAction
extends java.lang.Object
implements TagAction
- - -

-CommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock. -

- -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CommonTagActions.BlockTagLabelAction(LabelAction action) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CommonTagActions.BlockTagLabelAction

-
-public CommonTagActions.BlockTagLabelAction(LabelAction action)
-
-
- - - - - - - - -
-Method Detail
- -

-start

-
-public boolean start(BoilerpipeHTMLContentHandler instance,
-                     java.lang.String localName,
-                     java.lang.String qName,
-                     org.xml.sax.Attributes atts)
-
-
-
Specified by:
start in interface TagAction
-
-
-
-
-
-
- -

-end

-
-public boolean end(BoilerpipeHTMLContentHandler instance,
-                   java.lang.String localName,
-                   java.lang.String qName)
-
-
-
Specified by:
end in interface TagAction
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.Chained.html b/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.Chained.html deleted file mode 100644 index e2137c2..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.Chained.html +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - -CommonTagActions.Chained (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class CommonTagActions.Chained

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.CommonTagActions.Chained
-
-
-
All Implemented Interfaces:
TagAction
-
-
-
Enclosing class:
CommonTagActions
-
-
-
-
public static final class CommonTagActions.Chained
extends java.lang.Object
implements TagAction
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CommonTagActions.Chained(TagAction t1, - TagAction t2) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CommonTagActions.Chained

-
-public CommonTagActions.Chained(TagAction t1,
-                                TagAction t2)
-
-
- - - - - - - - -
-Method Detail
- -

-start

-
-public boolean start(BoilerpipeHTMLContentHandler instance,
-                     java.lang.String localName,
-                     java.lang.String qName,
-                     org.xml.sax.Attributes atts)
-              throws org.xml.sax.SAXException
-
-
-
Specified by:
start in interface TagAction
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-end

-
-public boolean end(BoilerpipeHTMLContentHandler instance,
-                   java.lang.String localName,
-                   java.lang.String qName)
-            throws org.xml.sax.SAXException
-
-
-
Specified by:
end in interface TagAction
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.InlineTagLabelAction.html b/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.InlineTagLabelAction.html deleted file mode 100644 index cbad75a..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.InlineTagLabelAction.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - -CommonTagActions.InlineTagLabelAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class CommonTagActions.InlineTagLabelAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction
-
-
-
All Implemented Interfaces:
TagAction
-
-
-
Enclosing class:
CommonTagActions
-
-
-
-
public static final class CommonTagActions.InlineTagLabelAction
extends java.lang.Object
implements TagAction
- - -

-CommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock. -

- -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CommonTagActions.InlineTagLabelAction(LabelAction action) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CommonTagActions.InlineTagLabelAction

-
-public CommonTagActions.InlineTagLabelAction(LabelAction action)
-
-
- - - - - - - - -
-Method Detail
- -

-start

-
-public boolean start(BoilerpipeHTMLContentHandler instance,
-                     java.lang.String localName,
-                     java.lang.String qName,
-                     org.xml.sax.Attributes atts)
-
-
-
Specified by:
start in interface TagAction
-
-
-
-
-
-
- -

-end

-
-public boolean end(BoilerpipeHTMLContentHandler instance,
-                   java.lang.String localName,
-                   java.lang.String qName)
-
-
-
Specified by:
end in interface TagAction
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.html b/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.html deleted file mode 100644 index 1b52639..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/CommonTagActions.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - -CommonTagActions (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class CommonTagActions

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.CommonTagActions
-
-
-
-
public abstract class CommonTagActions
extends java.lang.Object
- - -

-Defines an action that is to be performed whenever a particular tag occurs during HTML parsing. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - -
-Nested Class Summary
-static classCommonTagActions.BlockTagLabelAction - -
-          CommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock.
-static classCommonTagActions.Chained - -
-           
-static classCommonTagActions.InlineTagLabelAction - -
-          CommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static TagActionTA_ANCHOR_TEXT - -
-          Marks this tag as "anchor" (this should usually only be set for the <A> tag).
-static TagActionTA_BODY - -
-          Marks this tag the body element (this should usually only be set for the <BODY> tag).
-static TagActionTA_FONT - -
-          Special TagAction for the <FONT> tag, which keeps track of the - absolute and relative font size.
-static TagActionTA_IGNORABLE_ELEMENT - -
-          Marks this tag as "ignorable", i.e. all its inner content is silently skipped.
-static TagActionTA_INLINE - -
-          Deprecated. Use TA_INLINE_WHITESPACE instead
-static TagActionTA_INLINE_NO_WHITESPACE - -
-          Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block.
-static TagActionTA_INLINE_WHITESPACE - -
-          Marks this tag a simple "inline" element, which generates whitespace, but no new block.
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-TA_IGNORABLE_ELEMENT

-
-public static final TagAction TA_IGNORABLE_ELEMENT
-
-
Marks this tag as "ignorable", i.e. all its inner content is silently skipped. -

-

-
-
-
- -

-TA_ANCHOR_TEXT

-
-public static final TagAction TA_ANCHOR_TEXT
-
-
Marks this tag as "anchor" (this should usually only be set for the <A> tag). - Anchor tags may not be nested. - - There is a bug in certain versions of NekoHTML which still allows nested tags. - If boilerpipe encounters such nestings, a SAXException is thrown. -

-

-
-
-
- -

-TA_BODY

-
-public static final TagAction TA_BODY
-
-
Marks this tag the body element (this should usually only be set for the <BODY> tag). -

-

-
-
-
- -

-TA_INLINE_WHITESPACE

-
-public static final TagAction TA_INLINE_WHITESPACE
-
-
Marks this tag a simple "inline" element, which generates whitespace, but no new block. -

-

-
-
-
- -

-TA_INLINE

-
-@Deprecated
-public static final TagAction TA_INLINE
-
-
Deprecated. Use TA_INLINE_WHITESPACE instead
-
-
-
- -

-TA_INLINE_NO_WHITESPACE

-
-public static final TagAction TA_INLINE_NO_WHITESPACE
-
-
Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block. -

-

-
-
-
- -

-TA_FONT

-
-public static final TagAction TA_FONT
-
-
Special TagAction for the <FONT> tag, which keeps track of the - absolute and relative font size. -

-

-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/DefaultTagActionMap.html b/javadoc/1.1/de/l3s/boilerpipe/sax/DefaultTagActionMap.html deleted file mode 100644 index 07d792d..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/DefaultTagActionMap.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - -DefaultTagActionMap (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class DefaultTagActionMap

-
-java.lang.Object
-  extended by java.util.AbstractMap<K,V>
-      extended by java.util.HashMap<java.lang.String,TagAction>
-          extended by de.l3s.boilerpipe.sax.TagActionMap
-              extended by de.l3s.boilerpipe.sax.DefaultTagActionMap
-
-
-
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.util.Map<java.lang.String,TagAction>
-
-
-
-
public class DefaultTagActionMap
extends TagActionMap
- - -

-Default TagActions. Seem to work well. -

- -

-

-
See Also:
TagActionMap, -Serialized Form
-
- -

- - - - - - - -
-Nested Class Summary
- - - - - - - -
Nested classes/interfaces inherited from class java.util.AbstractMap
java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>
-  - - - - - - - - - - - -
-Field Summary
-static TagActionMapINSTANCE - -
-           
-  - - - - - - - - - - - -
-Constructor Summary
-protected DefaultTagActionMap() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.sax.TagActionMap
addTagAction, setTagAction
- - - - - - - -
Methods inherited from class java.util.HashMap
clear, clone, containsKey, containsValue, entrySet, get, isEmpty, keySet, put, putAll, remove, size, values
- - - - - - - -
Methods inherited from class java.util.AbstractMap
equals, hashCode, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
- - - - - - - -
Methods inherited from interface java.util.Map
equals, hashCode
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final TagActionMap INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DefaultTagActionMap

-
-protected DefaultTagActionMap()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLDocument.html b/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLDocument.html deleted file mode 100644 index 3d011c2..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLDocument.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - -HTMLDocument (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class HTMLDocument

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.HTMLDocument
-
-
-
All Implemented Interfaces:
InputSourceable
-
-
-
-
public class HTMLDocument
extends java.lang.Object
implements InputSourceable
- - -

-An InputSourceable for HTMLFetcher. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
HTMLDocument(byte[] data, - java.nio.charset.Charset charset) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.nio.charset.CharsetgetCharset() - -
-           
- byte[]getData() - -
-           
- org.xml.sax.InputSourcetoInputSource() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-HTMLDocument

-
-public HTMLDocument(byte[] data,
-                    java.nio.charset.Charset charset)
-
-
- - - - - - - - -
-Method Detail
- -

-getCharset

-
-public java.nio.charset.Charset getCharset()
-
-
-
-
-
-
-
-
-
- -

-getData

-
-public byte[] getData()
-
-
-
-
-
-
-
-
-
- -

-toInputSource

-
-public org.xml.sax.InputSource toInputSource()
-
-
-
Specified by:
toInputSource in interface InputSourceable
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLFetcher.html b/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLFetcher.html deleted file mode 100644 index 0b66fd4..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLFetcher.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - -HTMLFetcher (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class HTMLFetcher

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.HTMLFetcher
-
-
-
-
public class HTMLFetcher
extends java.lang.Object
- - -

-A very simple HTTP/HTML fetcher, really just for demo purposes. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
-static HTMLDocumentfetch(java.net.URL url) - -
-          Fetches the document at the given URL, using URLConnection.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Method Detail
- -

-fetch

-
-public static HTMLDocument fetch(java.net.URL url)
-                          throws java.io.IOException
-
-
Fetches the document at the given URL, using URLConnection. -

-

-
Parameters:
url - -
Returns:
-
Throws: -
java.io.IOException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLHighlighter.html b/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLHighlighter.html deleted file mode 100644 index 381b0e9..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/HTMLHighlighter.html +++ /dev/null @@ -1,533 +0,0 @@ - - - - - - -HTMLHighlighter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class HTMLHighlighter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.HTMLHighlighter
-
-
-
-
public final class HTMLHighlighter
extends java.lang.Object
- - -

-Highlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetExtraStyleSheet() - -
-          Returns the extra stylesheet definition that will be inserted in the HEAD - element.
- java.lang.StringgetPostHighlight() - -
-          Returns the string that will be inserted after any highlighted HTML - block.
- java.lang.StringgetPreHighlight() - -
-          Returns the string that will be inserted before any highlighted HTML - block.
- booleanisOutputHighlightOnly() - -
-          If true, only HTML enclosed within highlighted content will be returned
-static HTMLHighlighternewExtractingInstance() - -
-          Creates a new HTMLHighlighter, which is set-up to return only the - extracted HTML text, including enclosed markup.
-static HTMLHighlighternewHighlightingInstance() - -
-          Creates a new HTMLHighlighter, which is set-up to return the full - HTML text, with the extracted text portion highlighted.
- java.lang.Stringprocess(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Processes the given TextDocument and the original HTML text (as - an InputSource).
- java.lang.Stringprocess(TextDocument doc, - java.lang.String origHTML) - -
-          Processes the given TextDocument and the original HTML text (as a - String).
- java.lang.Stringprocess(java.net.URL url, - BoilerpipeExtractor extractor) - -
-           
- voidsetExtraStyleSheet(java.lang.String extraStyleSheet) - -
-          Sets the extra stylesheet definition that will be inserted in the HEAD - element.
- voidsetOutputHighlightOnly(boolean outputHighlightOnly) - -
-          Sets whether only HTML enclosed within highlighted content will be - returned, or the whole HTML document.
- voidsetPostHighlight(java.lang.String postHighlight) - -
-          Sets the string that will be inserted after any highlighted HTML block.
- voidsetPreHighlight(java.lang.String preHighlight) - -
-          Sets the string that will be inserted prior to any highlighted HTML - block.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Method Detail
- -

-newHighlightingInstance

-
-public static HTMLHighlighter newHighlightingInstance()
-
-
Creates a new HTMLHighlighter, which is set-up to return the full - HTML text, with the extracted text portion highlighted. -

-

-
-
-
-
- -

-newExtractingInstance

-
-public static HTMLHighlighter newExtractingInstance()
-
-
Creates a new HTMLHighlighter, which is set-up to return only the - extracted HTML text, including enclosed markup. -

-

-
-
-
-
- -

-process

-
-public java.lang.String process(TextDocument doc,
-                                java.lang.String origHTML)
-                         throws BoilerpipeProcessingException
-
-
Processes the given TextDocument and the original HTML text (as a - String). -

-

-
Parameters:
doc - The processed TextDocument.
origHTML - The original HTML document. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-process

-
-public java.lang.String process(TextDocument doc,
-                                org.xml.sax.InputSource is)
-                         throws BoilerpipeProcessingException
-
-
Processes the given TextDocument and the original HTML text (as - an InputSource). -

-

-
Parameters:
doc - The processed TextDocument.
is - The original HTML document. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-process

-
-public java.lang.String process(java.net.URL url,
-                                BoilerpipeExtractor extractor)
-                         throws java.io.IOException,
-                                BoilerpipeProcessingException,
-                                org.xml.sax.SAXException
-
-
- -
Throws: -
java.io.IOException -
BoilerpipeProcessingException -
org.xml.sax.SAXException
-
-
-
- -

-isOutputHighlightOnly

-
-public boolean isOutputHighlightOnly()
-
-
If true, only HTML enclosed within highlighted content will be returned -

-

-
-
-
-
- -

-setOutputHighlightOnly

-
-public void setOutputHighlightOnly(boolean outputHighlightOnly)
-
-
Sets whether only HTML enclosed within highlighted content will be - returned, or the whole HTML document. -

-

-
-
-
-
- -

-getExtraStyleSheet

-
-public java.lang.String getExtraStyleSheet()
-
-
Returns the extra stylesheet definition that will be inserted in the HEAD - element. - - By default, this corresponds to a simple definition that marks text in - class "x-boilerpipe-mark1" as inline text with yellow background. -

-

-
-
-
-
- -

-setExtraStyleSheet

-
-public void setExtraStyleSheet(java.lang.String extraStyleSheet)
-
-
Sets the extra stylesheet definition that will be inserted in the HEAD - element. - - To disable, set it to the empty string: "" -

-

-
Parameters:
extraStyleSheet - Plain HTML
-
-
-
- -

-getPreHighlight

-
-public java.lang.String getPreHighlight()
-
-
Returns the string that will be inserted before any highlighted HTML - block. - - By default, this corresponds to - <span class=&qupt;x-boilerpipe-mark1"> -

-

-
-
-
-
- -

-setPreHighlight

-
-public void setPreHighlight(java.lang.String preHighlight)
-
-
Sets the string that will be inserted prior to any highlighted HTML - block. - - To disable, set it to the empty string: "" -

-

-
-
-
-
- -

-getPostHighlight

-
-public java.lang.String getPostHighlight()
-
-
Returns the string that will be inserted after any highlighted HTML - block. - - By default, this corresponds to </span> -

-

-
-
-
-
- -

-setPostHighlight

-
-public void setPostHighlight(java.lang.String postHighlight)
-
-
Sets the string that will be inserted after any highlighted HTML block. - - To disable, set it to the empty string: "" -

-

-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/InputSourceable.html b/javadoc/1.1/de/l3s/boilerpipe/sax/InputSourceable.html deleted file mode 100644 index c7c6416..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/InputSourceable.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - -InputSourceable (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Interface InputSourceable

-
-
All Known Implementing Classes:
HTMLDocument
-
-
-
-
public interface InputSourceable
- - -

-An InputSourceable can return an arbitrary number of new InputSources for a given document. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- org.xml.sax.InputSourcetoInputSource() - -
-           
-  -

- - - - - - - - -
-Method Detail
- -

-toInputSource

-
-org.xml.sax.InputSource toInputSource()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/TagAction.html b/javadoc/1.1/de/l3s/boilerpipe/sax/TagAction.html deleted file mode 100644 index ebbeb60..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/TagAction.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - -TagAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Interface TagAction

-
-
All Known Implementing Classes:
CommonTagActions.BlockTagLabelAction, CommonTagActions.Chained, CommonTagActions.InlineTagLabelAction
-
-
-
-
public interface TagAction
- - -

-Defines an action that is to be performed whenever a particular tag occurs - during HTML parsing. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - -
-Method Summary
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
-  -

- - - - - - - - -
-Method Detail
- -

-start

-
-boolean start(BoilerpipeHTMLContentHandler instance,
-              java.lang.String localName,
-              java.lang.String qName,
-              org.xml.sax.Attributes atts)
-              throws org.xml.sax.SAXException
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-end

-
-boolean end(BoilerpipeHTMLContentHandler instance,
-            java.lang.String localName,
-            java.lang.String qName)
-            throws org.xml.sax.SAXException
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/TagActionMap.html b/javadoc/1.1/de/l3s/boilerpipe/sax/TagActionMap.html deleted file mode 100644 index 3dbca5e..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/TagActionMap.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -TagActionMap (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class TagActionMap

-
-java.lang.Object
-  extended by java.util.AbstractMap<K,V>
-      extended by java.util.HashMap<java.lang.String,TagAction>
-          extended by de.l3s.boilerpipe.sax.TagActionMap
-
-
-
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.util.Map<java.lang.String,TagAction>
-
-
-
Direct Known Subclasses:
DefaultTagActionMap
-
-
-
-
public abstract class TagActionMap
extends java.util.HashMap<java.lang.String,TagAction>
- - -

-Base class for definition a set of TagActions that are to be used for the - HTML parsing process. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
DefaultTagActionMap, -Serialized Form
-
- -

- - - - - - - -
-Nested Class Summary
- - - - - - - -
Nested classes/interfaces inherited from class java.util.AbstractMap
java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>
-  - - - - - - - - - - - -
-Constructor Summary
TagActionMap() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-protected  voidaddTagAction(java.lang.String tag, - TagAction action) - -
-           
-protected  voidsetTagAction(java.lang.String tag, - TagAction action) - -
-           
- - - - - - - -
Methods inherited from class java.util.HashMap
clear, clone, containsKey, containsValue, entrySet, get, isEmpty, keySet, put, putAll, remove, size, values
- - - - - - - -
Methods inherited from class java.util.AbstractMap
equals, hashCode, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
- - - - - - - -
Methods inherited from interface java.util.Map
equals, hashCode
-  -

- - - - - - - - -
-Constructor Detail
- -

-TagActionMap

-
-public TagActionMap()
-
-
- - - - - - - - -
-Method Detail
- -

-setTagAction

-
-protected void setTagAction(java.lang.String tag,
-                            TagAction action)
-
-
-
-
-
-
- -

-addTagAction

-
-protected void addTagAction(java.lang.String tag,
-                            TagAction action)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html deleted file mode 100644 index 0427d02..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler

-
- - - - - - - - - -
-Packages that use BoilerpipeHTMLContentHandler
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeHTMLContentHandler in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type BoilerpipeHTMLContentHandler
- booleanTagAction.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanCommonTagActions.Chained.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanCommonTagActions.InlineTagLabelAction.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanCommonTagActions.BlockTagLabelAction.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanTagAction.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- booleanCommonTagActions.Chained.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- booleanCommonTagActions.InlineTagLabelAction.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- booleanCommonTagActions.BlockTagLabelAction.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type BoilerpipeHTMLContentHandler
BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler contentHandler) - -
-          Constructs a BoilerpipeHTMLParser using the given BoilerpipeHTMLContentHandler.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html deleted file mode 100644 index 893f0e5..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeHTMLParser

-
- - - - - - - - - -
-Packages that use BoilerpipeHTMLParser
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeHTMLParser in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type BoilerpipeHTMLParser
- TextDocumentBoilerpipeSAXInput.getTextDocument(BoilerpipeHTMLParser parser) - -
-          Retrieves the TextDocument using the given HTML parser.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html deleted file mode 100644 index 4aee8a7..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeSAXInput (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeSAXInput

-
-No usage of de.l3s.boilerpipe.sax.BoilerpipeSAXInput -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.BlockTagLabelAction.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.BlockTagLabelAction.html deleted file mode 100644 index 96b51f1..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.BlockTagLabelAction.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction

-
-No usage of de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.Chained.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.Chained.html deleted file mode 100644 index 31ae872..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.Chained.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.CommonTagActions.Chained (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.CommonTagActions.Chained

-
-No usage of de.l3s.boilerpipe.sax.CommonTagActions.Chained -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.InlineTagLabelAction.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.InlineTagLabelAction.html deleted file mode 100644 index 5d8f6fe..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.InlineTagLabelAction.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction

-
-No usage of de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.html deleted file mode 100644 index 18f0194..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/CommonTagActions.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.CommonTagActions (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.CommonTagActions

-
-No usage of de.l3s.boilerpipe.sax.CommonTagActions -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/DefaultTagActionMap.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/DefaultTagActionMap.html deleted file mode 100644 index 829663e..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/DefaultTagActionMap.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.DefaultTagActionMap (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.DefaultTagActionMap

-
-No usage of de.l3s.boilerpipe.sax.DefaultTagActionMap -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLDocument.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLDocument.html deleted file mode 100644 index ea2d539..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLDocument.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.HTMLDocument (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.HTMLDocument

-
- - - - - - - - - -
-Packages that use HTMLDocument
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of HTMLDocument in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that return HTMLDocument
-static HTMLDocumentHTMLFetcher.fetch(java.net.URL url) - -
-          Fetches the document at the given URL, using URLConnection.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLFetcher.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLFetcher.html deleted file mode 100644 index 7788871..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLFetcher.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.HTMLFetcher (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.HTMLFetcher

-
-No usage of de.l3s.boilerpipe.sax.HTMLFetcher -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html deleted file mode 100644 index 8cad5b9..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.HTMLHighlighter (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.HTMLHighlighter

-
- - - - - - - - - -
-Packages that use HTMLHighlighter
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of HTMLHighlighter in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that return HTMLHighlighter
-static HTMLHighlighterHTMLHighlighter.newExtractingInstance() - -
-          Creates a new HTMLHighlighter, which is set-up to return only the - extracted HTML text, including enclosed markup.
-static HTMLHighlighterHTMLHighlighter.newHighlightingInstance() - -
-          Creates a new HTMLHighlighter, which is set-up to return the full - HTML text, with the extracted text portion highlighted.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/InputSourceable.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/InputSourceable.html deleted file mode 100644 index 06d185b..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/InputSourceable.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.sax.InputSourceable (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.sax.InputSourceable

-
- - - - - - - - - -
-Packages that use InputSourceable
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of InputSourceable in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Classes in de.l3s.boilerpipe.sax that implement InputSourceable
- classHTMLDocument - -
-          An InputSourceable for HTMLFetcher.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/TagAction.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/TagAction.html deleted file mode 100644 index aa3ec15..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/TagAction.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.sax.TagAction (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.sax.TagAction

-
- - - - - - - - - -
-Packages that use TagAction
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TagAction in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.sax that implement TagAction
-static classCommonTagActions.BlockTagLabelAction - -
-          CommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock.
-static classCommonTagActions.Chained - -
-           
-static classCommonTagActions.InlineTagLabelAction - -
-          CommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock.
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.sax declared as TagAction
-static TagActionCommonTagActions.TA_ANCHOR_TEXT - -
-          Marks this tag as "anchor" (this should usually only be set for the <A> tag).
-static TagActionCommonTagActions.TA_BODY - -
-          Marks this tag the body element (this should usually only be set for the <BODY> tag).
-static TagActionCommonTagActions.TA_FONT - -
-          Special TagAction for the <FONT> tag, which keeps track of the - absolute and relative font size.
-static TagActionCommonTagActions.TA_IGNORABLE_ELEMENT - -
-          Marks this tag as "ignorable", i.e. all its inner content is silently skipped.
-static TagActionCommonTagActions.TA_INLINE - -
-          Deprecated. Use CommonTagActions.TA_INLINE_WHITESPACE instead
-static TagActionCommonTagActions.TA_INLINE_NO_WHITESPACE - -
-          Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block.
-static TagActionCommonTagActions.TA_INLINE_WHITESPACE - -
-          Marks this tag a simple "inline" element, which generates whitespace, but no new block.
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type TagAction
-protected  voidTagActionMap.addTagAction(java.lang.String tag, - TagAction action) - -
-           
-protected  voidTagActionMap.setTagAction(java.lang.String tag, - TagAction action) - -
-           
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type TagAction
CommonTagActions.Chained(TagAction t1, - TagAction t2) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/TagActionMap.html b/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/TagActionMap.html deleted file mode 100644 index a837d9b..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/class-use/TagActionMap.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.TagActionMap (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.TagActionMap

-
- - - - - - - - - -
-Packages that use TagActionMap
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TagActionMap in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Subclasses of TagActionMap in de.l3s.boilerpipe.sax
- classDefaultTagActionMap - -
-          Default TagActions.
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.sax declared as TagActionMap
-static TagActionMapDefaultTagActionMap.INSTANCE - -
-           
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type TagActionMap
BoilerpipeHTMLContentHandler(TagActionMap tagActions) - -
-          Constructs a BoilerpipeHTMLContentHandler using the given - TagActionMap.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/sax/package-frame.html deleted file mode 100644 index 83a2f6a..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/package-frame.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.sax - - - - -
-Interfaces  - -
-InputSourceable -
-TagAction
- - - - - - -
-Classes  - -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeSAXInput -
-CommonTagActions -
-CommonTagActions.BlockTagLabelAction -
-CommonTagActions.Chained -
-CommonTagActions.InlineTagLabelAction -
-DefaultTagActionMap -
-HTMLDocument -
-HTMLFetcher -
-HTMLHighlighter -
-TagActionMap
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/sax/package-summary.html deleted file mode 100644 index 9482f24..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/package-summary.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.sax -

- -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. -

-See: -
-          Description -

- - - - - - - - - - - - - -
-Interface Summary
InputSourceableAn InputSourceable can return an arbitrary number of new InputSources for a given document.
TagActionDefines an action that is to be performed whenever a particular tag occurs - during HTML parsing.
-  - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BoilerpipeHTMLContentHandlerA simple SAX ContentHandler, used by BoilerpipeSAXInput.
BoilerpipeHTMLParserA simple SAX Parser, used by BoilerpipeSAXInput.
BoilerpipeSAXInputParses an InputSource using SAX and returns a TextDocument.
CommonTagActionsDefines an action that is to be performed whenever a particular tag occurs during HTML parsing.
CommonTagActions.BlockTagLabelActionCommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock.
CommonTagActions.Chained 
CommonTagActions.InlineTagLabelActionCommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock.
DefaultTagActionMapDefault TagActions.
HTMLDocumentAn InputSourceable for HTMLFetcher.
HTMLFetcherA very simple HTTP/HTML fetcher, really just for demo purposes.
HTMLHighlighterHighlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument.
TagActionMapBase class for definition a set of TagActions that are to be used for the - HTML parsing process.
-  - -

-

-Package de.l3s.boilerpipe.sax Description -

- -

-

-Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/sax/package-tree.html deleted file mode 100644 index 65ac0c9..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/package-tree.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.sax -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/sax/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/sax/package-use.html deleted file mode 100644 index dbc7670..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/sax/package-use.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.sax (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.sax

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.sax
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.sax used by de.l3s.boilerpipe.sax
BoilerpipeHTMLContentHandler - -
-          A simple SAX ContentHandler, used by BoilerpipeSAXInput.
BoilerpipeHTMLParser - -
-          A simple SAX Parser, used by BoilerpipeSAXInput.
HTMLDocument - -
-          An InputSourceable for HTMLFetcher.
HTMLHighlighter - -
-          Highlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument.
InputSourceable - -
-          An InputSourceable can return an arbitrary number of new InputSources for a given document.
TagAction - -
-          Defines an action that is to be performed whenever a particular tag occurs - during HTML parsing.
TagActionMap - -
-          Base class for definition a set of TagActions that are to be used for the - HTML parsing process.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/util/UnicodeTokenizer.html b/javadoc/1.1/de/l3s/boilerpipe/util/UnicodeTokenizer.html deleted file mode 100644 index 3c09d28..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/util/UnicodeTokenizer.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - -UnicodeTokenizer (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.util -
-Class UnicodeTokenizer

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.util.UnicodeTokenizer
-
-
-
-
public class UnicodeTokenizer
extends java.lang.Object
- - -

-Tokenizes text according to Unicode word boundaries and strips off non-word - characters. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
UnicodeTokenizer() - -
-           
-  - - - - - - - - - - - -
-Method Summary
-static java.lang.String[]tokenize(java.lang.CharSequence text) - -
-          Tokenizes the text and returns an array of tokens.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-UnicodeTokenizer

-
-public UnicodeTokenizer()
-
-
- - - - - - - - -
-Method Detail
- -

-tokenize

-
-public static java.lang.String[] tokenize(java.lang.CharSequence text)
-
-
Tokenizes the text and returns an array of tokens. -

-

-
Parameters:
text - The text -
Returns:
The tokens
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html b/javadoc/1.1/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html deleted file mode 100644 index 2563111..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.util.UnicodeTokenizer (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.util.UnicodeTokenizer

-
-No usage of de.l3s.boilerpipe.util.UnicodeTokenizer -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/util/package-frame.html b/javadoc/1.1/de/l3s/boilerpipe/util/package-frame.html deleted file mode 100644 index 73a626d..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/util/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util (1.1 API) - - - - - - - - - -de.l3s.boilerpipe.util - - - - -
-Classes  - -
-UnicodeTokenizer
- - - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/util/package-summary.html b/javadoc/1.1/de/l3s/boilerpipe/util/package-summary.html deleted file mode 100644 index abdf370..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/util/package-summary.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.util -

- -Some helper classes. -

-See: -
-          Description -

- - - - - - - - - -
-Class Summary
UnicodeTokenizerTokenizes text according to Unicode word boundaries and strips off non-word - characters.
-  - -

-

-Package de.l3s.boilerpipe.util Description -

- -

-

-Some helper classes. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/util/package-tree.html b/javadoc/1.1/de/l3s/boilerpipe/util/package-tree.html deleted file mode 100644 index 0bd57e6..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/util/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.util -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/de/l3s/boilerpipe/util/package-use.html b/javadoc/1.1/de/l3s/boilerpipe/util/package-use.html deleted file mode 100644 index 6f10f5b..0000000 --- a/javadoc/1.1/de/l3s/boilerpipe/util/package-use.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.util (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.util

-
-No usage of de.l3s.boilerpipe.util -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/deprecated-list.html b/javadoc/1.1/deprecated-list.html deleted file mode 100644 index d704ccd..0000000 --- a/javadoc/1.1/deprecated-list.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -Deprecated List (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Deprecated API

-
-
-Contents - - - - - - - - - -
-Deprecated Fields
de.l3s.boilerpipe.sax.CommonTagActions.TA_INLINE -
-          Use CommonTagActions.TA_INLINE_WHITESPACE instead 
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/help-doc.html b/javadoc/1.1/help-doc.html deleted file mode 100644 index 3b0a585..0000000 --- a/javadoc/1.1/help-doc.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -API Help (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-How This API Document Is Organized

-
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

-Overview

-
- -

-The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

-

-Package

-
- -

-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    -
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
-
-

-Class/Interface

-
- -

-Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    -
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description -

    -

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary -

    -

  • Field Detail
  • Constructor Detail
  • Method Detail
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
- -

-Annotation Type

-
- -

-Each annotation type has its own separate page with the following sections:

    -
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
-
- -

-Enum

-
- -

-Each enum has its own separate page with the following sections:

    -
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
-
-

-Use

-
-Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
-

-Tree (Class Hierarchy)

-
-There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    -
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
-
-

-Deprecated API

-
-The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
-

-Index

-
-The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
-

-Prev/Next

-These links take you to the next or previous class, interface, package, or related page.

-Frames/No Frames

-These links show and hide the HTML frames. All pages are available with or without frames. -

-

-Serialized Form

-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. -

-

-Constant Field Values

-The Constant Field Values page lists the static final fields and their values. -

- - -This help file applies to API documentation generated using the standard doclet. - -
-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/index-all.html b/javadoc/1.1/index-all.html deleted file mode 100644 index 1196c91..0000000 --- a/javadoc/1.1/index-all.html +++ /dev/null @@ -1,963 +0,0 @@ - - - - - - -Index (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I K L M N P R S T U
-

-A

-
-
addLabel(String) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Adds an arbitrary String label to this TextBlock. -
addLabels(Set<String>) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Adds a set of labels to this TextBlock. -
addLabels(String...) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Adds a set of labels to this TextBlock. -
addLabelsTo(TextBlock) - -Method in class de.l3s.boilerpipe.labels.LabelAction -
  -
addTagAction(String, TagAction) - -Method in class de.l3s.boilerpipe.sax.TagActionMap -
  -
addTextBlock(TextBlock) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
addTo(TextBlock) - -Method in class de.l3s.boilerpipe.labels.ConditionalLabelAction -
  -
addTo(TextBlock) - -Method in class de.l3s.boilerpipe.labels.LabelAction -
  -
addWhitespaceIfNecessary() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
ARTICLE_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Works very well for most types of Article-like HTML. -
ArticleExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which is tuned towards news articles.
ArticleExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
ArticleSentencesExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which is tuned towards extracting sentences from news articles.
ArticleSentencesExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
avgNumWords() - -Method in class de.l3s.boilerpipe.document.TextDocumentStatistics -
Returns the average number of words at block-level (= overall number of words divided by - the number of blocks). -
-
-

-B

-
-
BlockProximityFusion - Class in de.l3s.boilerpipe.filters.heuristics
Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
BlockProximityFusion(int, boolean) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
Creates a new BlockProximityFusion instance. -
BoilerpipeExtractor - Interface in de.l3s.boilerpipe
Describes a complete filter pipeline.
BoilerpipeFilter - Interface in de.l3s.boilerpipe
A generic BoilerpipeFilter.
BoilerpipeHTMLContentHandler - Class in de.l3s.boilerpipe.sax
A simple SAX ContentHandler, used by BoilerpipeSAXInput.
BoilerpipeHTMLContentHandler() - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Constructs a BoilerpipeHTMLContentHandler using the - DefaultTagActionMap. -
BoilerpipeHTMLContentHandler(TagActionMap) - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Constructs a BoilerpipeHTMLContentHandler using the given - TagActionMap. -
BoilerpipeHTMLParser - Class in de.l3s.boilerpipe.sax
A simple SAX Parser, used by BoilerpipeSAXInput.
BoilerpipeHTMLParser() - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
Constructs a BoilerpipeHTMLParser using a default HTML content handler. -
BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler) - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
Constructs a BoilerpipeHTMLParser using the given BoilerpipeHTMLContentHandler. -
BoilerpipeInput - Interface in de.l3s.boilerpipe
A source that returns TextDocuments.
BoilerpipeProcessingException - Exception in de.l3s.boilerpipe
Exception for signaling failure in the processing pipeline.
BoilerpipeProcessingException() - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(String, Throwable) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(String) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(Throwable) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeSAXInput - Class in de.l3s.boilerpipe.sax
Parses an InputSource using SAX and returns a TextDocument.
BoilerpipeSAXInput(InputSource) - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeSAXInput -
Creates a new instance of BoilerpipeSAXInput for the given InputSource. -
BoilerplateBlockFilter - Class in de.l3s.boilerpipe.filters.simple
Removes TextBlocks which have explicitly been marked as "not content".
BoilerplateBlockFilter() - -Constructor for class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
-
-

-C

-
-
CANOLA_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Trained on krdwrd Canola (different definition of "boilerplate"). -
CanolaExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor trained on krdwrd Canola - .
CanolaExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.CanolaExtractor -
  -
characters(char[], int, int) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
CLASSIFIER - -Static variable in class de.l3s.boilerpipe.extractors.CanolaExtractor -
The actual classifier, exposed. -
classify(TextBlock, TextBlock, TextBlock) - -Method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
classify(TextBlock, TextBlock, TextBlock) - -Method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
clone() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
CommonExtractors - Class in de.l3s.boilerpipe.extractors
Provides quick access to common BoilerpipeExtractors.
CommonTagActions - Class in de.l3s.boilerpipe.sax
Defines an action that is to be performed whenever a particular tag occurs during HTML parsing.
CommonTagActions.BlockTagLabelAction - Class in de.l3s.boilerpipe.sax
CommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock.
CommonTagActions.BlockTagLabelAction(LabelAction) - -Constructor for class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -
  -
CommonTagActions.Chained - Class in de.l3s.boilerpipe.sax
 
CommonTagActions.Chained(TagAction, TagAction) - -Constructor for class de.l3s.boilerpipe.sax.CommonTagActions.Chained -
  -
CommonTagActions.InlineTagLabelAction - Class in de.l3s.boilerpipe.sax
CommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock.
CommonTagActions.InlineTagLabelAction(LabelAction) - -Constructor for class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -
  -
ConditionalLabelAction - Class in de.l3s.boilerpipe.labels
Adds labels to a TextBlock if the given criteria are met.
ConditionalLabelAction(TextBlockCondition, String...) - -Constructor for class de.l3s.boilerpipe.labels.ConditionalLabelAction -
  -
-
-

-D

-
-
de.l3s.boilerpipe - package de.l3s.boilerpipe
-The Boilerpipe top-level package.
de.l3s.boilerpipe.conditions - package de.l3s.boilerpipe.conditions
 
de.l3s.boilerpipe.document - package de.l3s.boilerpipe.document
-The classes in this package represent the simple Boilerpipe document model.
de.l3s.boilerpipe.estimators - package de.l3s.boilerpipe.estimators
 
de.l3s.boilerpipe.extractors - package de.l3s.boilerpipe.extractors
-This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -
de.l3s.boilerpipe.filters.english - package de.l3s.boilerpipe.filters.english
-The BoilerpipeFilters in this package have only been tested on English text.
de.l3s.boilerpipe.filters.heuristics - package de.l3s.boilerpipe.filters.heuristics
-The BoilerpipeFilters in this package are pure heuristics.
de.l3s.boilerpipe.filters.simple - package de.l3s.boilerpipe.filters.simple
-The BoilerpipeFilters in this package are straight-forward and probably not really specific to English.
de.l3s.boilerpipe.labels - package de.l3s.boilerpipe.labels
 
de.l3s.boilerpipe.sax - package de.l3s.boilerpipe.sax
-Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments.
de.l3s.boilerpipe.util - package de.l3s.boilerpipe.util
-Some helper classes.
debugString() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns detailed debugging information about the contained TextBlocks. -
DEFAULT_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Usually worse than ArticleExtractor, but simpler/no heuristics. -
DEFAULT_INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
DEFAULT_INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
DefaultExtractor - Class in de.l3s.boilerpipe.extractors
A quite generic full-text extractor.
DefaultExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
DefaultLabels - Class in de.l3s.boilerpipe.labels
Some pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String).
DefaultLabels() - -Constructor for class de.l3s.boilerpipe.labels.DefaultLabels -
  -
DefaultTagActionMap - Class in de.l3s.boilerpipe.sax
Default TagActions.
DefaultTagActionMap() - -Constructor for class de.l3s.boilerpipe.sax.DefaultTagActionMap -
  -
DensityRulesClassifier - Class in de.l3s.boilerpipe.filters.english
Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
DensityRulesClassifier() - -Constructor for class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
DocumentTitleMatchClassifier - Class in de.l3s.boilerpipe.filters.heuristics
Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
DocumentTitleMatchClassifier(String) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -
  -
-
-

-E

-
-
EMPTY_END - -Static variable in class de.l3s.boilerpipe.document.TextBlock -
  -
EMPTY_START - -Static variable in class de.l3s.boilerpipe.document.TextBlock -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.Chained -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in interface de.l3s.boilerpipe.sax.TagAction -
  -
endDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
endElement(String, String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
endPrefixMapping(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
ExpandTitleToContentFilter - Class in de.l3s.boilerpipe.filters.heuristics
Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT.
ExpandTitleToContentFilter() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
ExtractorBase - Class in de.l3s.boilerpipe.extractors
The base class of Extractors.
ExtractorBase() - -Constructor for class de.l3s.boilerpipe.extractors.ExtractorBase -
  -
-
-

-F

-
-
fetch(URL) - -Static method in class de.l3s.boilerpipe.sax.HTMLFetcher -
Fetches the document at the given URL, using URLConnection. -
-
-

-G

-
-
getCharset() - -Method in class de.l3s.boilerpipe.sax.HTMLDocument -
  -
getContainedTextElements() - -Method in class de.l3s.boilerpipe.document.TextBlock -
Returns the containedTextElements BitSet, or null. -
getContent() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextDocument's content. -
getData() - -Method in class de.l3s.boilerpipe.sax.HTMLDocument -
  -
getDefaultInstance() - -Static method in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
Returns the singleton instance for DeleteBlocksAfterContentFilter. -
getDefaultInstance() - -Static method in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
getExtraStyleSheet() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Returns the extra stylesheet definition that will be inserted in the HEAD - element. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.ArticleExtractor -
Returns the singleton instance for ArticleExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
Returns the singleton instance for ArticleSentencesExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.CanolaExtractor -
Returns the singleton instance for CanolaExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.DefaultExtractor -
Returns the singleton instance for DefaultExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
Returns the singleton instance for LargestContentExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
Returns the singleton instance for NumWordsRulesExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
Returns the singleton instance for RulebasedBoilerpipeClassifier. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
Returns the singleton instance for RulebasedBoilerpipeClassifier. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
Returns the singleton instance for TerminatingBlocksFinder. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
Returns the singleton instance for ExpandTitleToContentFilter. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
Returns the singleton instance for BlockFusionProcessor. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
Returns the singleton instance for BoilerplateBlockFilter. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
Returns the singleton instance for TerminatingBlocksFinder. -
getLabels() - -Method in class de.l3s.boilerpipe.document.TextBlock -
Returns the labels associated to this TextBlock, or null if no such labels - exist. -
getLinkDensity() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getNumWords() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getNumWords() - -Method in class de.l3s.boilerpipe.document.TextDocumentStatistics -
Returns the overall number of words in all blocks. -
getNumWordsInAnchorText() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getOffsetBlocksEnd() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getOffsetBlocksStart() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getPostHighlight() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Returns the string that will be inserted after any highlighted HTML - block. -
getPreHighlight() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Returns the string that will be inserted before any highlighted HTML - block. -
getText(String) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code given as a String. -
getText(InputSource) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code available from the given - InputSource. -
getText(Reader) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code available from the given Reader. -
getText(TextDocument) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the given TextDocument object. -
getText() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getText(boolean, boolean) - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextDocument's content, non-content or both -
getText(String) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code given as a String. -
getText(InputSource) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given InputSource. -
getText(URL) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given URL. -
getText(Reader) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given Reader. -
getText(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the given TextDocument object. -
getTextBlocks() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextBlocks of this document. -
getTextDensity() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getTextDocument() - -Method in interface de.l3s.boilerpipe.BoilerpipeInput -
Returns (somehow) a TextDocument. -
getTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeSAXInput -
Retrieves the TextDocument using a default HTML parser. -
getTextDocument(BoilerpipeHTMLParser) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeSAXInput -
Retrieves the TextDocument using the given HTML parser. -
getTitle() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the "main" title for this document, or null if no - such title has ben set. -
getTitle() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-H

-
-
hasLabel(String) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Checks whether this TextBlock has the given label. -
HTMLDocument - Class in de.l3s.boilerpipe.sax
An InputSourceable for HTMLFetcher.
HTMLDocument(byte[], Charset) - -Constructor for class de.l3s.boilerpipe.sax.HTMLDocument -
  -
HTMLFetcher - Class in de.l3s.boilerpipe.sax
A very simple HTTP/HTML fetcher, really just for demo purposes.
HTMLHighlighter - Class in de.l3s.boilerpipe.sax
Highlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument.
-
-

-I

-
-
ignorableWhitespace(char[], int, int) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
IgnoreBlocksAfterContentFilter - Class in de.l3s.boilerpipe.filters.english
Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT.
IgnoreBlocksAfterContentFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
INDICATES_END_OF_TEXT - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
InputSourceable - Interface in de.l3s.boilerpipe.sax
An InputSourceable can return an arbitrary number of new InputSources for a given document.
INSTANCE - -Static variable in class de.l3s.boilerpipe.estimators.SimpleEstimator -
Returns the singleton instance of SimpleEstimator -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.CanolaExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.KeepEverythingExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.InvertedFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.sax.DefaultTagActionMap -
  -
InvertedFilter - Class in de.l3s.boilerpipe.filters.simple
Reverts the "isContent" flag for all TextBlocks
isContent() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
isLowQuality(TextDocumentStatistics, TextDocumentStatistics) - -Method in class de.l3s.boilerpipe.estimators.SimpleEstimator -
Given the statistics of the document before and after applying the BoilerpipeExtractor, - can we regard the extraction quality (too) low? -
isOutputHighlightOnly() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
If true, only HTML enclosed within highlighted content will be returned -
-
-

-K

-
-
KEEP_EVERYTHING_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Dummy Extractor; should return the input text. -
KeepEverythingExtractor - Class in de.l3s.boilerpipe.extractors
Marks everything as content.
KeepEverythingWithMinKWordsExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which extracts the largest text component of a page.
KeepEverythingWithMinKWordsExtractor(int) - -Constructor for class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -
  -
KeepLargestBlockFilter - Class in de.l3s.boilerpipe.filters.heuristics
Keeps the largest TextBlock only (by the number of words).
KeepLargestBlockFilter() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
KeepLargestFulltextBlockFilter - Class in de.l3s.boilerpipe.filters.english
Keeps the largest TextBlock only (by the number of words).
KeepLargestFulltextBlockFilter() - -Constructor for class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
-
-

-L

-
-
LabelAction - Class in de.l3s.boilerpipe.labels
Helps adding labels to TextBlocks.
LabelAction(String...) - -Constructor for class de.l3s.boilerpipe.labels.LabelAction -
  -
labels - -Variable in class de.l3s.boilerpipe.labels.LabelAction -
  -
LabelToBoilerplateFilter - Class in de.l3s.boilerpipe.filters.simple
Marks all blocks that contain a given label as "boilerplate".
LabelToBoilerplateFilter(String...) - -Constructor for class de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter -
  -
LabelToContentFilter - Class in de.l3s.boilerpipe.filters.simple
Marks all blocks that contain a given label as "content".
LabelToContentFilter(String...) - -Constructor for class de.l3s.boilerpipe.filters.simple.LabelToContentFilter -
  -
LargestContentExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which extracts the largest text component of a page.
-
-

-M

-
-
MarkEverythingContentFilter - Class in de.l3s.boilerpipe.filters.simple
Marks all blocks as content.
MAX_DISTANCE_1 - -Static variable in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
MAX_DISTANCE_1_CONTENT_ONLY - -Static variable in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
meetsCondition(TextBlock) - -Method in interface de.l3s.boilerpipe.conditions.TextBlockCondition -
Returns true iff the given TextBlock tb meets the defined condition. -
mergeNext(TextBlock) - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
MIGHT_BE_CONTENT - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
MinClauseWordsFilter - Class in de.l3s.boilerpipe.filters.simple
Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
MinClauseWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
MinClauseWordsFilter(int, boolean) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
MinFulltextWordsFilter - Class in de.l3s.boilerpipe.filters.english
Keeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default.
MinFulltextWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
MinWordsFilter - Class in de.l3s.boilerpipe.filters.simple
Keeps only those content blocks which contain at least k words.
MinWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinWordsFilter -
  -
-
-

-N

-
-
newExtractingInstance() - -Static method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Creates a new HTMLHighlighter, which is set-up to return only the - extracted HTML text, including enclosed markup. -
newHighlightingInstance() - -Static method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Creates a new HTMLHighlighter, which is set-up to return the full - HTML text, with the extracted text portion highlighted. -
NumWordsRulesClassifier - Class in de.l3s.boilerpipe.filters.english
Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
NumWordsRulesClassifier() - -Constructor for class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
NumWordsRulesExtractor - Class in de.l3s.boilerpipe.extractors
A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
NumWordsRulesExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
-
-

-P

-
-
process(TextDocument) - -Method in interface de.l3s.boilerpipe.BoilerpipeFilter -
Processes the given document doc. -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.CanolaExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.KeepEverythingExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.InvertedFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.LabelToContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MinWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
process(TextDocument, String) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Processes the given TextDocument and the original HTML text (as a - String). -
process(TextDocument, InputSource) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Processes the given TextDocument and the original HTML text (as - an InputSource). -
process(URL, BoilerpipeExtractor) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
  -
processingInstruction(String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-R

-
-
recycle() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Recycles this instance. -
-
-

-S

-
-
setDocumentLocator(Locator) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
setExtraStyleSheet(String) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Sets the extra stylesheet definition that will be inserted in the HEAD - element. -
setIsContent(boolean) - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
setOutputHighlightOnly(boolean) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Sets whether only HTML enclosed within highlighted content will be - returned, or the whole HTML document. -
setPostHighlight(String) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Sets the string that will be inserted after any highlighted HTML block. -
setPreHighlight(String) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Sets the string that will be inserted prior to any highlighted HTML - block. -
setTagAction(String, TagAction) - -Method in class de.l3s.boilerpipe.sax.TagActionMap -
  -
setTitle(String) - -Method in class de.l3s.boilerpipe.document.TextDocument -
Updates the "main" title for this document. -
setTitle(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
SimpleBlockFusionProcessor - Class in de.l3s.boilerpipe.filters.heuristics
Merges two subsequent blocks if their text densities are equal.
SimpleBlockFusionProcessor() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
SimpleEstimator - Class in de.l3s.boilerpipe.estimators
Estimates the "goodness" of a BoilerpipeExtractor on a given document.
skippedEntity(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
SplitParagraphBlocksFilter - Class in de.l3s.boilerpipe.filters.simple
Splits TextBlocks at paragraph boundaries.
SplitParagraphBlocksFilter() - -Constructor for class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.Chained -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in interface de.l3s.boilerpipe.sax.TagAction -
  -
startDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
startElement(String, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
startPrefixMapping(String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-T

-
-
TA_ANCHOR_TEXT - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag as "anchor" (this should usually only be set for the <A> tag). -
TA_BODY - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag the body element (this should usually only be set for the <BODY> tag). -
TA_FONT - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Special TagAction for the <FONT> tag, which keeps track of the - absolute and relative font size. -
TA_IGNORABLE_ELEMENT - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag as "ignorable", i.e. all its inner content is silently skipped. -
TA_INLINE - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Deprecated. Use CommonTagActions.TA_INLINE_WHITESPACE instead -
TA_INLINE_NO_WHITESPACE - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block. -
TA_INLINE_WHITESPACE - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag a simple "inline" element, which generates whitespace, but no new block. -
TagAction - Interface in de.l3s.boilerpipe.sax
Defines an action that is to be performed whenever a particular tag occurs - during HTML parsing.
TagActionMap - Class in de.l3s.boilerpipe.sax
Base class for definition a set of TagActions that are to be used for the - HTML parsing process.
TagActionMap() - -Constructor for class de.l3s.boilerpipe.sax.TagActionMap -
  -
TerminatingBlocksFinder - Class in de.l3s.boilerpipe.filters.english
Finds blocks which are potentially indicating the end of an article text and marks - them with DefaultLabels.INDICATES_END_OF_TEXT.
TerminatingBlocksFinder() - -Constructor for class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
TextBlock - Class in de.l3s.boilerpipe.document
Describes a block of text.
TextBlock(String) - -Constructor for class de.l3s.boilerpipe.document.TextBlock -
  -
TextBlock(String, BitSet, int, int, int, int, int) - -Constructor for class de.l3s.boilerpipe.document.TextBlock -
  -
TextBlockCondition - Interface in de.l3s.boilerpipe.conditions
Evaluates whether a given TextBlock meets a certain condition.
TextDocument - Class in de.l3s.boilerpipe.document
A text document, consisting of one or more TextBlocks.
TextDocument(List<TextBlock>) - -Constructor for class de.l3s.boilerpipe.document.TextDocument -
Creates a new TextDocument with given TextBlocks, and no - title. -
TextDocument(String, List<TextBlock>) - -Constructor for class de.l3s.boilerpipe.document.TextDocument -
Creates a new TextDocument with given TextBlocks and - given title. -
TextDocumentStatistics - Class in de.l3s.boilerpipe.document
Provides shallow statistics on a given TextDocument
TextDocumentStatistics(TextDocument, boolean) - -Constructor for class de.l3s.boilerpipe.document.TextDocumentStatistics -
Computes statistics on a given TextDocument. -
TITLE - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
toInputSource() - -Method in class de.l3s.boilerpipe.sax.HTMLDocument -
  -
toInputSource() - -Method in interface de.l3s.boilerpipe.sax.InputSourceable -
  -
tokenize(CharSequence) - -Static method in class de.l3s.boilerpipe.util.UnicodeTokenizer -
Tokenizes the text and returns an array of tokens. -
toString() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
toTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Returns a TextDocument containing the extracted TextBlock - s. -
toTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
Returns a TextDocument containing the extracted TextBlock - s. -
-
-

-U

-
-
UnicodeTokenizer - Class in de.l3s.boilerpipe.util
Tokenizes text according to Unicode word boundaries and strips off non-word - characters.
UnicodeTokenizer() - -Constructor for class de.l3s.boilerpipe.util.UnicodeTokenizer -
  -
-
-A B C D E F G H I K L M N P R S T U - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/index.html b/javadoc/1.1/index.html deleted file mode 100644 index 2f387da..0000000 --- a/javadoc/1.1/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -1.1 API - - - - - - - - - - - -<H2> -Frame Alert</H2> - -<P> -This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. -<BR> -Link to<A HREF="overview-summary.html">Non-frame version.</A> - - - diff --git a/javadoc/1.1/overview-frame.html b/javadoc/1.1/overview-frame.html deleted file mode 100644 index 5488aa2..0000000 --- a/javadoc/1.1/overview-frame.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - -Overview List (1.1 API) - - - - - - - - - - - - - -
-
- - - - - -
All Classes -

- -Packages -
-de.l3s.boilerpipe -
-de.l3s.boilerpipe.conditions -
-de.l3s.boilerpipe.document -
-de.l3s.boilerpipe.estimators -
-de.l3s.boilerpipe.extractors -
-de.l3s.boilerpipe.filters.english -
-de.l3s.boilerpipe.filters.heuristics -
-de.l3s.boilerpipe.filters.simple -
-de.l3s.boilerpipe.labels -
-de.l3s.boilerpipe.sax -
-de.l3s.boilerpipe.util -
-

- -

-  - - diff --git a/javadoc/1.1/overview-summary.html b/javadoc/1.1/overview-summary.html deleted file mode 100644 index eba1ff9..0000000 --- a/javadoc/1.1/overview-summary.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - -Overview (1.1 API) - - - - - - - - - - -


- - - - - - - - - - - - - - - -
- -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages
de.l3s.boilerpipe -The Boilerpipe top-level package.
de.l3s.boilerpipe.conditions 
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model.
de.l3s.boilerpipe.estimators 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text.
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics.
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English.
de.l3s.boilerpipe.labels 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments.
de.l3s.boilerpipe.util -Some helper classes.
- -


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/overview-tree.html b/javadoc/1.1/overview-tree.html deleted file mode 100644 index 014344d..0000000 --- a/javadoc/1.1/overview-tree.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - -Class Hierarchy (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For All Packages

-
-
-
Package Hierarchies:
de.l3s.boilerpipe, de.l3s.boilerpipe.conditions, de.l3s.boilerpipe.document, de.l3s.boilerpipe.estimators, de.l3s.boilerpipe.extractors, de.l3s.boilerpipe.filters.english, de.l3s.boilerpipe.filters.heuristics, de.l3s.boilerpipe.filters.simple, de.l3s.boilerpipe.labels, de.l3s.boilerpipe.sax, de.l3s.boilerpipe.util
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/package-list b/javadoc/1.1/package-list deleted file mode 100644 index 8615c98..0000000 --- a/javadoc/1.1/package-list +++ /dev/null @@ -1,11 +0,0 @@ -de.l3s.boilerpipe -de.l3s.boilerpipe.conditions -de.l3s.boilerpipe.document -de.l3s.boilerpipe.estimators -de.l3s.boilerpipe.extractors -de.l3s.boilerpipe.filters.english -de.l3s.boilerpipe.filters.heuristics -de.l3s.boilerpipe.filters.simple -de.l3s.boilerpipe.labels -de.l3s.boilerpipe.sax -de.l3s.boilerpipe.util diff --git a/javadoc/1.1/resources/inherit.gif b/javadoc/1.1/resources/inherit.gif deleted file mode 100644 index c814867a13deb0ca7ea2156c6ca1d5a03372af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X diff --git a/javadoc/1.1/serialized-form.html b/javadoc/1.1/serialized-form.html deleted file mode 100644 index e7fe65f..0000000 --- a/javadoc/1.1/serialized-form.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - -Serialized Form (1.1 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Serialized Form

-
-
- - - - - -
-Package de.l3s.boilerpipe
- -

- - - - - -
-Class de.l3s.boilerpipe.BoilerpipeProcessingException extends java.lang.Exception implements Serializable
- -

-serialVersionUID: 1L - -

-


- - - - - -
-Package de.l3s.boilerpipe.sax
- -

- - - - - -
-Class de.l3s.boilerpipe.sax.DefaultTagActionMap extends TagActionMap implements Serializable
- -

-serialVersionUID: 1L - -

- -

- - - - - -
-Class de.l3s.boilerpipe.sax.TagActionMap extends java.util.HashMap<java.lang.String,TagAction> implements Serializable
- -

-serialVersionUID: 1L - -

- -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.1/stylesheet.css b/javadoc/1.1/stylesheet.css deleted file mode 100644 index 6ea9e51..0000000 --- a/javadoc/1.1/stylesheet.css +++ /dev/null @@ -1,29 +0,0 @@ -/* Javadoc style sheet */ - -/* Define colors, fonts and other style attributes here to override the defaults */ - -/* Page background color */ -body { background-color: #FFFFFF; color:#000000 } - -/* Headings */ -h1 { font-size: 145% } - -/* Table colors */ -.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */ -.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */ -.TableRowColor { background: #FFFFFF; color:#000000 } /* White */ - -/* Font used in left-hand frame lists */ -.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 } -.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } -.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } - -/* Navigation bar fonts and colors */ -.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */ -.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */ -.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;} -.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;} - -.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} -.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} - diff --git a/javadoc/1.2/allclasses-frame.html b/javadoc/1.2/allclasses-frame.html deleted file mode 100644 index b1d1f72..0000000 --- a/javadoc/1.2/allclasses-frame.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -All Classes (1.2 API) - - - - - - - - - -All Classes -
- - - - - -
AddPrecedingLabelsFilter -
-ArticleExtractor -
-ArticleMetadataFilter -
-ArticleSentencesExtractor -
-BlockProximityFusion -
-BoilerpipeDocumentSource -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeInput -
-BoilerpipeProcessingException -
-BoilerpipeSAXInput -
-BoilerplateBlockFilter -
-CanolaExtractor -
-CommonExtractors -
-CommonTagActions -
-CommonTagActions.BlockTagLabelAction -
-CommonTagActions.Chained -
-CommonTagActions.InlineTagLabelAction -
-ConditionalLabelAction -
-ContentFusion -
-CopyOfTerminatingBlocksFinder -
-DefaultExtractor -
-DefaultLabels -
-DefaultTagActionMap -
-DensityRulesClassifier -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-ExtractorBase -
-HTMLDocument -
-HTMLFetcher -
-HTMLHighlighter -
-IgnoreBlocksAfterContentFilter -
-IgnoreBlocksAfterContentFromEndFilter -
-InputSourceable -
-InvertedFilter -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-KeepLargestBlockFilter -
-KeepLargestFulltextBlockFilter -
-LabelAction -
-LabelFusion -
-LabelToBoilerplateFilter -
-LabelToContentFilter -
-LargestContentExtractor -
-LargestContentExtractor2 -
-MarkEverythingContentFilter -
-MarkupTagAction -
-MinClauseWordsFilter -
-MinFulltextWordsFilter -
-MinWordsFilter -
-NumWordsRulesClassifier -
-NumWordsRulesExtractor -
-SimpleBlockFusionProcessor -
-SimpleEstimator -
-SplitParagraphBlocksFilter -
-StructureAwareBoiler -
-SurroundingToContentFilter -
-TagAction -
-TagActionMap -
-TerminatingBlocksFinder -
-TextBlock -
-TextBlockCondition -
-TextDocument -
-TextDocumentStatistics -
-UnicodeTokenizer -
-
- - - diff --git a/javadoc/1.2/allclasses-noframe.html b/javadoc/1.2/allclasses-noframe.html deleted file mode 100644 index a3c61ce..0000000 --- a/javadoc/1.2/allclasses-noframe.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - -All Classes (1.2 API) - - - - - - - - - -All Classes -
- - - - - -
AddPrecedingLabelsFilter -
-ArticleExtractor -
-ArticleMetadataFilter -
-ArticleSentencesExtractor -
-BlockProximityFusion -
-BoilerpipeDocumentSource -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeInput -
-BoilerpipeProcessingException -
-BoilerpipeSAXInput -
-BoilerplateBlockFilter -
-CanolaExtractor -
-CommonExtractors -
-CommonTagActions -
-CommonTagActions.BlockTagLabelAction -
-CommonTagActions.Chained -
-CommonTagActions.InlineTagLabelAction -
-ConditionalLabelAction -
-ContentFusion -
-CopyOfTerminatingBlocksFinder -
-DefaultExtractor -
-DefaultLabels -
-DefaultTagActionMap -
-DensityRulesClassifier -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-ExtractorBase -
-HTMLDocument -
-HTMLFetcher -
-HTMLHighlighter -
-IgnoreBlocksAfterContentFilter -
-IgnoreBlocksAfterContentFromEndFilter -
-InputSourceable -
-InvertedFilter -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-KeepLargestBlockFilter -
-KeepLargestFulltextBlockFilter -
-LabelAction -
-LabelFusion -
-LabelToBoilerplateFilter -
-LabelToContentFilter -
-LargestContentExtractor -
-LargestContentExtractor2 -
-MarkEverythingContentFilter -
-MarkupTagAction -
-MinClauseWordsFilter -
-MinFulltextWordsFilter -
-MinWordsFilter -
-NumWordsRulesClassifier -
-NumWordsRulesExtractor -
-SimpleBlockFusionProcessor -
-SimpleEstimator -
-SplitParagraphBlocksFilter -
-StructureAwareBoiler -
-SurroundingToContentFilter -
-TagAction -
-TagActionMap -
-TerminatingBlocksFinder -
-TextBlock -
-TextBlockCondition -
-TextDocument -
-TextDocumentStatistics -
-UnicodeTokenizer -
-
- - - diff --git a/javadoc/1.2/constant-values.html b/javadoc/1.2/constant-values.html deleted file mode 100644 index 6b34023..0000000 --- a/javadoc/1.2/constant-values.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -Constant Field Values (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Constant Field Values

-
-
-Contents - - - - - - -
-de.l3s.*
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
de.l3s.boilerpipe.labels.DefaultLabels
-public static final java.lang.StringARTICLE_METADATA"de.l3s.boilerpipe/ARTICLE_METADATA"
-public static final java.lang.StringHR"de.l3s.boilerpipe/HR"
-public static final java.lang.StringINDICATES_END_OF_TEXT"de.l3s.boilerpipe/INDICATES_END_OF_TEXT"
-public static final java.lang.StringMARKUP_PREFIX"<"
-public static final java.lang.StringMIGHT_BE_CONTENT"de.l3s.boilerpipe/MIGHT_BE_CONTENT"
-public static final java.lang.StringSTRICTLY_NOT_CONTENT"de.l3s.boilerpipe/STRICTLY_NOT_CONTENT"
-public static final java.lang.StringTITLE"de.l3s.boilerpipe/TITLE"
- -

- -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeDocumentSource.html b/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeDocumentSource.html deleted file mode 100644 index e033d94..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeDocumentSource.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - -BoilerpipeDocumentSource (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeDocumentSource

-
-
All Known Implementing Classes:
BoilerpipeHTMLParser
-
-
-
-
public interface BoilerpipeDocumentSource
- - -

-


- -

- - - - - - - - - - - - -
-Method Summary
- TextDocumenttoTextDocument() - -
-           
-  -

- - - - - - - - -
-Method Detail
- -

-toTextDocument

-
-TextDocument toTextDocument()
-                            throws BoilerpipeProcessingException
-
-
- -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeExtractor.html deleted file mode 100644 index 2018276..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeExtractor.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - -BoilerpipeExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeExtractor

-
-
All Superinterfaces:
BoilerpipeFilter
-
-
-
All Known Implementing Classes:
ArticleExtractor, ArticleSentencesExtractor, CanolaExtractor, DefaultExtractor, ExtractorBase, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, LargestContentExtractor, LargestContentExtractor2, NumWordsRulesExtractor
-
-
-
-
public interface BoilerpipeExtractor
extends BoilerpipeFilter
- - -

-Describes a complete filter pipeline. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given - InputSource.
- java.lang.StringgetText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringgetText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringgetText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- - - - - - - -
Methods inherited from interface de.l3s.boilerpipe.BoilerpipeFilter
process
-  -

- - - - - - - - -
-Method Detail
- -

-getText

-
-java.lang.String getText(java.lang.String html)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code given as a String. -

-

-
-
-
-
Parameters:
html - The HTML code as a String. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(org.xml.sax.InputSource is)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given - InputSource. -

-

-
-
-
-
Parameters:
is - The InputSource containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(java.io.Reader r)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given Reader. -

-

-
-
-
-
Parameters:
r - The Reader containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-java.lang.String getText(TextDocument doc)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the given TextDocument object. -

-

-
-
-
-
Parameters:
doc - The TextDocument. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeFilter.html b/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeFilter.html deleted file mode 100644 index 1ca9f84..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeFilter.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - -BoilerpipeFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeFilter

-
-
All Known Subinterfaces:
BoilerpipeExtractor
-
-
-
All Known Implementing Classes:
AddPrecedingLabelsFilter, ArticleExtractor, ArticleMetadataFilter, ArticleSentencesExtractor, BlockProximityFusion, BoilerplateBlockFilter, CanolaExtractor, ContentFusion, CopyOfTerminatingBlocksFinder, DefaultExtractor, DensityRulesClassifier, DocumentTitleMatchClassifier, ExpandTitleToContentFilter, ExtractorBase, IgnoreBlocksAfterContentFilter, IgnoreBlocksAfterContentFromEndFilter, InvertedFilter, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, KeepLargestBlockFilter, KeepLargestFulltextBlockFilter, LabelFusion, LabelToBoilerplateFilter, LabelToContentFilter, LargestContentExtractor, LargestContentExtractor2, MarkEverythingContentFilter, MinClauseWordsFilter, MinFulltextWordsFilter, MinWordsFilter, NumWordsRulesClassifier, NumWordsRulesExtractor, SimpleBlockFusionProcessor, SplitParagraphBlocksFilter, SurroundingToContentFilter, TerminatingBlocksFinder
-
-
-
-
public interface BoilerpipeFilter
- - -

-A generic BoilerpipeFilter. Takes a TextDocument and - processes it somehow. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
-  -

- - - - - - - - -
-Method Detail
- -

-process

-
-boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeInput.html b/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeInput.html deleted file mode 100644 index 4674fbc..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeInput.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -BoilerpipeInput (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Interface BoilerpipeInput

-
-
All Known Implementing Classes:
BoilerpipeSAXInput
-
-
-
-
public interface BoilerpipeInput
- - -

-A source that returns TextDocuments. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- TextDocumentgetTextDocument() - -
-          Returns (somehow) a TextDocument.
-  -

- - - - - - - - -
-Method Detail
- -

-getTextDocument

-
-TextDocument getTextDocument()
-                             throws BoilerpipeProcessingException
-
-
Returns (somehow) a TextDocument. -

-

- -
Returns:
A TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeProcessingException.html b/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeProcessingException.html deleted file mode 100644 index e42bbca..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/BoilerpipeProcessingException.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - -BoilerpipeProcessingException (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe -
-Class BoilerpipeProcessingException

-
-java.lang.Object
-  extended by java.lang.Throwable
-      extended by java.lang.Exception
-          extended by de.l3s.boilerpipe.BoilerpipeProcessingException
-
-
-
All Implemented Interfaces:
java.io.Serializable
-
-
-
-
public class BoilerpipeProcessingException
extends java.lang.Exception
- - -

-Exception for signaling failure in the processing pipeline. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
Serialized Form
-
- -

- - - - - - - - - - - - - - - - - - - - -
-Constructor Summary
BoilerpipeProcessingException() - -
-           
BoilerpipeProcessingException(java.lang.String message) - -
-           
BoilerpipeProcessingException(java.lang.String message, - java.lang.Throwable cause) - -
-           
BoilerpipeProcessingException(java.lang.Throwable cause) - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException()
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.String message,
-                                     java.lang.Throwable cause)
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.String message)
-
-
-
- -

-BoilerpipeProcessingException

-
-public BoilerpipeProcessingException(java.lang.Throwable cause)
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/boilers/StructureAwareBoiler.html b/javadoc/1.2/de/l3s/boilerpipe/boilers/StructureAwareBoiler.html deleted file mode 100644 index 0f145a8..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/boilers/StructureAwareBoiler.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -StructureAwareBoiler (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.boilers -
-Class StructureAwareBoiler

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.boilers.StructureAwareBoiler
-
-
-
-
public class StructureAwareBoiler
extends java.lang.Object
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
-static StructureAwareBoilerINSTANCE - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static voidmain(java.lang.String[] args) - -
-           
- TextDocumentprocess(HTMLDocument htmlDoc) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final StructureAwareBoiler INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-main

-
-public static void main(java.lang.String[] args)
-                 throws java.net.MalformedURLException,
-                        java.io.IOException,
-                        BoilerpipeProcessingException
-
-
- -
Throws: -
java.net.MalformedURLException -
java.io.IOException -
BoilerpipeProcessingException
-
-
-
- -

-process

-
-public TextDocument process(HTMLDocument htmlDoc)
-                     throws BoilerpipeProcessingException
-
-
- -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/boilers/class-use/StructureAwareBoiler.html b/javadoc/1.2/de/l3s/boilerpipe/boilers/class-use/StructureAwareBoiler.html deleted file mode 100644 index 9c27e0a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/boilers/class-use/StructureAwareBoiler.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.boilers.StructureAwareBoiler (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.boilers.StructureAwareBoiler

-
- - - - - - - - - -
-Packages that use StructureAwareBoiler
de.l3s.boilerpipe.boilers  
-  -

- - - - - -
-Uses of StructureAwareBoiler in de.l3s.boilerpipe.boilers
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.boilers declared as StructureAwareBoiler
-static StructureAwareBoilerStructureAwareBoiler.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/boilers/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/boilers/package-frame.html deleted file mode 100644 index e7cf4cf..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/boilers/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -de.l3s.boilerpipe.boilers (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.boilers - - - - -
-Classes  - -
-StructureAwareBoiler
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/boilers/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/boilers/package-summary.html deleted file mode 100644 index c3774dc..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/boilers/package-summary.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -de.l3s.boilerpipe.boilers (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.boilers -

- - - - - - - - - -
-Class Summary
StructureAwareBoiler 
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/boilers/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/boilers/package-tree.html deleted file mode 100644 index 01ddd81..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/boilers/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -de.l3s.boilerpipe.boilers Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.boilers -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/boilers/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/boilers/package-use.html deleted file mode 100644 index 1fbbb14..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/boilers/package-use.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.boilers (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.boilers

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.boilers
de.l3s.boilerpipe.boilers  
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.boilers used by de.l3s.boilerpipe.boilers
StructureAwareBoiler - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeDocumentSource.html b/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeDocumentSource.html deleted file mode 100644 index 05dbc73..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeDocumentSource.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeDocumentSource (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeDocumentSource

-
- - - - - - - - - -
-Packages that use BoilerpipeDocumentSource
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeDocumentSource in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Classes in de.l3s.boilerpipe.sax that implement BoilerpipeDocumentSource
- classBoilerpipeHTMLParser - -
-          A simple SAX Parser, used by BoilerpipeSAXInput.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html deleted file mode 100644 index f93c442..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeExtractor.html +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeExtractor

-
- - - - - - - - - - - - - -
-Packages that use BoilerpipeExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.extractors that implement BoilerpipeExtractor
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classCanolaExtractor - -
-          A full-text extractor trained on krdwrd Canola - .
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classExtractorBase - -
-          The base class of Extractors.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor2 - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

- - - - - -
-Uses of BoilerpipeExtractor in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type BoilerpipeExtractor
- java.lang.StringHTMLHighlighter.process(java.net.URL url, - BoilerpipeExtractor extractor) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html b/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html deleted file mode 100644 index f69501b..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeFilter.html +++ /dev/null @@ -1,593 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeFilter

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use BoilerpipeFilter
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe
-  -

- - - - - - - - - -
Subinterfaces of BoilerpipeFilter in de.l3s.boilerpipe
- interfaceBoilerpipeExtractor - -
-          Describes a complete filter pipeline.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.extractors that implement BoilerpipeFilter
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classCanolaExtractor - -
-          A full-text extractor trained on krdwrd Canola - .
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classExtractorBase - -
-          The base class of Extractors.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor2 - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as BoilerpipeFilter
-static BoilerpipeFilterCanolaExtractor.CLASSIFIER - -
-          The actual classifier, exposed.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.english that implement BoilerpipeFilter
- classCopyOfTerminatingBlocksFinder - -
-          Finds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT.
- classDensityRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
- classIgnoreBlocksAfterContentFilter - -
-          Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT.
- classIgnoreBlocksAfterContentFromEndFilter - -
-          Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT, and after any content block.
- classKeepLargestFulltextBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
- classMinFulltextWordsFilter - -
-          Keeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default.
- classNumWordsRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
- classTerminatingBlocksFinder - -
-          Finds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.heuristics that implement BoilerpipeFilter
- classAddPrecedingLabelsFilter - -
-          Adds the labels of the preceding block to the current block, optionally adding a prefix.
- classArticleMetadataFilter - -
-           
- classBlockProximityFusion - -
-          Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
- classContentFusion - -
-           
- classDocumentTitleMatchClassifier - -
-          Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
- classExpandTitleToContentFilter - -
-          Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT.
- classKeepLargestBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
- classLabelFusion - -
-          Fuses adjacent blocks if their labels are equal.
- classSimpleBlockFusionProcessor - -
-          Merges two subsequent blocks if their text densities are equal.
-  -

- - - - - -
-Uses of BoilerpipeFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.filters.simple that implement BoilerpipeFilter
- classBoilerplateBlockFilter - -
-          Removes TextBlocks which have explicitly been marked as "not content".
- classInvertedFilter - -
-          Reverts the "isContent" flag for all TextBlocks
- classLabelToBoilerplateFilter - -
-          Marks all blocks that contain a given label as "boilerplate".
- classLabelToContentFilter - -
-          Marks all blocks that contain a given label as "content".
- classMarkEverythingContentFilter - -
-          Marks all blocks as content.
- classMinClauseWordsFilter - -
-          Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
- classMinWordsFilter - -
-          Keeps only those content blocks which contain at least k words.
- classSplitParagraphBlocksFilter - -
-          Splits TextBlocks at paragraph boundaries.
- classSurroundingToContentFilter - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeInput.html b/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeInput.html deleted file mode 100644 index 9276dbd..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeInput.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.BoilerpipeInput (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.BoilerpipeInput

-
- - - - - - - - - -
-Packages that use BoilerpipeInput
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeInput in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Classes in de.l3s.boilerpipe.sax that implement BoilerpipeInput
- classBoilerpipeSAXInput - -
-          Parses an InputSource using SAX and returns a TextDocument.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html b/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html deleted file mode 100644 index 458a6a3..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/class-use/BoilerpipeProcessingException.html +++ /dev/null @@ -1,743 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.BoilerpipeProcessingException (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.BoilerpipeProcessingException

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use BoilerpipeProcessingException
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.boilers  
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe that throw BoilerpipeProcessingException
- java.lang.StringBoilerpipeExtractor.getText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given - InputSource.
- java.lang.StringBoilerpipeExtractor.getText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringBoilerpipeExtractor.getText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringBoilerpipeExtractor.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- TextDocumentBoilerpipeInput.getTextDocument() - -
-          Returns (somehow) a TextDocument.
- booleanBoilerpipeFilter.process(TextDocument doc) - -
-          Processes the given document doc.
- TextDocumentBoilerpipeDocumentSource.toTextDocument() - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.boilers
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.boilers that throw BoilerpipeProcessingException
-static voidStructureAwareBoiler.main(java.lang.String[] args) - -
-           
- TextDocumentStructureAwareBoiler.process(HTMLDocument htmlDoc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that throw BoilerpipeProcessingException
- java.lang.StringExtractorBase.getText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given InputSource.
- java.lang.StringExtractorBase.getText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringExtractorBase.getText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringExtractorBase.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- java.lang.StringExtractorBase.getText(java.net.URL url) - -
-          Extracts text from the HTML code available from the given URL.
- booleanNumWordsRulesExtractor.process(TextDocument doc) - -
-           
- booleanLargestContentExtractor2.process(TextDocument doc) - -
-           
- booleanLargestContentExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingWithMinKWordsExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingExtractor.process(TextDocument doc) - -
-           
- booleanDefaultExtractor.process(TextDocument doc) - -
-           
- booleanCanolaExtractor.process(TextDocument doc) - -
-           
- booleanArticleSentencesExtractor.process(TextDocument doc) - -
-           
- booleanArticleExtractor.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that throw BoilerpipeProcessingException
- booleanTerminatingBlocksFinder.process(TextDocument doc) - -
-           
- booleanNumWordsRulesClassifier.process(TextDocument doc) - -
-           
- booleanMinFulltextWordsFilter.process(TextDocument doc) - -
-           
- booleanKeepLargestFulltextBlockFilter.process(TextDocument doc) - -
-           
- booleanIgnoreBlocksAfterContentFromEndFilter.process(TextDocument doc) - -
-           
- booleanIgnoreBlocksAfterContentFilter.process(TextDocument doc) - -
-           
- booleanDensityRulesClassifier.process(TextDocument doc) - -
-           
- booleanCopyOfTerminatingBlocksFinder.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that throw BoilerpipeProcessingException
- booleanSimpleBlockFusionProcessor.process(TextDocument doc) - -
-           
- booleanLabelFusion.process(TextDocument doc) - -
-           
- booleanKeepLargestBlockFilter.process(TextDocument doc) - -
-           
- booleanExpandTitleToContentFilter.process(TextDocument doc) - -
-           
- booleanDocumentTitleMatchClassifier.process(TextDocument doc) - -
-           
- booleanContentFusion.process(TextDocument doc) - -
-           
- booleanBlockProximityFusion.process(TextDocument doc) - -
-           
- booleanArticleMetadataFilter.process(TextDocument doc) - -
-           
- booleanAddPrecedingLabelsFilter.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that throw BoilerpipeProcessingException
- booleanSurroundingToContentFilter.process(TextDocument doc) - -
-           
- booleanSplitParagraphBlocksFilter.process(TextDocument doc) - -
-           
- booleanMinWordsFilter.process(TextDocument doc) - -
-           
- booleanMinClauseWordsFilter.process(TextDocument doc) - -
-           
- booleanMarkEverythingContentFilter.process(TextDocument doc) - -
-           
- booleanLabelToContentFilter.process(TextDocument doc) - -
-           
- booleanLabelToBoilerplateFilter.process(TextDocument doc) - -
-           
- booleanInvertedFilter.process(TextDocument doc) - -
-           
- booleanBoilerplateBlockFilter.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of BoilerpipeProcessingException in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that throw BoilerpipeProcessingException
- TextDocumentBoilerpipeSAXInput.getTextDocument() - -
-          Retrieves the TextDocument using a default HTML parser.
- TextDocumentBoilerpipeSAXInput.getTextDocument(BoilerpipeHTMLParser parser) - -
-          Retrieves the TextDocument using the given HTML parser.
- java.lang.StringHTMLHighlighter.process(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Processes the given TextDocument and the original HTML text (as - an InputSource).
- java.lang.StringHTMLHighlighter.process(TextDocument doc, - java.lang.String origHTML) - -
-          Processes the given TextDocument and the original HTML text (as a - String).
- java.lang.StringHTMLHighlighter.process(java.net.URL url, - BoilerpipeExtractor extractor) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/conditions/TextBlockCondition.html b/javadoc/1.2/de/l3s/boilerpipe/conditions/TextBlockCondition.html deleted file mode 100644 index e3da5b8..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/conditions/TextBlockCondition.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - -TextBlockCondition (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.conditions -
-Interface TextBlockCondition

-
-
-
public interface TextBlockCondition
- - -

-Evaluates whether a given TextBlock meets a certain condition. - Useful in combination with ConditionalLabelAction. -

- -

-

-
Author:
-
Christian Kohlschuetter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- booleanmeetsCondition(TextBlock tb) - -
-          Returns true iff the given TextBlock tb meets the defined condition.
-  -

- - - - - - - - -
-Method Detail
- -

-meetsCondition

-
-boolean meetsCondition(TextBlock tb)
-
-
Returns true iff the given TextBlock tb meets the defined condition. -

-

-
Parameters:
tb - -
Returns:
iff the condition is met.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/conditions/class-use/TextBlockCondition.html b/javadoc/1.2/de/l3s/boilerpipe/conditions/class-use/TextBlockCondition.html deleted file mode 100644 index 3f47f21..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/conditions/class-use/TextBlockCondition.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.conditions.TextBlockCondition (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.conditions.TextBlockCondition

-
- - - - - - - - - - - - - -
-Packages that use TextBlockCondition
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.labels  
-  -

- - - - - -
-Uses of TextBlockCondition in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.filters.simple with parameters of type TextBlockCondition
SurroundingToContentFilter(TextBlockCondition cond) - -
-           
-  -

- - - - - -
-Uses of TextBlockCondition in de.l3s.boilerpipe.labels
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.labels with parameters of type TextBlockCondition
ConditionalLabelAction(TextBlockCondition condition, - java.lang.String... labels) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/conditions/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/conditions/package-frame.html deleted file mode 100644 index a215e6c..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/conditions/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -de.l3s.boilerpipe.conditions (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.conditions - - - - -
-Interfaces  - -
-TextBlockCondition
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/conditions/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/conditions/package-summary.html deleted file mode 100644 index 7db7a43..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/conditions/package-summary.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -de.l3s.boilerpipe.conditions (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.conditions -

- - - - - - - - - -
-Interface Summary
TextBlockConditionEvaluates whether a given TextBlock meets a certain condition.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/conditions/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/conditions/package-tree.html deleted file mode 100644 index 5a6a3cf..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/conditions/package-tree.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -de.l3s.boilerpipe.conditions Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.conditions -

-
-
-
Package Hierarchies:
All Packages
-
-

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/conditions/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/conditions/package-use.html deleted file mode 100644 index bb7b2d1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/conditions/package-use.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.conditions (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.conditions

-
- - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe.conditions
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.labels  
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.conditions used by de.l3s.boilerpipe.filters.simple
TextBlockCondition - -
-          Evaluates whether a given TextBlock meets a certain condition.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.conditions used by de.l3s.boilerpipe.labels
TextBlockCondition - -
-          Evaluates whether a given TextBlock meets a certain condition.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/TextBlock.html b/javadoc/1.2/de/l3s/boilerpipe/document/TextBlock.html deleted file mode 100644 index 36e8c84..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/TextBlock.html +++ /dev/null @@ -1,812 +0,0 @@ - - - - - - -TextBlock (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextBlock

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextBlock
-
-
-
All Implemented Interfaces:
java.lang.Cloneable
-
-
-
-
public class TextBlock
extends java.lang.Object
implements java.lang.Cloneable
- - -

-Describes a block of text. - - A block can be an "atomic" text element (i.e., a sequence of text that is not - interrupted by any HTML markup) or a compound of such atomic elements. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static TextBlockEMPTY_END - -
-           
-static TextBlockEMPTY_START - -
-           
-  - - - - - - - - - - - - - -
-Constructor Summary
TextBlock(java.lang.String text) - -
-           
TextBlock(java.lang.String text, - java.util.BitSet containedTextElements, - int numWords, - int numWordsInAnchorText, - int numWordsInWrappedLines, - int numWrappedLines, - int offsetBlocks) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddLabel(java.lang.String label) - -
-          Adds an arbitrary String label to this TextBlock.
- voidaddLabels(java.util.Set<java.lang.String> l) - -
-          Adds a set of labels to this TextBlock.
- voidaddLabels(java.lang.String... l) - -
-          Adds a set of labels to this TextBlock.
-protected  java.lang.Objectclone() - -
-           
- java.util.BitSetgetContainedTextElements() - -
-          Returns the containedTextElements BitSet, or null.
- java.util.Set<java.lang.String>getLabels() - -
-          Returns the labels associated to this TextBlock, or null if no such labels - exist.
- floatgetLinkDensity() - -
-           
- intgetNumWords() - -
-           
- intgetNumWordsInAnchorText() - -
-           
- intgetOffsetBlocksEnd() - -
-           
- intgetOffsetBlocksStart() - -
-           
- intgetTagLevel() - -
-           
- java.lang.StringgetText() - -
-           
- floatgetTextDensity() - -
-           
- booleanhasLabel(java.lang.String label) - -
-          Checks whether this TextBlock has the given label.
- booleanisContent() - -
-           
- voidmergeNext(TextBlock other) - -
-           
- booleanremoveLabel(java.lang.String label) - -
-           
- booleansetIsContent(boolean isContent) - -
-           
- voidsetTagLevel(int tagLevel) - -
-           
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-EMPTY_START

-
-public static final TextBlock EMPTY_START
-
-
-
-
-
- -

-EMPTY_END

-
-public static final TextBlock EMPTY_END
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-TextBlock

-
-public TextBlock(java.lang.String text)
-
-
-
- -

-TextBlock

-
-public TextBlock(java.lang.String text,
-                 java.util.BitSet containedTextElements,
-                 int numWords,
-                 int numWordsInAnchorText,
-                 int numWordsInWrappedLines,
-                 int numWrappedLines,
-                 int offsetBlocks)
-
-
- - - - - - - - -
-Method Detail
- -

-isContent

-
-public boolean isContent()
-
-
-
-
-
-
-
-
-
- -

-setIsContent

-
-public boolean setIsContent(boolean isContent)
-
-
-
-
-
-
-
-
-
- -

-getText

-
-public java.lang.String getText()
-
-
-
-
-
-
-
-
-
- -

-getNumWords

-
-public int getNumWords()
-
-
-
-
-
-
-
-
-
- -

-getNumWordsInAnchorText

-
-public int getNumWordsInAnchorText()
-
-
-
-
-
-
-
-
-
- -

-getTextDensity

-
-public float getTextDensity()
-
-
-
-
-
-
-
-
-
- -

-getLinkDensity

-
-public float getLinkDensity()
-
-
-
-
-
-
-
-
-
- -

-mergeNext

-
-public void mergeNext(TextBlock other)
-
-
-
-
-
-
-
-
-
- -

-getOffsetBlocksStart

-
-public int getOffsetBlocksStart()
-
-
-
-
-
-
-
-
-
- -

-getOffsetBlocksEnd

-
-public int getOffsetBlocksEnd()
-
-
-
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
-
- -

-addLabel

-
-public void addLabel(java.lang.String label)
-
-
Adds an arbitrary String label to this TextBlock. -

-

-
-
-
-
Parameters:
label - The label
See Also:
DefaultLabels
-
-
-
- -

-hasLabel

-
-public boolean hasLabel(java.lang.String label)
-
-
Checks whether this TextBlock has the given label. -

-

-
-
-
-
Parameters:
label - The label -
Returns:
true if this block is marked by the given label.
-
-
-
- -

-removeLabel

-
-public boolean removeLabel(java.lang.String label)
-
-
-
-
-
-
-
-
-
- -

-getLabels

-
-public java.util.Set<java.lang.String> getLabels()
-
-
Returns the labels associated to this TextBlock, or null if no such labels - exist. - - NOTE: The returned instance is the one used directly in TextBlock. You have full access - to the data structure. However it is recommended to use the label-specific methods in TextBlock - whenever possible. -

-

-
-
-
- -
Returns:
Returns the set of labels, or null if no labels was added yet.
-
-
-
- -

-addLabels

-
-public void addLabels(java.util.Set<java.lang.String> l)
-
-
Adds a set of labels to this TextBlock. - null-references are silently ignored. -

-

-
-
-
-
Parameters:
l - The labels to be added.
-
-
-
- -

-addLabels

-
-public void addLabels(java.lang.String... l)
-
-
Adds a set of labels to this TextBlock. - null-references are silently ignored. -

-

-
-
-
-
Parameters:
l - The labels to be added.
-
-
-
- -

-getContainedTextElements

-
-public java.util.BitSet getContainedTextElements()
-
-
Returns the containedTextElements BitSet, or null. -

-

-
-
-
- -
Returns:
-
-
-
- -

-clone

-
-protected java.lang.Object clone()
-
-
-
Overrides:
clone in class java.lang.Object
-
-
-
-
-
-
- -

-getTagLevel

-
-public int getTagLevel()
-
-
-
-
-
-
-
-
-
- -

-setTagLevel

-
-public void setTagLevel(int tagLevel)
-
-
-
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/TextDocument.html b/javadoc/1.2/de/l3s/boilerpipe/document/TextDocument.html deleted file mode 100644 index 509c8aa..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/TextDocument.html +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - -TextDocument (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextDocument

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextDocument
-
-
-
-
public class TextDocument
extends java.lang.Object
- - -

-A text document, consisting of one or more TextBlocks. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
TextDocument(java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks, and no - title.
TextDocument(java.lang.String title, - java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks and - given title.
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringdebugString() - -
-          Returns detailed debugging information about the contained TextBlocks.
- java.lang.StringgetContent() - -
-          Returns the TextDocument's content.
- java.lang.StringgetText(boolean includeContent, - boolean includeNonContent) - -
-          Returns the TextDocument's content, non-content or both
- java.util.List<TextBlock>getTextBlocks() - -
-          Returns the TextBlocks of this document.
- java.lang.StringgetTitle() - -
-          Returns the "main" title for this document, or null if no - such title has ben set.
- voidsetTitle(java.lang.String title) - -
-          Updates the "main" title for this document.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-TextDocument

-
-public TextDocument(java.util.List<TextBlock> textBlocks)
-
-
Creates a new TextDocument with given TextBlocks, and no - title. -

-

-
Parameters:
textBlocks - The text blocks of this document.
-
-
- -

-TextDocument

-
-public TextDocument(java.lang.String title,
-                    java.util.List<TextBlock> textBlocks)
-
-
Creates a new TextDocument with given TextBlocks and - given title. -

-

-
Parameters:
title - The "main" title for this text document.
textBlocks - The text blocks of this document.
-
- - - - - - - - -
-Method Detail
- -

-getTextBlocks

-
-public java.util.List<TextBlock> getTextBlocks()
-
-
Returns the TextBlocks of this document. -

-

- -
Returns:
A list of TextBlocks, in sequential order of appearance.
-
-
-
- -

-getTitle

-
-public java.lang.String getTitle()
-
-
Returns the "main" title for this document, or null if no - such title has ben set. -

-

- -
Returns:
The "main" title.
-
-
-
- -

-setTitle

-
-public void setTitle(java.lang.String title)
-
-
Updates the "main" title for this document. -

-

-
Parameters:
title -
-
-
-
- -

-getContent

-
-public java.lang.String getContent()
-
-
Returns the TextDocument's content. -

-

- -
Returns:
The content text.
-
-
-
- -

-getText

-
-public java.lang.String getText(boolean includeContent,
-                                boolean includeNonContent)
-
-
Returns the TextDocument's content, non-content or both -

-

-
Parameters:
includeContent - Whether to include TextBlocks marked as "content".
includeNonContent - Whether to include TextBlocks marked as "non-content". -
Returns:
The text.
-
-
-
- -

-debugString

-
-public java.lang.String debugString()
-
-
Returns detailed debugging information about the contained TextBlocks. -

-

- -
Returns:
Debug information.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/TextDocumentStatistics.html b/javadoc/1.2/de/l3s/boilerpipe/document/TextDocumentStatistics.html deleted file mode 100644 index 2d4f622..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/TextDocumentStatistics.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - -TextDocumentStatistics (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.document -
-Class TextDocumentStatistics

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.document.TextDocumentStatistics
-
-
-
-
public final class TextDocumentStatistics
extends java.lang.Object
- - -

-Provides shallow statistics on a given TextDocument -

- -

-

-
Author:
-
Christian Kohlschuetter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
TextDocumentStatistics(TextDocument doc, - boolean contentOnly) - -
-          Computes statistics on a given TextDocument.
-  - - - - - - - - - - - - - - - -
-Method Summary
- floatavgNumWords() - -
-          Returns the average number of words at block-level (= overall number of words divided by - the number of blocks).
- intgetNumWords() - -
-          Returns the overall number of words in all blocks.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-TextDocumentStatistics

-
-public TextDocumentStatistics(TextDocument doc,
-                              boolean contentOnly)
-
-
Computes statistics on a given TextDocument. -

-

-
Parameters:
doc - The TextDocument.
contentOnly - if true then o
-
- - - - - - - - -
-Method Detail
- -

-avgNumWords

-
-public float avgNumWords()
-
-
Returns the average number of words at block-level (= overall number of words divided by - the number of blocks). -

-

- -
Returns:
Average
-
-
-
- -

-getNumWords

-
-public int getNumWords()
-
-
Returns the overall number of words in all blocks. -

-

- -
Returns:
Sum
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextBlock.html b/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextBlock.html deleted file mode 100644 index adc1c1f..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextBlock.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextBlock (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextBlock

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use TextBlock
de.l3s.boilerpipe.conditions  
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model. 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.labels  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.conditions
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.conditions with parameters of type TextBlock
- booleanTextBlockCondition.meetsCondition(TextBlock tb) - -
-          Returns true iff the given TextBlock tb meets the defined condition.
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.document
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.document declared as TextBlock
-static TextBlockTextBlock.EMPTY_END - -
-           
-static TextBlockTextBlock.EMPTY_START - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.document that return types with arguments of type TextBlock
- java.util.List<TextBlock>TextDocument.getTextBlocks() - -
-          Returns the TextBlocks of this document.
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.document with parameters of type TextBlock
- voidTextBlock.mergeNext(TextBlock other) - -
-           
-  -

- - - - - - - - - - - -
Constructor parameters in de.l3s.boilerpipe.document with type arguments of type TextBlock
TextDocument(java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks, and no - title.
TextDocument(java.lang.String title, - java.util.List<TextBlock> textBlocks) - -
-          Creates a new TextDocument with given TextBlocks and - given title.
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english with parameters of type TextBlock
-protected  booleanNumWordsRulesClassifier.classify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-protected  booleanDensityRulesClassifier.classify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.labels
-  -

- - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.labels with parameters of type TextBlock
-protected  voidLabelAction.addLabelsTo(TextBlock tb) - -
-           
- voidLabelAction.addTo(TextBlock tb) - -
-           
- voidConditionalLabelAction.addTo(TextBlock tb) - -
-           
-  -

- - - - - -
-Uses of TextBlock in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type TextBlock
-protected  voidBoilerpipeHTMLContentHandler.addTextBlock(TextBlock tb) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextDocument.html b/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextDocument.html deleted file mode 100644 index 6fe4ae1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextDocument.html +++ /dev/null @@ -1,732 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextDocument (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextDocument

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use TextDocument
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.boilers  
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model. 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe that return TextDocument
- TextDocumentBoilerpipeInput.getTextDocument() - -
-          Returns (somehow) a TextDocument.
- TextDocumentBoilerpipeDocumentSource.toTextDocument() - -
-           
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe with parameters of type TextDocument
- java.lang.StringBoilerpipeExtractor.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- booleanBoilerpipeFilter.process(TextDocument doc) - -
-          Processes the given document doc.
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.boilers
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.boilers that return TextDocument
- TextDocumentStructureAwareBoiler.process(HTMLDocument htmlDoc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.document
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.document with parameters of type TextDocument
TextDocumentStatistics(TextDocument doc, - boolean contentOnly) - -
-          Computes statistics on a given TextDocument.
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors with parameters of type TextDocument
- java.lang.StringExtractorBase.getText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- booleanNumWordsRulesExtractor.process(TextDocument doc) - -
-           
- booleanLargestContentExtractor2.process(TextDocument doc) - -
-           
- booleanLargestContentExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingWithMinKWordsExtractor.process(TextDocument doc) - -
-           
- booleanKeepEverythingExtractor.process(TextDocument doc) - -
-           
- booleanDefaultExtractor.process(TextDocument doc) - -
-           
- booleanCanolaExtractor.process(TextDocument doc) - -
-           
- booleanArticleSentencesExtractor.process(TextDocument doc) - -
-           
- booleanArticleExtractor.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english with parameters of type TextDocument
- booleanTerminatingBlocksFinder.process(TextDocument doc) - -
-           
- booleanNumWordsRulesClassifier.process(TextDocument doc) - -
-           
- booleanMinFulltextWordsFilter.process(TextDocument doc) - -
-           
- booleanKeepLargestFulltextBlockFilter.process(TextDocument doc) - -
-           
- booleanIgnoreBlocksAfterContentFromEndFilter.process(TextDocument doc) - -
-           
- booleanIgnoreBlocksAfterContentFilter.process(TextDocument doc) - -
-           
- booleanDensityRulesClassifier.process(TextDocument doc) - -
-           
- booleanCopyOfTerminatingBlocksFinder.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics with parameters of type TextDocument
- booleanSimpleBlockFusionProcessor.process(TextDocument doc) - -
-           
- booleanLabelFusion.process(TextDocument doc) - -
-           
- booleanKeepLargestBlockFilter.process(TextDocument doc) - -
-           
- booleanExpandTitleToContentFilter.process(TextDocument doc) - -
-           
- booleanDocumentTitleMatchClassifier.process(TextDocument doc) - -
-           
- booleanContentFusion.process(TextDocument doc) - -
-           
- booleanBlockProximityFusion.process(TextDocument doc) - -
-           
- booleanArticleMetadataFilter.process(TextDocument doc) - -
-           
- booleanAddPrecedingLabelsFilter.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple with parameters of type TextDocument
- booleanSurroundingToContentFilter.process(TextDocument doc) - -
-           
- booleanSplitParagraphBlocksFilter.process(TextDocument doc) - -
-           
- booleanMinWordsFilter.process(TextDocument doc) - -
-           
- booleanMinClauseWordsFilter.process(TextDocument doc) - -
-           
- booleanMarkEverythingContentFilter.process(TextDocument doc) - -
-           
- booleanLabelToContentFilter.process(TextDocument doc) - -
-           
- booleanLabelToBoilerplateFilter.process(TextDocument doc) - -
-           
- booleanInvertedFilter.process(TextDocument doc) - -
-           
- booleanBoilerplateBlockFilter.process(TextDocument doc) - -
-           
-  -

- - - - - -
-Uses of TextDocument in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that return TextDocument
- TextDocumentBoilerpipeSAXInput.getTextDocument() - -
-          Retrieves the TextDocument using a default HTML parser.
- TextDocumentBoilerpipeSAXInput.getTextDocument(BoilerpipeHTMLParser parser) - -
-          Retrieves the TextDocument using the given HTML parser.
- TextDocumentBoilerpipeHTMLParser.toTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlock - s.
- TextDocumentBoilerpipeHTMLContentHandler.toTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlock - s.
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type TextDocument
- java.lang.StringHTMLHighlighter.process(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Processes the given TextDocument and the original HTML text (as - an InputSource).
- java.lang.StringHTMLHighlighter.process(TextDocument doc, - java.lang.String origHTML) - -
-          Processes the given TextDocument and the original HTML text (as a - String).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextDocumentStatistics.html b/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextDocumentStatistics.html deleted file mode 100644 index 109ab5e..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/class-use/TextDocumentStatistics.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.document.TextDocumentStatistics (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.document.TextDocumentStatistics

-
- - - - - - - - - -
-Packages that use TextDocumentStatistics
de.l3s.boilerpipe.estimators  
-  -

- - - - - -
-Uses of TextDocumentStatistics in de.l3s.boilerpipe.estimators
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.estimators with parameters of type TextDocumentStatistics
- booleanSimpleEstimator.isLowQuality(TextDocumentStatistics dsBefore, - TextDocumentStatistics dsAfter) - -
-          Given the statistics of the document before and after applying the BoilerpipeExtractor, - can we regard the extraction quality (too) low?
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/document/package-frame.html deleted file mode 100644 index d4e6064..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/package-frame.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.document - - - - -
-Classes  - -
-TextBlock -
-TextDocument -
-TextDocumentStatistics
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/document/package-summary.html deleted file mode 100644 index 6d3389e..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/package-summary.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.document -

- -The classes in this package represent the simple Boilerpipe document model. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - -
-Class Summary
TextBlockDescribes a block of text.
TextDocumentA text document, consisting of one or more TextBlocks.
TextDocumentStatisticsProvides shallow statistics on a given TextDocument
-  - -

-

-Package de.l3s.boilerpipe.document Description -

- -

-

-The classes in this package represent the simple Boilerpipe document model. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/document/package-tree.html deleted file mode 100644 index 0a67b3a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/package-tree.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - -de.l3s.boilerpipe.document Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.document -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/document/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/document/package-use.html deleted file mode 100644 index 10f589f..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/document/package-use.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.document (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.document

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe.document
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.boilers  
de.l3s.boilerpipe.conditions  
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model. 
de.l3s.boilerpipe.estimators  
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.labels  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.boilers
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.conditions
TextBlock - -
-          Describes a block of text.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.document
TextBlock - -
-          Describes a block of text.
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.estimators
TextDocumentStatistics - -
-          Provides shallow statistics on a given TextDocument
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.extractors
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.english
TextBlock - -
-          Describes a block of text.
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.heuristics
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.filters.simple
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.labels
TextBlock - -
-          Describes a block of text.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.document used by de.l3s.boilerpipe.sax
TextBlock - -
-          Describes a block of text.
TextDocument - -
-          A text document, consisting of one or more TextBlocks.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/estimators/SimpleEstimator.html b/javadoc/1.2/de/l3s/boilerpipe/estimators/SimpleEstimator.html deleted file mode 100644 index 0111398..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/estimators/SimpleEstimator.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -SimpleEstimator (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.estimators -
-Class SimpleEstimator

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.estimators.SimpleEstimator
-
-
-
-
public final class SimpleEstimator
extends java.lang.Object
- - -

-Estimates the "goodness" of a BoilerpipeExtractor on a given document. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static SimpleEstimatorINSTANCE - -
-          Returns the singleton instance of SimpleEstimator
-  - - - - - - - - - - - -
-Method Summary
- booleanisLowQuality(TextDocumentStatistics dsBefore, - TextDocumentStatistics dsAfter) - -
-          Given the statistics of the document before and after applying the BoilerpipeExtractor, - can we regard the extraction quality (too) low?
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final SimpleEstimator INSTANCE
-
-
Returns the singleton instance of SimpleEstimator -

-

-
-
- - - - - - - - -
-Method Detail
- -

-isLowQuality

-
-public boolean isLowQuality(TextDocumentStatistics dsBefore,
-                            TextDocumentStatistics dsAfter)
-
-
Given the statistics of the document before and after applying the BoilerpipeExtractor, - can we regard the extraction quality (too) low? - - Works well with DefaultExtractor, ArticleExtractor and others. -

-

-
Parameters:
dsBefore -
dsAfter - -
Returns:
true if low quality is to be expected.
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/estimators/class-use/SimpleEstimator.html b/javadoc/1.2/de/l3s/boilerpipe/estimators/class-use/SimpleEstimator.html deleted file mode 100644 index 976d26a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/estimators/class-use/SimpleEstimator.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.estimators.SimpleEstimator (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.estimators.SimpleEstimator

-
- - - - - - - - - -
-Packages that use SimpleEstimator
de.l3s.boilerpipe.estimators  
-  -

- - - - - -
-Uses of SimpleEstimator in de.l3s.boilerpipe.estimators
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.estimators declared as SimpleEstimator
-static SimpleEstimatorSimpleEstimator.INSTANCE - -
-          Returns the singleton instance of SimpleEstimator
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/estimators/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/estimators/package-frame.html deleted file mode 100644 index 7049c2c..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/estimators/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -de.l3s.boilerpipe.estimators (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.estimators - - - - -
-Classes  - -
-SimpleEstimator
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/estimators/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/estimators/package-summary.html deleted file mode 100644 index 978048b..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/estimators/package-summary.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - -de.l3s.boilerpipe.estimators (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.estimators -

- - - - - - - - - -
-Class Summary
SimpleEstimatorEstimates the "goodness" of a BoilerpipeExtractor on a given document.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/estimators/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/estimators/package-tree.html deleted file mode 100644 index 61b73b1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/estimators/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -de.l3s.boilerpipe.estimators Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.estimators -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/estimators/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/estimators/package-use.html deleted file mode 100644 index 8e7ca66..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/estimators/package-use.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.estimators (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.estimators

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.estimators
de.l3s.boilerpipe.estimators  
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.estimators used by de.l3s.boilerpipe.estimators
SimpleEstimator - -
-          Estimates the "goodness" of a BoilerpipeExtractor on a given document.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/ArticleExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/ArticleExtractor.html deleted file mode 100644 index 497556c..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/ArticleExtractor.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -ArticleExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ArticleExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.ArticleExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class ArticleExtractor
extends ExtractorBase
- - -

-A full-text extractor which is tuned towards news articles. In this scenario - it achieves higher accuracy than DefaultExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ArticleExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ArticleExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ArticleExtractorgetInstance() - -
-          Returns the singleton instance for ArticleExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ArticleExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ArticleExtractor

-
-public ArticleExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ArticleExtractor getInstance()
-
-
Returns the singleton instance for ArticleExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html deleted file mode 100644 index 762a33f..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/ArticleSentencesExtractor.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -ArticleSentencesExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ArticleSentencesExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.ArticleSentencesExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class ArticleSentencesExtractor
extends ExtractorBase
- - -

-A full-text extractor which is tuned towards extracting sentences from news articles. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ArticleSentencesExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ArticleSentencesExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ArticleSentencesExtractorgetInstance() - -
-          Returns the singleton instance for ArticleSentencesExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ArticleSentencesExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ArticleSentencesExtractor

-
-public ArticleSentencesExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ArticleSentencesExtractor getInstance()
-
-
Returns the singleton instance for ArticleSentencesExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/CanolaExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/CanolaExtractor.html deleted file mode 100644 index a760f10..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/CanolaExtractor.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - -CanolaExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class CanolaExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.CanolaExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public class CanolaExtractor
extends ExtractorBase
- - -

-A full-text extractor trained on krdwrd Canola - . Works well with SimpleEstimator, too. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static BoilerpipeFilterCLASSIFIER - -
-          The actual classifier, exposed.
-static CanolaExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
CanolaExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static CanolaExtractorgetInstance() - -
-          Returns the singleton instance for CanolaExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final CanolaExtractor INSTANCE
-
-
-
-
-
- -

-CLASSIFIER

-
-public static final BoilerpipeFilter CLASSIFIER
-
-
The actual classifier, exposed. -

-

-
-
- - - - - - - - -
-Constructor Detail
- -

-CanolaExtractor

-
-public CanolaExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static CanolaExtractor getInstance()
-
-
Returns the singleton instance for CanolaExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/CommonExtractors.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/CommonExtractors.html deleted file mode 100644 index 41a36e2..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/CommonExtractors.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - -CommonExtractors (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class CommonExtractors

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.CommonExtractors
-
-
-
-
public final class CommonExtractors
extends java.lang.Object
- - -

-Provides quick access to common BoilerpipeExtractors. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static ArticleExtractorARTICLE_EXTRACTOR - -
-          Works very well for most types of Article-like HTML.
-static CanolaExtractorCANOLA_EXTRACTOR - -
-          Trained on krdwrd Canola (different definition of "boilerplate").
-static DefaultExtractorDEFAULT_EXTRACTOR - -
-          Usually worse than ArticleExtractor, but simpler/no heuristics.
-static KeepEverythingExtractorKEEP_EVERYTHING_EXTRACTOR - -
-          Dummy Extractor; should return the input text.
-static LargestContentExtractorLARGEST_CONTENT_EXTRACTOR - -
-          Like DefaultExtractor, but keeps the largest text block only.
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-ARTICLE_EXTRACTOR

-
-public static final ArticleExtractor ARTICLE_EXTRACTOR
-
-
Works very well for most types of Article-like HTML. -

-

-
-
-
- -

-DEFAULT_EXTRACTOR

-
-public static final DefaultExtractor DEFAULT_EXTRACTOR
-
-
Usually worse than ArticleExtractor, but simpler/no heuristics. -

-

-
-
-
- -

-LARGEST_CONTENT_EXTRACTOR

-
-public static final LargestContentExtractor LARGEST_CONTENT_EXTRACTOR
-
-
Like DefaultExtractor, but keeps the largest text block only. -

-

-
-
-
- -

-CANOLA_EXTRACTOR

-
-public static final CanolaExtractor CANOLA_EXTRACTOR
-
-
Trained on krdwrd Canola (different definition of "boilerplate"). You may - give it a try. -

-

-
-
-
- -

-KEEP_EVERYTHING_EXTRACTOR

-
-public static final KeepEverythingExtractor KEEP_EVERYTHING_EXTRACTOR
-
-
Dummy Extractor; should return the input text. Use this to double-check - that your problem is within a particular BoilerpipeExtractor, or - somewhere else. -

-

-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/DefaultExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/DefaultExtractor.html deleted file mode 100644 index 9d2f904..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/DefaultExtractor.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -DefaultExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class DefaultExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.DefaultExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public class DefaultExtractor
extends ExtractorBase
- - -

-A quite generic full-text extractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static DefaultExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
DefaultExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static DefaultExtractorgetInstance() - -
-          Returns the singleton instance for DefaultExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final DefaultExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DefaultExtractor

-
-public DefaultExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static DefaultExtractor getInstance()
-
-
Returns the singleton instance for DefaultExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/ExtractorBase.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/ExtractorBase.html deleted file mode 100644 index 30f8083..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/ExtractorBase.html +++ /dev/null @@ -1,400 +0,0 @@ - - - - - - -ExtractorBase (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class ExtractorBase

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
Direct Known Subclasses:
ArticleExtractor, ArticleSentencesExtractor, CanolaExtractor, DefaultExtractor, KeepEverythingExtractor, KeepEverythingWithMinKWordsExtractor, LargestContentExtractor, LargestContentExtractor2, NumWordsRulesExtractor
-
-
-
-
public abstract class ExtractorBase
extends java.lang.Object
implements BoilerpipeExtractor
- - -

-The base class of Extractors. Also provides some helper methods to quickly - retrieve the text that remained after processing. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
ExtractorBase() - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetText(org.xml.sax.InputSource is) - -
-          Extracts text from the HTML code available from the given InputSource.
- java.lang.StringgetText(java.io.Reader r) - -
-          Extracts text from the HTML code available from the given Reader.
- java.lang.StringgetText(java.lang.String html) - -
-          Extracts text from the HTML code given as a String.
- java.lang.StringgetText(TextDocument doc) - -
-          Extracts text from the given TextDocument object.
- java.lang.StringgetText(java.net.URL url) - -
-          Extracts text from the HTML code available from the given URL.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
- - - - - - - -
Methods inherited from interface de.l3s.boilerpipe.BoilerpipeFilter
process
-  -

- - - - - - - - -
-Constructor Detail
- -

-ExtractorBase

-
-public ExtractorBase()
-
-
- - - - - - - - -
-Method Detail
- -

-getText

-
-public java.lang.String getText(java.lang.String html)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code given as a String. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
html - The HTML code as a String. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(org.xml.sax.InputSource is)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given InputSource. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
is - The InputSource containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(java.net.URL url)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given URL. - NOTE: This method is mainly to be used for show case purposes. If you are - going to crawl the Web, consider using getText(InputSource) - instead. -

-

-
-
-
-
Parameters:
url - The URL pointing to the HTML code. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(java.io.Reader r)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the HTML code available from the given Reader. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
r - The Reader containing the HTML -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getText

-
-public java.lang.String getText(TextDocument doc)
-                         throws BoilerpipeProcessingException
-
-
Extracts text from the given TextDocument object. -

-

-
Specified by:
getText in interface BoilerpipeExtractor
-
-
-
Parameters:
doc - The TextDocument. -
Returns:
The extracted text. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html deleted file mode 100644 index 724b569..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/KeepEverythingExtractor.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - -KeepEverythingExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class KeepEverythingExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.KeepEverythingExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class KeepEverythingExtractor
extends ExtractorBase
- - -

-Marks everything as content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static KeepEverythingExtractorINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepEverythingExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html deleted file mode 100644 index dc804f3..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/KeepEverythingWithMinKWordsExtractor.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - -KeepEverythingWithMinKWordsExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class KeepEverythingWithMinKWordsExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class KeepEverythingWithMinKWordsExtractor
extends ExtractorBase
- - -

-A full-text extractor which extracts the largest text component of a page. - For news articles, it may perform better than the DefaultExtractor, - but usually worse than ArticleExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
KeepEverythingWithMinKWordsExtractor(int kMin) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-KeepEverythingWithMinKWordsExtractor

-
-public KeepEverythingWithMinKWordsExtractor(int kMin)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/LargestContentExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/LargestContentExtractor.html deleted file mode 100644 index 785c9bc..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/LargestContentExtractor.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -LargestContentExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class LargestContentExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.LargestContentExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class LargestContentExtractor
extends ExtractorBase
- - -

-A full-text extractor which extracts the largest text component of a page. - For news articles, it may perform better than the DefaultExtractor, - but usually worse than ArticleExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static LargestContentExtractorINSTANCE - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static LargestContentExtractorgetInstance() - -
-          Returns the singleton instance for LargestContentExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final LargestContentExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static LargestContentExtractor getInstance()
-
-
Returns the singleton instance for LargestContentExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/LargestContentExtractor2.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/LargestContentExtractor2.html deleted file mode 100644 index c6cece0..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/LargestContentExtractor2.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -LargestContentExtractor2 (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class LargestContentExtractor2

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.LargestContentExtractor2
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public final class LargestContentExtractor2
extends ExtractorBase
- - -

-A full-text extractor which extracts the largest text component of a page. - For news articles, it may perform better than the DefaultExtractor, - but usually worse than ArticleExtractor. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static LargestContentExtractor2INSTANCE - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static LargestContentExtractor2getInstance() - -
-          Returns the singleton instance for LargestContentExtractor2.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final LargestContentExtractor2 INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static LargestContentExtractor2 getInstance()
-
-
Returns the singleton instance for LargestContentExtractor2. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html deleted file mode 100644 index 2022ee9..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/NumWordsRulesExtractor.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - -NumWordsRulesExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.extractors -
-Class NumWordsRulesExtractor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.extractors.ExtractorBase
-      extended by de.l3s.boilerpipe.extractors.NumWordsRulesExtractor
-
-
-
All Implemented Interfaces:
BoilerpipeExtractor, BoilerpipeFilter
-
-
-
-
public class NumWordsRulesExtractor
extends ExtractorBase
- - -

-A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block). -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static NumWordsRulesExtractorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
NumWordsRulesExtractor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static NumWordsRulesExtractorgetInstance() - -
-          Returns the singleton instance for NumWordsRulesExtractor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.extractors.ExtractorBase
getText, getText, getText, getText, getText
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final NumWordsRulesExtractor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-NumWordsRulesExtractor

-
-public NumWordsRulesExtractor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static NumWordsRulesExtractor getInstance()
-
-
Returns the singleton instance for NumWordsRulesExtractor. -

-

-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html deleted file mode 100644 index 53b4664..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ArticleExtractor.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ArticleExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ArticleExtractor

-
- - - - - - - - - -
-Packages that use ArticleExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ArticleExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as ArticleExtractor
-static ArticleExtractorCommonExtractors.ARTICLE_EXTRACTOR - -
-          Works very well for most types of Article-like HTML.
-static ArticleExtractorArticleExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return ArticleExtractor
-static ArticleExtractorArticleExtractor.getInstance() - -
-          Returns the singleton instance for ArticleExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html deleted file mode 100644 index 728712f..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ArticleSentencesExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ArticleSentencesExtractor

-
- - - - - - - - - -
-Packages that use ArticleSentencesExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ArticleSentencesExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as ArticleSentencesExtractor
-static ArticleSentencesExtractorArticleSentencesExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return ArticleSentencesExtractor
-static ArticleSentencesExtractorArticleSentencesExtractor.getInstance() - -
-          Returns the singleton instance for ArticleSentencesExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/CanolaExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/CanolaExtractor.html deleted file mode 100644 index 17cd644..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/CanolaExtractor.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.CanolaExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.CanolaExtractor

-
- - - - - - - - - -
-Packages that use CanolaExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of CanolaExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as CanolaExtractor
-static CanolaExtractorCommonExtractors.CANOLA_EXTRACTOR - -
-          Trained on krdwrd Canola (different definition of "boilerplate").
-static CanolaExtractorCanolaExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return CanolaExtractor
-static CanolaExtractorCanolaExtractor.getInstance() - -
-          Returns the singleton instance for CanolaExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/CommonExtractors.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/CommonExtractors.html deleted file mode 100644 index 92b082c..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/CommonExtractors.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.CommonExtractors (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.CommonExtractors

-
-No usage of de.l3s.boilerpipe.extractors.CommonExtractors -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html deleted file mode 100644 index e10f1e8..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/DefaultExtractor.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.DefaultExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.DefaultExtractor

-
- - - - - - - - - -
-Packages that use DefaultExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of DefaultExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as DefaultExtractor
-static DefaultExtractorCommonExtractors.DEFAULT_EXTRACTOR - -
-          Usually worse than ArticleExtractor, but simpler/no heuristics.
-static DefaultExtractorDefaultExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return DefaultExtractor
-static DefaultExtractorDefaultExtractor.getInstance() - -
-          Returns the singleton instance for DefaultExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html deleted file mode 100644 index 5a5b7cd..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/ExtractorBase.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.ExtractorBase (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.ExtractorBase

-
- - - - - - - - - -
-Packages that use ExtractorBase
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of ExtractorBase in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Subclasses of ExtractorBase in de.l3s.boilerpipe.extractors
- classArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
- classArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
- classCanolaExtractor - -
-          A full-text extractor trained on krdwrd Canola - .
- classDefaultExtractor - -
-          A quite generic full-text extractor.
- classKeepEverythingExtractor - -
-          Marks everything as content.
- classKeepEverythingWithMinKWordsExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
- classLargestContentExtractor2 - -
-          A full-text extractor which extracts the largest text component of a page.
- classNumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html deleted file mode 100644 index ffa6571..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/KeepEverythingExtractor.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.KeepEverythingExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.KeepEverythingExtractor

-
- - - - - - - - - -
-Packages that use KeepEverythingExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of KeepEverythingExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as KeepEverythingExtractor
-static KeepEverythingExtractorKeepEverythingExtractor.INSTANCE - -
-           
-static KeepEverythingExtractorCommonExtractors.KEEP_EVERYTHING_EXTRACTOR - -
-          Dummy Extractor; should return the input text.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html deleted file mode 100644 index 2ed5f5b..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/KeepEverythingWithMinKWordsExtractor.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor

-
-No usage of de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html deleted file mode 100644 index 83cb06f..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.LargestContentExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.LargestContentExtractor

-
- - - - - - - - - -
-Packages that use LargestContentExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of LargestContentExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as LargestContentExtractor
-static LargestContentExtractorLargestContentExtractor.INSTANCE - -
-           
-static LargestContentExtractorCommonExtractors.LARGEST_CONTENT_EXTRACTOR - -
-          Like DefaultExtractor, but keeps the largest text block only.
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return LargestContentExtractor
-static LargestContentExtractorLargestContentExtractor.getInstance() - -
-          Returns the singleton instance for LargestContentExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor2.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor2.html deleted file mode 100644 index f9ee324..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/LargestContentExtractor2.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.LargestContentExtractor2 (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.LargestContentExtractor2

-
- - - - - - - - - -
-Packages that use LargestContentExtractor2
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of LargestContentExtractor2 in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as LargestContentExtractor2
-static LargestContentExtractor2LargestContentExtractor2.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return LargestContentExtractor2
-static LargestContentExtractor2LargestContentExtractor2.getInstance() - -
-          Returns the singleton instance for LargestContentExtractor2.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html deleted file mode 100644 index fdb79d3..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/class-use/NumWordsRulesExtractor.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.extractors.NumWordsRulesExtractor

-
- - - - - - - - - -
-Packages that use NumWordsRulesExtractor
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - -
-Uses of NumWordsRulesExtractor in de.l3s.boilerpipe.extractors
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.extractors declared as NumWordsRulesExtractor
-static NumWordsRulesExtractorNumWordsRulesExtractor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.extractors that return NumWordsRulesExtractor
-static NumWordsRulesExtractorNumWordsRulesExtractor.getInstance() - -
-          Returns the singleton instance for NumWordsRulesExtractor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/package-frame.html deleted file mode 100644 index 7543f9d..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/package-frame.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.extractors - - - - -
-Classes  - -
-ArticleExtractor -
-ArticleSentencesExtractor -
-CanolaExtractor -
-CommonExtractors -
-DefaultExtractor -
-ExtractorBase -
-KeepEverythingExtractor -
-KeepEverythingWithMinKWordsExtractor -
-LargestContentExtractor -
-LargestContentExtractor2 -
-NumWordsRulesExtractor
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/package-summary.html deleted file mode 100644 index 1238588..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/package-summary.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.extractors -

- -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
ArticleExtractorA full-text extractor which is tuned towards news articles.
ArticleSentencesExtractorA full-text extractor which is tuned towards extracting sentences from news articles.
CanolaExtractorA full-text extractor trained on krdwrd Canola - .
CommonExtractorsProvides quick access to common BoilerpipeExtractors.
DefaultExtractorA quite generic full-text extractor.
ExtractorBaseThe base class of Extractors.
KeepEverythingExtractorMarks everything as content.
KeepEverythingWithMinKWordsExtractorA full-text extractor which extracts the largest text component of a page.
LargestContentExtractorA full-text extractor which extracts the largest text component of a page.
LargestContentExtractor2A full-text extractor which extracts the largest text component of a page.
NumWordsRulesExtractorA quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  - -

-

-Package de.l3s.boilerpipe.extractors Description -

- -

-

-This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/package-tree.html deleted file mode 100644 index 1ccf6f8..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/package-tree.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - -de.l3s.boilerpipe.extractors Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.extractors -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/extractors/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/extractors/package-use.html deleted file mode 100644 index ed3777f..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/extractors/package-use.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.extractors (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.extractors

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.extractors
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.extractors used by de.l3s.boilerpipe.extractors
ArticleExtractor - -
-          A full-text extractor which is tuned towards news articles.
ArticleSentencesExtractor - -
-          A full-text extractor which is tuned towards extracting sentences from news articles.
CanolaExtractor - -
-          A full-text extractor trained on krdwrd Canola - .
DefaultExtractor - -
-          A quite generic full-text extractor.
ExtractorBase - -
-          The base class of Extractors.
KeepEverythingExtractor - -
-          Marks everything as content.
LargestContentExtractor - -
-          A full-text extractor which extracts the largest text component of a page.
LargestContentExtractor2 - -
-          A full-text extractor which extracts the largest text component of a page.
NumWordsRulesExtractor - -
-          A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/CopyOfTerminatingBlocksFinder.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/CopyOfTerminatingBlocksFinder.html deleted file mode 100644 index 4f6bf8a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/CopyOfTerminatingBlocksFinder.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - -CopyOfTerminatingBlocksFinder (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class CopyOfTerminatingBlocksFinder

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.CopyOfTerminatingBlocksFinder
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class CopyOfTerminatingBlocksFinder
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Finds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT. This can be used - in conjunction with a downstream IgnoreBlocksAfterContentFilter. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
IgnoreBlocksAfterContentFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static CopyOfTerminatingBlocksFinderINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
CopyOfTerminatingBlocksFinder() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static CopyOfTerminatingBlocksFindergetInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final CopyOfTerminatingBlocksFinder INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-CopyOfTerminatingBlocksFinder

-
-public CopyOfTerminatingBlocksFinder()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static CopyOfTerminatingBlocksFinder getInstance()
-
-
Returns the singleton instance for TerminatingBlocksFinder. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html deleted file mode 100644 index 1628e23..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/DensityRulesClassifier.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - -DensityRulesClassifier (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class DensityRulesClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.DensityRulesClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class DensityRulesClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static DensityRulesClassifierINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
DensityRulesClassifier() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  booleanclassify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-static DensityRulesClassifiergetInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final DensityRulesClassifier INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DensityRulesClassifier

-
-public DensityRulesClassifier()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static DensityRulesClassifier getInstance()
-
-
Returns the singleton instance for RulebasedBoilerpipeClassifier. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-classify

-
-protected boolean classify(TextBlock prev,
-                           TextBlock curr,
-                           TextBlock next)
-
-
-
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html deleted file mode 100644 index 1784e6d..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFilter.html +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - -IgnoreBlocksAfterContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class IgnoreBlocksAfterContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class IgnoreBlocksAfterContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT. These marks are ignored - unless a minimum number of words in content blocks occur before this mark (default: 60). - This can be used in conjunction with an upstream TerminatingBlocksFinder. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
TerminatingBlocksFinder
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static IgnoreBlocksAfterContentFilterDEFAULT_INSTANCE - -
-           
-static IgnoreBlocksAfterContentFilterINSTANCE_200 - -
-           
-  - - - - - - - - - - -
-Constructor Summary
IgnoreBlocksAfterContentFilter(int minNumWords) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-static IgnoreBlocksAfterContentFiltergetDefaultInstance() - -
-          Returns the singleton instance for DeleteBlocksAfterContentFilter.
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-DEFAULT_INSTANCE

-
-public static final IgnoreBlocksAfterContentFilter DEFAULT_INSTANCE
-
-
-
-
-
- -

-INSTANCE_200

-
-public static final IgnoreBlocksAfterContentFilter INSTANCE_200
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-IgnoreBlocksAfterContentFilter

-
-public IgnoreBlocksAfterContentFilter(int minNumWords)
-
-
- - - - - - - - -
-Method Detail
- -

-getDefaultInstance

-
-public static IgnoreBlocksAfterContentFilter getDefaultInstance()
-
-
Returns the singleton instance for DeleteBlocksAfterContentFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.html deleted file mode 100644 index 58df132..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/IgnoreBlocksAfterContentFromEndFilter.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - -IgnoreBlocksAfterContentFromEndFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class IgnoreBlocksAfterContentFromEndFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFromEndFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class IgnoreBlocksAfterContentFromEndFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT, and after any content block. - This filter can be used in conjunction with an upstream TerminatingBlocksFinder. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
TerminatingBlocksFinder
-
- -

- - - - - - - - - - - -
-Field Summary
-static IgnoreBlocksAfterContentFromEndFilterINSTANCE - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final IgnoreBlocksAfterContentFromEndFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html deleted file mode 100644 index ea08885..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/KeepLargestFulltextBlockFilter.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - -KeepLargestFulltextBlockFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class KeepLargestFulltextBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class KeepLargestFulltextBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps the largest TextBlock only (by the number of words). In case of - more than one block with the same number of words, the first block is chosen. - All discarded blocks are marked "not content" and flagged as - DefaultLabels.MIGHT_BE_CONTENT. - - As opposed to KeepLargestBlockFilter, the number of words are - computed using HeuristicFilterBase.getNumFullTextWords(TextBlock), which only counts - words that occur in text elements with at least 9 words and are thus believed to be full text. - - NOTE: Without language-specific fine-tuning (i.e., running the default instance), this filter - may lead to suboptimal results. You better use KeepLargestBlockFilter instead, which - works at the level of number-of-words instead of text densities. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static KeepLargestFulltextBlockFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
KeepLargestFulltextBlockFilter() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepLargestFulltextBlockFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-KeepLargestFulltextBlockFilter

-
-public KeepLargestFulltextBlockFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html deleted file mode 100644 index 778c0d1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/MinFulltextWordsFilter.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - -MinFulltextWordsFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class MinFulltextWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinFulltextWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static MinFulltextWordsFilterDEFAULT_INSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
MinFulltextWordsFilter(int minWords) - -
-           
-  - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
-static MinFulltextWordsFiltergetDefaultInstance() - -
-           
-protected static intgetNumFullTextWords(TextBlock tb) - -
-           
-protected static intgetNumFullTextWords(TextBlock tb, - float minTextDensity) - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-DEFAULT_INSTANCE

-
-public static final MinFulltextWordsFilter DEFAULT_INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-MinFulltextWordsFilter

-
-public MinFulltextWordsFilter(int minWords)
-
-
- - - - - - - - -
-Method Detail
- -

-getDefaultInstance

-
-public static MinFulltextWordsFilter getDefaultInstance()
-
-
-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb)
-
-
-
-
-
-
- -

-getNumFullTextWords

-
-protected static int getNumFullTextWords(TextBlock tb,
-                                         float minTextDensity)
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html deleted file mode 100644 index 01d8cf5..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/NumWordsRulesClassifier.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - -NumWordsRulesClassifier (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class NumWordsRulesClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class NumWordsRulesClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static NumWordsRulesClassifierINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
NumWordsRulesClassifier() - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  booleanclassify(TextBlock prev, - TextBlock curr, - TextBlock next) - -
-           
-static NumWordsRulesClassifiergetInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final NumWordsRulesClassifier INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-NumWordsRulesClassifier

-
-public NumWordsRulesClassifier()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static NumWordsRulesClassifier getInstance()
-
-
Returns the singleton instance for RulebasedBoilerpipeClassifier. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-classify

-
-protected boolean classify(TextBlock prev,
-                           TextBlock curr,
-                           TextBlock next)
-
-
-
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html deleted file mode 100644 index 5cedcac..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/TerminatingBlocksFinder.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - -TerminatingBlocksFinder (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.english -
-Class TerminatingBlocksFinder

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class TerminatingBlocksFinder
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Finds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT. This can be used - in conjunction with a downstream IgnoreBlocksAfterContentFilter. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
IgnoreBlocksAfterContentFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static TerminatingBlocksFinderINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
TerminatingBlocksFinder() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static TerminatingBlocksFindergetInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final TerminatingBlocksFinder INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-TerminatingBlocksFinder

-
-public TerminatingBlocksFinder()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static TerminatingBlocksFinder getInstance()
-
-
Returns the singleton instance for TerminatingBlocksFinder. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/CopyOfTerminatingBlocksFinder.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/CopyOfTerminatingBlocksFinder.html deleted file mode 100644 index 71975d2..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/CopyOfTerminatingBlocksFinder.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.CopyOfTerminatingBlocksFinder (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.CopyOfTerminatingBlocksFinder

-
- - - - - - - - - -
-Packages that use CopyOfTerminatingBlocksFinder
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of CopyOfTerminatingBlocksFinder in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as CopyOfTerminatingBlocksFinder
-static CopyOfTerminatingBlocksFinderCopyOfTerminatingBlocksFinder.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return CopyOfTerminatingBlocksFinder
-static CopyOfTerminatingBlocksFinderCopyOfTerminatingBlocksFinder.getInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html deleted file mode 100644 index a8d19ef..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/DensityRulesClassifier.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.DensityRulesClassifier (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.DensityRulesClassifier

-
- - - - - - - - - -
-Packages that use DensityRulesClassifier
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of DensityRulesClassifier in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as DensityRulesClassifier
-static DensityRulesClassifierDensityRulesClassifier.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return DensityRulesClassifier
-static DensityRulesClassifierDensityRulesClassifier.getInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html deleted file mode 100644 index dc75ff3..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFilter.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter

-
- - - - - - - - - -
-Packages that use IgnoreBlocksAfterContentFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of IgnoreBlocksAfterContentFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as IgnoreBlocksAfterContentFilter
-static IgnoreBlocksAfterContentFilterIgnoreBlocksAfterContentFilter.DEFAULT_INSTANCE - -
-           
-static IgnoreBlocksAfterContentFilterIgnoreBlocksAfterContentFilter.INSTANCE_200 - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return IgnoreBlocksAfterContentFilter
-static IgnoreBlocksAfterContentFilterIgnoreBlocksAfterContentFilter.getDefaultInstance() - -
-          Returns the singleton instance for DeleteBlocksAfterContentFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFromEndFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFromEndFilter.html deleted file mode 100644 index 8f3ce65..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/IgnoreBlocksAfterContentFromEndFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFromEndFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFromEndFilter

-
- - - - - - - - - -
-Packages that use IgnoreBlocksAfterContentFromEndFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of IgnoreBlocksAfterContentFromEndFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as IgnoreBlocksAfterContentFromEndFilter
-static IgnoreBlocksAfterContentFromEndFilterIgnoreBlocksAfterContentFromEndFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html deleted file mode 100644 index abecb6b..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/KeepLargestFulltextBlockFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter

-
- - - - - - - - - -
-Packages that use KeepLargestFulltextBlockFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of KeepLargestFulltextBlockFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as KeepLargestFulltextBlockFilter
-static KeepLargestFulltextBlockFilterKeepLargestFulltextBlockFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html deleted file mode 100644 index 8b28e12..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/MinFulltextWordsFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter

-
- - - - - - - - - -
-Packages that use MinFulltextWordsFilter
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of MinFulltextWordsFilter in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as MinFulltextWordsFilter
-static MinFulltextWordsFilterMinFulltextWordsFilter.DEFAULT_INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return MinFulltextWordsFilter
-static MinFulltextWordsFilterMinFulltextWordsFilter.getDefaultInstance() - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html deleted file mode 100644 index 3aec0df..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/NumWordsRulesClassifier.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier

-
- - - - - - - - - -
-Packages that use NumWordsRulesClassifier
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of NumWordsRulesClassifier in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as NumWordsRulesClassifier
-static NumWordsRulesClassifierNumWordsRulesClassifier.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return NumWordsRulesClassifier
-static NumWordsRulesClassifierNumWordsRulesClassifier.getInstance() - -
-          Returns the singleton instance for RulebasedBoilerpipeClassifier.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html deleted file mode 100644 index b672a50..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/class-use/TerminatingBlocksFinder.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder

-
- - - - - - - - - -
-Packages that use TerminatingBlocksFinder
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - -
-Uses of TerminatingBlocksFinder in de.l3s.boilerpipe.filters.english
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.english declared as TerminatingBlocksFinder
-static TerminatingBlocksFinderTerminatingBlocksFinder.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.english that return TerminatingBlocksFinder
-static TerminatingBlocksFinderTerminatingBlocksFinder.getInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-frame.html deleted file mode 100644 index bc52003..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-frame.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.filters.english - - - - -
-Classes  - -
-CopyOfTerminatingBlocksFinder -
-DensityRulesClassifier -
-IgnoreBlocksAfterContentFilter -
-IgnoreBlocksAfterContentFromEndFilter -
-KeepLargestFulltextBlockFilter -
-MinFulltextWordsFilter -
-NumWordsRulesClassifier -
-TerminatingBlocksFinder
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-summary.html deleted file mode 100644 index 2ad3662..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-summary.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.english -

- -The BoilerpipeFilters in this package have only been tested on English text. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
CopyOfTerminatingBlocksFinderFinds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT.
DensityRulesClassifierClassifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
IgnoreBlocksAfterContentFilterMarks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT.
IgnoreBlocksAfterContentFromEndFilterMarks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT, and after any content block.
KeepLargestFulltextBlockFilterKeeps the largest TextBlock only (by the number of words).
MinFulltextWordsFilterKeeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default.
NumWordsRulesClassifierClassifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
TerminatingBlocksFinderFinds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT.
-  - -

-

-Package de.l3s.boilerpipe.filters.english Description -

- -

-

-The BoilerpipeFilters in this package have only been tested on English text. -

-

-That is, they will probably work with other Western languages, but maybe need some parameter tuning to perform well. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-tree.html deleted file mode 100644 index e6193f7..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-tree.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.english Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.english -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-use.html deleted file mode 100644 index 16ee5f8..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/english/package-use.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.english (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.english

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.english
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.english used by de.l3s.boilerpipe.filters.english
CopyOfTerminatingBlocksFinder - -
-          Finds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT.
DensityRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
IgnoreBlocksAfterContentFilter - -
-          Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT.
IgnoreBlocksAfterContentFromEndFilter - -
-          Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT, and after any content block.
KeepLargestFulltextBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
MinFulltextWordsFilter - -
-          Keeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default.
NumWordsRulesClassifier - -
-          Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
TerminatingBlocksFinder - -
-          Finds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.html deleted file mode 100644 index 11d6dcc..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/AddPrecedingLabelsFilter.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - -AddPrecedingLabelsFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class AddPrecedingLabelsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.AddPrecedingLabelsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class AddPrecedingLabelsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Adds the labels of the preceding block to the current block, optionally adding a prefix. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static AddPrecedingLabelsFilterINSTANCE - -
-           
-static AddPrecedingLabelsFilterINSTANCE_PRE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
AddPrecedingLabelsFilter(java.lang.String labelPrefix) - -
-          Creates a new AddPrecedingLabelsFilter instance.
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final AddPrecedingLabelsFilter INSTANCE
-
-
-
-
-
- -

-INSTANCE_PRE

-
-public static final AddPrecedingLabelsFilter INSTANCE_PRE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-AddPrecedingLabelsFilter

-
-public AddPrecedingLabelsFilter(java.lang.String labelPrefix)
-
-
Creates a new AddPrecedingLabelsFilter instance. -

-

-
Parameters:
maxBlocksDistance - The maximum distance in blocks.
contentOnly -
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ArticleMetadataFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ArticleMetadataFilter.html deleted file mode 100644 index 90ebf74..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ArticleMetadataFilter.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - -ArticleMetadataFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class ArticleMetadataFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.ArticleMetadataFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class ArticleMetadataFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
-static ArticleMetadataFilterINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ArticleMetadataFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html deleted file mode 100644 index 8d48db1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/BlockProximityFusion.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - -BlockProximityFusion (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class BlockProximityFusion

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class BlockProximityFusion
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit. - This probably makes sense only in cases where an upstream filter already has removed some blocks. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static BlockProximityFusionMAX_DISTANCE_1 - -
-           
-static BlockProximityFusionMAX_DISTANCE_1_CONTENT_ONLY - -
-           
-static BlockProximityFusionMAX_DISTANCE_1_CONTENT_ONLY_SAME_TAGLEVEL - -
-           
-static BlockProximityFusionMAX_DISTANCE_1_SAME_TAGLEVEL - -
-           
-  - - - - - - - - - - -
-Constructor Summary
BlockProximityFusion(int maxBlocksDistance, - boolean contentOnly, - boolean sameTagLevelOnly) - -
-          Creates a new BlockProximityFusion instance.
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-MAX_DISTANCE_1

-
-public static final BlockProximityFusion MAX_DISTANCE_1
-
-
-
-
-
- -

-MAX_DISTANCE_1_SAME_TAGLEVEL

-
-public static final BlockProximityFusion MAX_DISTANCE_1_SAME_TAGLEVEL
-
-
-
-
-
- -

-MAX_DISTANCE_1_CONTENT_ONLY

-
-public static final BlockProximityFusion MAX_DISTANCE_1_CONTENT_ONLY
-
-
-
-
-
- -

-MAX_DISTANCE_1_CONTENT_ONLY_SAME_TAGLEVEL

-
-public static final BlockProximityFusion MAX_DISTANCE_1_CONTENT_ONLY_SAME_TAGLEVEL
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-BlockProximityFusion

-
-public BlockProximityFusion(int maxBlocksDistance,
-                            boolean contentOnly,
-                            boolean sameTagLevelOnly)
-
-
Creates a new BlockProximityFusion instance. -

-

-
Parameters:
maxBlocksDistance - The maximum distance in blocks.
contentOnly -
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ContentFusion.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ContentFusion.html deleted file mode 100644 index d505c7b..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ContentFusion.html +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - -ContentFusion (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class ContentFusion

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.ContentFusion
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class ContentFusion
extends java.lang.Object
implements BoilerpipeFilter
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
-static ContentFusionINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ContentFusion() - -
-          Creates a new ContentFusion instance.
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ContentFusion INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ContentFusion

-
-public ContentFusion()
-
-
Creates a new ContentFusion instance. -

-

- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html deleted file mode 100644 index 1b91a01..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/DocumentTitleMatchClassifier.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - -DocumentTitleMatchClassifier (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class DocumentTitleMatchClassifier

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class DocumentTitleMatchClassifier
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
DocumentTitleMatchClassifier(java.lang.String title) - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
- java.util.Set<java.lang.String>getPotentialTitles() - -
-           
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-DocumentTitleMatchClassifier

-
-public DocumentTitleMatchClassifier(java.lang.String title)
-
-
- - - - - - - - -
-Method Detail
- -

-getPotentialTitles

-
-public java.util.Set<java.lang.String> getPotentialTitles()
-
-
-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html deleted file mode 100644 index fc0529c..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/ExpandTitleToContentFilter.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - -ExpandTitleToContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class ExpandTitleToContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class ExpandTitleToContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT. - - This filter is quite specific to the news domain. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static ExpandTitleToContentFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
ExpandTitleToContentFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static ExpandTitleToContentFiltergetInstance() - -
-          Returns the singleton instance for ExpandTitleToContentFilter.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final ExpandTitleToContentFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-ExpandTitleToContentFilter

-
-public ExpandTitleToContentFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static ExpandTitleToContentFilter getInstance()
-
-
Returns the singleton instance for ExpandTitleToContentFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html deleted file mode 100644 index ff4f9d3..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/KeepLargestBlockFilter.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - -KeepLargestBlockFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class KeepLargestBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class KeepLargestBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps the largest TextBlock only (by the number of words). In case of - more than one block with the same number of words, the first block is chosen. - All discarded blocks are marked "not content" and flagged as - DefaultLabels.MIGHT_BE_CONTENT. - - Note that, by default, only TextBlocks marked as "content" are taken into consideration. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - -
-Field Summary
-static KeepLargestBlockFilterINSTANCE - -
-           
-static KeepLargestBlockFilterINSTANCE_EXPAND_TO_SAME_TAGLEVEL - -
-           
-  - - - - - - - - - - -
-Constructor Summary
KeepLargestBlockFilter(boolean expandToSameLevelText) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final KeepLargestBlockFilter INSTANCE
-
-
-
-
-
- -

-INSTANCE_EXPAND_TO_SAME_TAGLEVEL

-
-public static final KeepLargestBlockFilter INSTANCE_EXPAND_TO_SAME_TAGLEVEL
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-KeepLargestBlockFilter

-
-public KeepLargestBlockFilter(boolean expandToSameLevelText)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/LabelFusion.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/LabelFusion.html deleted file mode 100644 index 4a9052c..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/LabelFusion.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - -LabelFusion (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class LabelFusion

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.LabelFusion
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class LabelFusion
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Fuses adjacent blocks if their labels are equal. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static LabelFusionINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
LabelFusion(java.lang.String labelPrefix) - -
-          Creates a new LabelFusion instance.
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final LabelFusion INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-LabelFusion

-
-public LabelFusion(java.lang.String labelPrefix)
-
-
Creates a new LabelFusion instance. -

-

-
Parameters:
maxBlocksDistance - The maximum distance in blocks.
contentOnly -
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html deleted file mode 100644 index 51c9bfd..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/SimpleBlockFusionProcessor.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - -SimpleBlockFusionProcessor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.heuristics -
-Class SimpleBlockFusionProcessor

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class SimpleBlockFusionProcessor
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Merges two subsequent blocks if their text densities are equal. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static SimpleBlockFusionProcessorINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
SimpleBlockFusionProcessor() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static SimpleBlockFusionProcessorgetInstance() - -
-          Returns the singleton instance for BlockFusionProcessor.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final SimpleBlockFusionProcessor INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-SimpleBlockFusionProcessor

-
-public SimpleBlockFusionProcessor()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static SimpleBlockFusionProcessor getInstance()
-
-
Returns the singleton instance for BlockFusionProcessor. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/AddPrecedingLabelsFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/AddPrecedingLabelsFilter.html deleted file mode 100644 index de2acff..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/AddPrecedingLabelsFilter.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.AddPrecedingLabelsFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.AddPrecedingLabelsFilter

-
- - - - - - - - - -
-Packages that use AddPrecedingLabelsFilter
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of AddPrecedingLabelsFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as AddPrecedingLabelsFilter
-static AddPrecedingLabelsFilterAddPrecedingLabelsFilter.INSTANCE - -
-           
-static AddPrecedingLabelsFilterAddPrecedingLabelsFilter.INSTANCE_PRE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ArticleMetadataFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ArticleMetadataFilter.html deleted file mode 100644 index 8cece54..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ArticleMetadataFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.ArticleMetadataFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.ArticleMetadataFilter

-
- - - - - - - - - -
-Packages that use ArticleMetadataFilter
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of ArticleMetadataFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as ArticleMetadataFilter
-static ArticleMetadataFilterArticleMetadataFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html deleted file mode 100644 index eb61591..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/BlockProximityFusion.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion

-
- - - - - - - - - -
-Packages that use BlockProximityFusion
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of BlockProximityFusion in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as BlockProximityFusion
-static BlockProximityFusionBlockProximityFusion.MAX_DISTANCE_1 - -
-           
-static BlockProximityFusionBlockProximityFusion.MAX_DISTANCE_1_CONTENT_ONLY - -
-           
-static BlockProximityFusionBlockProximityFusion.MAX_DISTANCE_1_CONTENT_ONLY_SAME_TAGLEVEL - -
-           
-static BlockProximityFusionBlockProximityFusion.MAX_DISTANCE_1_SAME_TAGLEVEL - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ContentFusion.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ContentFusion.html deleted file mode 100644 index 166e3be..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ContentFusion.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.ContentFusion (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.ContentFusion

-
- - - - - - - - - -
-Packages that use ContentFusion
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of ContentFusion in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as ContentFusion
-static ContentFusionContentFusion.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html deleted file mode 100644 index 2bedf87..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/DocumentTitleMatchClassifier.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier

-
-No usage of de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html deleted file mode 100644 index 612e9af..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/ExpandTitleToContentFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter

-
- - - - - - - - - -
-Packages that use ExpandTitleToContentFilter
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of ExpandTitleToContentFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as ExpandTitleToContentFilter
-static ExpandTitleToContentFilterExpandTitleToContentFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that return ExpandTitleToContentFilter
-static ExpandTitleToContentFilterExpandTitleToContentFilter.getInstance() - -
-          Returns the singleton instance for ExpandTitleToContentFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html deleted file mode 100644 index 4bc5e36..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/KeepLargestBlockFilter.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter

-
- - - - - - - - - -
-Packages that use KeepLargestBlockFilter
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of KeepLargestBlockFilter in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as KeepLargestBlockFilter
-static KeepLargestBlockFilterKeepLargestBlockFilter.INSTANCE - -
-           
-static KeepLargestBlockFilterKeepLargestBlockFilter.INSTANCE_EXPAND_TO_SAME_TAGLEVEL - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/LabelFusion.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/LabelFusion.html deleted file mode 100644 index acfde64..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/LabelFusion.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.LabelFusion (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.LabelFusion

-
- - - - - - - - - -
-Packages that use LabelFusion
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of LabelFusion in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as LabelFusion
-static LabelFusionLabelFusion.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html deleted file mode 100644 index abec27e..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/class-use/SimpleBlockFusionProcessor.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor

-
- - - - - - - - - -
-Packages that use SimpleBlockFusionProcessor
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - -
-Uses of SimpleBlockFusionProcessor in de.l3s.boilerpipe.filters.heuristics
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.heuristics declared as SimpleBlockFusionProcessor
-static SimpleBlockFusionProcessorSimpleBlockFusionProcessor.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.heuristics that return SimpleBlockFusionProcessor
-static SimpleBlockFusionProcessorSimpleBlockFusionProcessor.getInstance() - -
-          Returns the singleton instance for BlockFusionProcessor.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-frame.html deleted file mode 100644 index 9d2a9ef..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-frame.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.filters.heuristics - - - - -
-Classes  - -
-AddPrecedingLabelsFilter -
-ArticleMetadataFilter -
-BlockProximityFusion -
-ContentFusion -
-DocumentTitleMatchClassifier -
-ExpandTitleToContentFilter -
-KeepLargestBlockFilter -
-LabelFusion -
-SimpleBlockFusionProcessor
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-summary.html deleted file mode 100644 index 3f3ed4f..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-summary.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.heuristics -

- -The BoilerpipeFilters in this package are pure heuristics. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
AddPrecedingLabelsFilterAdds the labels of the preceding block to the current block, optionally adding a prefix.
ArticleMetadataFilter 
BlockProximityFusionFuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
ContentFusion 
DocumentTitleMatchClassifierMarks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
ExpandTitleToContentFilterMarks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT.
KeepLargestBlockFilterKeeps the largest TextBlock only (by the number of words).
LabelFusionFuses adjacent blocks if their labels are equal.
SimpleBlockFusionProcessorMerges two subsequent blocks if their text densities are equal.
-  - -

-

-Package de.l3s.boilerpipe.filters.heuristics Description -

- -

-

-The BoilerpipeFilters in this package are pure heuristics. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-tree.html deleted file mode 100644 index a32fd27..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-tree.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.heuristics Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.heuristics -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-use.html deleted file mode 100644 index 0bbeea2..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/heuristics/package-use.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.heuristics (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.heuristics

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.heuristics
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.heuristics used by de.l3s.boilerpipe.filters.heuristics
AddPrecedingLabelsFilter - -
-          Adds the labels of the preceding block to the current block, optionally adding a prefix.
ArticleMetadataFilter - -
-           
BlockProximityFusion - -
-          Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
ContentFusion - -
-           
ExpandTitleToContentFilter - -
-          Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT.
KeepLargestBlockFilter - -
-          Keeps the largest TextBlock only (by the number of words).
LabelFusion - -
-          Fuses adjacent blocks if their labels are equal.
SimpleBlockFusionProcessor - -
-          Merges two subsequent blocks if their text densities are equal.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html deleted file mode 100644 index 89612e7..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/BoilerplateBlockFilter.html +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - -BoilerplateBlockFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class BoilerplateBlockFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class BoilerplateBlockFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Removes TextBlocks which have explicitly been marked as "not content". -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static BoilerplateBlockFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
BoilerplateBlockFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static BoilerplateBlockFiltergetInstance() - -
-          Returns the singleton instance for BoilerplateBlockFilter.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final BoilerplateBlockFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-BoilerplateBlockFilter

-
-public BoilerplateBlockFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static BoilerplateBlockFilter getInstance()
-
-
Returns the singleton instance for BoilerplateBlockFilter. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/InvertedFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/InvertedFilter.html deleted file mode 100644 index 5a66376..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/InvertedFilter.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - -InvertedFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class InvertedFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.InvertedFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class InvertedFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Reverts the "isContent" flag for all TextBlocks -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static InvertedFilterINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final InvertedFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.html deleted file mode 100644 index c538217..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/LabelToBoilerplateFilter.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - -LabelToBoilerplateFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class LabelToBoilerplateFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class LabelToBoilerplateFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks that contain a given label as "boilerplate". -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static LabelToBoilerplateFilterINSTANCE_STRICTLY_NOT_CONTENT - -
-           
-  - - - - - - - - - - -
-Constructor Summary
LabelToBoilerplateFilter(java.lang.String... label) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE_STRICTLY_NOT_CONTENT

-
-public static final LabelToBoilerplateFilter INSTANCE_STRICTLY_NOT_CONTENT
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-LabelToBoilerplateFilter

-
-public LabelToBoilerplateFilter(java.lang.String... label)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.html deleted file mode 100644 index 9a5635e..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/LabelToContentFilter.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -LabelToContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class LabelToContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.LabelToContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class LabelToContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks that contain a given label as "content". -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
LabelToContentFilter(java.lang.String... label) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-LabelToContentFilter

-
-public LabelToContentFilter(java.lang.String... label)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html deleted file mode 100644 index 2b7f17d..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MarkEverythingContentFilter.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - -MarkEverythingContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MarkEverythingContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MarkEverythingContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Marks all blocks as content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Field Summary
-static MarkEverythingContentFilterINSTANCE - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final MarkEverythingContentFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html deleted file mode 100644 index b064d01..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MinClauseWordsFilter.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - -MinClauseWordsFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MinClauseWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinClauseWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5). - - NOTE: You might consider using the SplitParagraphBlocksFilter - upstream. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
SplitParagraphBlocksFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static MinClauseWordsFilterINSTANCE - -
-           
-  - - - - - - - - - - - - - -
-Constructor Summary
MinClauseWordsFilter(int minWords) - -
-           
MinClauseWordsFilter(int minWords, - boolean acceptClausesWithoutDelimiter) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final MinClauseWordsFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-MinClauseWordsFilter

-
-public MinClauseWordsFilter(int minWords)
-
-
-
- -

-MinClauseWordsFilter

-
-public MinClauseWordsFilter(int minWords,
-                            boolean acceptClausesWithoutDelimiter)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html deleted file mode 100644 index 82b6ea1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/MinWordsFilter.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -MinWordsFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class MinWordsFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.MinWordsFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class MinWordsFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Keeps only those content blocks which contain at least k words. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
MinWordsFilter(int minWords) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MinWordsFilter

-
-public MinWordsFilter(int minWords)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html deleted file mode 100644 index 870f5a1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/SplitParagraphBlocksFilter.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - -SplitParagraphBlocksFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class SplitParagraphBlocksFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public final class SplitParagraphBlocksFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-Splits TextBlocks at paragraph boundaries. - - NOTE: This is not fully supported (i.e., it will break highlighting support - via #getContainedTextElements()), but this one probably is necessary for some other - filters. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
MinClauseWordsFilter
-
- -

- - - - - - - - - - - -
-Field Summary
-static SplitParagraphBlocksFilterINSTANCE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
SplitParagraphBlocksFilter() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-static SplitParagraphBlocksFiltergetInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final SplitParagraphBlocksFilter INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-SplitParagraphBlocksFilter

-
-public SplitParagraphBlocksFilter()
-
-
- - - - - - - - -
-Method Detail
- -

-getInstance

-
-public static SplitParagraphBlocksFilter getInstance()
-
-
Returns the singleton instance for TerminatingBlocksFinder. -

-

-
-
-
-
-
-
-
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/SurroundingToContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/SurroundingToContentFilter.html deleted file mode 100644 index f32e722..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/SurroundingToContentFilter.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - -SurroundingToContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.filters.simple -
-Class SurroundingToContentFilter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.filters.simple.SurroundingToContentFilter
-
-
-
All Implemented Interfaces:
BoilerpipeFilter
-
-
-
-
public class SurroundingToContentFilter
extends java.lang.Object
implements BoilerpipeFilter
- - -

-


- -

- - - - - - - - - - - -
-Field Summary
-static SurroundingToContentFilterINSTANCE_TEXT - -
-           
-  - - - - - - - - - - -
-Constructor Summary
SurroundingToContentFilter(TextBlockCondition cond) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- booleanprocess(TextDocument doc) - -
-          Processes the given document doc.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE_TEXT

-
-public static final SurroundingToContentFilter INSTANCE_TEXT
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-SurroundingToContentFilter

-
-public SurroundingToContentFilter(TextBlockCondition cond)
-
-
- - - - - - - - -
-Method Detail
- -

-process

-
-public boolean process(TextDocument doc)
-                throws BoilerpipeProcessingException
-
-
Description copied from interface: BoilerpipeFilter
-
Processes the given document doc. -

-

-
Specified by:
process in interface BoilerpipeFilter
-
-
-
Parameters:
doc - The TextDocument that is to be processed. -
Returns:
true if changes have been made to the - TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html deleted file mode 100644 index 379783a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/BoilerplateBlockFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter

-
- - - - - - - - - -
-Packages that use BoilerplateBlockFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of BoilerplateBlockFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as BoilerplateBlockFilter
-static BoilerplateBlockFilterBoilerplateBlockFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that return BoilerplateBlockFilter
-static BoilerplateBlockFilterBoilerplateBlockFilter.getInstance() - -
-          Returns the singleton instance for BoilerplateBlockFilter.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html deleted file mode 100644 index 8399e64..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/InvertedFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.InvertedFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.InvertedFilter

-
- - - - - - - - - -
-Packages that use InvertedFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of InvertedFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as InvertedFilter
-static InvertedFilterInvertedFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/LabelToBoilerplateFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/LabelToBoilerplateFilter.html deleted file mode 100644 index 3117888..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/LabelToBoilerplateFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter

-
- - - - - - - - - -
-Packages that use LabelToBoilerplateFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of LabelToBoilerplateFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as LabelToBoilerplateFilter
-static LabelToBoilerplateFilterLabelToBoilerplateFilter.INSTANCE_STRICTLY_NOT_CONTENT - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/LabelToContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/LabelToContentFilter.html deleted file mode 100644 index 55ea827..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/LabelToContentFilter.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.LabelToContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.LabelToContentFilter

-
-No usage of de.l3s.boilerpipe.filters.simple.LabelToContentFilter -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html deleted file mode 100644 index d310c41..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MarkEverythingContentFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter

-
- - - - - - - - - -
-Packages that use MarkEverythingContentFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of MarkEverythingContentFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as MarkEverythingContentFilter
-static MarkEverythingContentFilterMarkEverythingContentFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html deleted file mode 100644 index 9e3b3be..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MinClauseWordsFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter

-
- - - - - - - - - -
-Packages that use MinClauseWordsFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of MinClauseWordsFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as MinClauseWordsFilter
-static MinClauseWordsFilterMinClauseWordsFilter.INSTANCE - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html deleted file mode 100644 index 0e52a52..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/MinWordsFilter.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.MinWordsFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.MinWordsFilter

-
-No usage of de.l3s.boilerpipe.filters.simple.MinWordsFilter -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html deleted file mode 100644 index 8c2f2c4..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/SplitParagraphBlocksFilter.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter

-
- - - - - - - - - -
-Packages that use SplitParagraphBlocksFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of SplitParagraphBlocksFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as SplitParagraphBlocksFilter
-static SplitParagraphBlocksFilterSplitParagraphBlocksFilter.INSTANCE - -
-           
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.filters.simple that return SplitParagraphBlocksFilter
-static SplitParagraphBlocksFilterSplitParagraphBlocksFilter.getInstance() - -
-          Returns the singleton instance for TerminatingBlocksFinder.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/SurroundingToContentFilter.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/SurroundingToContentFilter.html deleted file mode 100644 index 94ee576..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/class-use/SurroundingToContentFilter.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.filters.simple.SurroundingToContentFilter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.filters.simple.SurroundingToContentFilter

-
- - - - - - - - - -
-Packages that use SurroundingToContentFilter
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - -
-Uses of SurroundingToContentFilter in de.l3s.boilerpipe.filters.simple
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.filters.simple declared as SurroundingToContentFilter
-static SurroundingToContentFilterSurroundingToContentFilter.INSTANCE_TEXT - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-frame.html deleted file mode 100644 index 8e2d26a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-frame.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.filters.simple - - - - -
-Classes  - -
-BoilerplateBlockFilter -
-InvertedFilter -
-LabelToBoilerplateFilter -
-LabelToContentFilter -
-MarkEverythingContentFilter -
-MinClauseWordsFilter -
-MinWordsFilter -
-SplitParagraphBlocksFilter -
-SurroundingToContentFilter
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-summary.html deleted file mode 100644 index 2c087f3..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-summary.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.filters.simple -

- -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BoilerplateBlockFilterRemoves TextBlocks which have explicitly been marked as "not content".
InvertedFilterReverts the "isContent" flag for all TextBlocks
LabelToBoilerplateFilterMarks all blocks that contain a given label as "boilerplate".
LabelToContentFilterMarks all blocks that contain a given label as "content".
MarkEverythingContentFilterMarks all blocks as content.
MinClauseWordsFilterKeeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
MinWordsFilterKeeps only those content blocks which contain at least k words.
SplitParagraphBlocksFilterSplits TextBlocks at paragraph boundaries.
SurroundingToContentFilter 
-  - -

-

-Package de.l3s.boilerpipe.filters.simple Description -

- -

-

-The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-tree.html deleted file mode 100644 index 8b4c8d9..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-tree.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - -de.l3s.boilerpipe.filters.simple Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.filters.simple -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-use.html deleted file mode 100644 index 6adef14..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/filters/simple/package-use.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.filters.simple (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.filters.simple

-
- - - - - - - - - -
-Packages that use de.l3s.boilerpipe.filters.simple
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.filters.simple used by de.l3s.boilerpipe.filters.simple
BoilerplateBlockFilter - -
-          Removes TextBlocks which have explicitly been marked as "not content".
InvertedFilter - -
-          Reverts the "isContent" flag for all TextBlocks
LabelToBoilerplateFilter - -
-          Marks all blocks that contain a given label as "boilerplate".
MarkEverythingContentFilter - -
-          Marks all blocks as content.
MinClauseWordsFilter - -
-          Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
SplitParagraphBlocksFilter - -
-          Splits TextBlocks at paragraph boundaries.
SurroundingToContentFilter - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/ConditionalLabelAction.html b/javadoc/1.2/de/l3s/boilerpipe/labels/ConditionalLabelAction.html deleted file mode 100644 index 307958e..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/ConditionalLabelAction.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - -ConditionalLabelAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.labels -
-Class ConditionalLabelAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.labels.LabelAction
-      extended by de.l3s.boilerpipe.labels.ConditionalLabelAction
-
-
-
-
public final class ConditionalLabelAction
extends LabelAction
- - -

-Adds labels to a TextBlock if the given criteria are met. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class de.l3s.boilerpipe.labels.LabelAction
labels
-  - - - - - - - - - - -
-Constructor Summary
ConditionalLabelAction(TextBlockCondition condition, - java.lang.String... labels) - -
-           
-  - - - - - - - - - - - -
-Method Summary
- voidaddTo(TextBlock tb) - -
-           
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.labels.LabelAction
addLabelsTo, toString
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-ConditionalLabelAction

-
-public ConditionalLabelAction(TextBlockCondition condition,
-                              java.lang.String... labels)
-
-
- - - - - - - - -
-Method Detail
- -

-addTo

-
-public void addTo(TextBlock tb)
-
-
-
Overrides:
addTo in class LabelAction
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/DefaultLabels.html b/javadoc/1.2/de/l3s/boilerpipe/labels/DefaultLabels.html deleted file mode 100644 index 5e0f2f1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/DefaultLabels.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - -DefaultLabels (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.labels -
-Class DefaultLabels

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.labels.DefaultLabels
-
-
-
-
public final class DefaultLabels
extends java.lang.Object
- - -

-Some pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String). -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static java.lang.StringARTICLE_METADATA - -
-           
-static java.lang.StringHR - -
-           
-static java.lang.StringINDICATES_END_OF_TEXT - -
-           
-static java.lang.StringMARKUP_PREFIX - -
-           
-static java.lang.StringMIGHT_BE_CONTENT - -
-           
-static java.lang.StringSTRICTLY_NOT_CONTENT - -
-           
-static java.lang.StringTITLE - -
-           
-  - - - - - - - - - - -
-Constructor Summary
DefaultLabels() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-TITLE

-
-public static final java.lang.String TITLE
-
-
-
See Also:
Constant Field Values
-
-
- -

-ARTICLE_METADATA

-
-public static final java.lang.String ARTICLE_METADATA
-
-
-
See Also:
Constant Field Values
-
-
- -

-INDICATES_END_OF_TEXT

-
-public static final java.lang.String INDICATES_END_OF_TEXT
-
-
-
See Also:
Constant Field Values
-
-
- -

-MIGHT_BE_CONTENT

-
-public static final java.lang.String MIGHT_BE_CONTENT
-
-
-
See Also:
Constant Field Values
-
-
- -

-STRICTLY_NOT_CONTENT

-
-public static final java.lang.String STRICTLY_NOT_CONTENT
-
-
-
See Also:
Constant Field Values
-
-
- -

-HR

-
-public static final java.lang.String HR
-
-
-
See Also:
Constant Field Values
-
-
- -

-MARKUP_PREFIX

-
-public static final java.lang.String MARKUP_PREFIX
-
-
-
See Also:
Constant Field Values
-
- - - - - - - - -
-Constructor Detail
- -

-DefaultLabels

-
-public DefaultLabels()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/LabelAction.html b/javadoc/1.2/de/l3s/boilerpipe/labels/LabelAction.html deleted file mode 100644 index 26e10cc..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/LabelAction.html +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - -LabelAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.labels -
-Class LabelAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.labels.LabelAction
-
-
-
Direct Known Subclasses:
ConditionalLabelAction
-
-
-
-
public class LabelAction
extends java.lang.Object
- - -

-Helps adding labels to TextBlocks. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
ConditionalLabelAction
-
- -

- - - - - - - - - - - -
-Field Summary
-protected  java.lang.String[]labels - -
-           
-  - - - - - - - - - - -
-Constructor Summary
LabelAction(java.lang.String... labels) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
-protected  voidaddLabelsTo(TextBlock tb) - -
-           
- voidaddTo(TextBlock tb) - -
-           
- java.lang.StringtoString() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-labels

-
-protected final java.lang.String[] labels
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-LabelAction

-
-public LabelAction(java.lang.String... labels)
-
-
- - - - - - - - -
-Method Detail
- -

-addTo

-
-public void addTo(TextBlock tb)
-
-
-
-
-
-
- -

-addLabelsTo

-
-protected final void addLabelsTo(TextBlock tb)
-
-
-
-
-
-
- -

-toString

-
-public java.lang.String toString()
-
-
-
Overrides:
toString in class java.lang.Object
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/ConditionalLabelAction.html b/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/ConditionalLabelAction.html deleted file mode 100644 index 754928c..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/ConditionalLabelAction.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.labels.ConditionalLabelAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.labels.ConditionalLabelAction

-
-No usage of de.l3s.boilerpipe.labels.ConditionalLabelAction -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/DefaultLabels.html b/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/DefaultLabels.html deleted file mode 100644 index 718b97f..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/DefaultLabels.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.labels.DefaultLabels (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.labels.DefaultLabels

-
-No usage of de.l3s.boilerpipe.labels.DefaultLabels -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/LabelAction.html b/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/LabelAction.html deleted file mode 100644 index 598099d..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/class-use/LabelAction.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.labels.LabelAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.labels.LabelAction

-
- - - - - - - - - - - - - -
-Packages that use LabelAction
de.l3s.boilerpipe.labels  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of LabelAction in de.l3s.boilerpipe.labels
-  -

- - - - - - - - - -
Subclasses of LabelAction in de.l3s.boilerpipe.labels
- classConditionalLabelAction - -
-          Adds labels to a TextBlock if the given criteria are met.
-  -

- - - - - -
-Uses of LabelAction in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type LabelAction
- voidBoilerpipeHTMLContentHandler.addLabelAction(LabelAction la) - -
-           
-  -

- - - - - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type LabelAction
CommonTagActions.BlockTagLabelAction(LabelAction action) - -
-           
CommonTagActions.InlineTagLabelAction(LabelAction action) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/labels/package-frame.html deleted file mode 100644 index 2109106..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/package-frame.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - -de.l3s.boilerpipe.labels (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.labels - - - - -
-Classes  - -
-ConditionalLabelAction -
-DefaultLabels -
-LabelAction
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/labels/package-summary.html deleted file mode 100644 index cd09a70..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/package-summary.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - -de.l3s.boilerpipe.labels (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.labels -

- - - - - - - - - - - - - - - - - -
-Class Summary
ConditionalLabelActionAdds labels to a TextBlock if the given criteria are met.
DefaultLabelsSome pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String).
LabelActionHelps adding labels to TextBlocks.
-  - -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/labels/package-tree.html deleted file mode 100644 index 7ebc3a7..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/package-tree.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -de.l3s.boilerpipe.labels Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.labels -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/labels/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/labels/package-use.html deleted file mode 100644 index e4125c9..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/labels/package-use.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.labels (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.labels

-
- - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe.labels
de.l3s.boilerpipe.labels  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.labels used by de.l3s.boilerpipe.labels
LabelAction - -
-          Helps adding labels to TextBlocks.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.labels used by de.l3s.boilerpipe.sax
LabelAction - -
-          Helps adding labels to TextBlocks.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/package-frame.html deleted file mode 100644 index ebd54cb..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/package-frame.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - -de.l3s.boilerpipe (1.2 API) - - - - - - - - - -de.l3s.boilerpipe - - - - -
-Interfaces  - -
-BoilerpipeDocumentSource -
-BoilerpipeExtractor -
-BoilerpipeFilter -
-BoilerpipeInput
- - - - - - -
-Exceptions  - -
-BoilerpipeProcessingException
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/package-summary.html deleted file mode 100644 index aa978ea..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/package-summary.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - -de.l3s.boilerpipe (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe -

- -The Boilerpipe top-level package. -

-See: -
-          Description -

- - - - - - - - - - - - - - - - - - - - - -
-Interface Summary
BoilerpipeDocumentSource 
BoilerpipeExtractorDescribes a complete filter pipeline.
BoilerpipeFilterA generic BoilerpipeFilter.
BoilerpipeInputA source that returns TextDocuments.
-  - -

- - - - - - - - - -
-Exception Summary
BoilerpipeProcessingExceptionException for signaling failure in the processing pipeline.
-  - -

-

-Package de.l3s.boilerpipe Description -

- -

-

-The Boilerpipe top-level package. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/package-tree.html deleted file mode 100644 index a459fe8..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/package-tree.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -de.l3s.boilerpipe Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

-
    -
  • java.lang.Object -
-

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/package-use.html deleted file mode 100644 index 1363ca1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/package-use.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe
de.l3s.boilerpipe -The Boilerpipe top-level package. 
de.l3s.boilerpipe.boilers  
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) - 
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text. 
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics. 
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English. 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.boilers
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.extractors
BoilerpipeExtractor - -
-          Describes a complete filter pipeline.
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.english
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.heuristics
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.filters.simple
BoilerpipeFilter - -
-          A generic BoilerpipeFilter.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

- - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe used by de.l3s.boilerpipe.sax
BoilerpipeDocumentSource - -
-           
BoilerpipeExtractor - -
-          Describes a complete filter pipeline.
BoilerpipeInput - -
-          A source that returns TextDocuments.
BoilerpipeProcessingException - -
-          Exception for signaling failure in the processing pipeline.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html b/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html deleted file mode 100644 index 913b7f6..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeHTMLContentHandler.html +++ /dev/null @@ -1,750 +0,0 @@ - - - - - - -BoilerpipeHTMLContentHandler (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeHTMLContentHandler

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler
-
-
-
All Implemented Interfaces:
org.xml.sax.ContentHandler
-
-
-
-
public class BoilerpipeHTMLContentHandler
extends java.lang.Object
implements org.xml.sax.ContentHandler
- - -

-A simple SAX ContentHandler, used by BoilerpipeSAXInput. Can - be used by different parser implementations, e.g. NekoHTML and TagSoup. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
BoilerpipeHTMLContentHandler() - -
-          Constructs a BoilerpipeHTMLContentHandler using the - DefaultTagActionMap.
BoilerpipeHTMLContentHandler(TagActionMap tagActions) - -
-          Constructs a BoilerpipeHTMLContentHandler using the given - TagActionMap.
-  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidaddLabelAction(LabelAction la) - -
-           
-protected  voidaddTextBlock(TextBlock tb) - -
-           
- voidaddWhitespaceIfNecessary() - -
-           
- voidcharacters(char[] ch, - int start, - int length) - -
-           
- voidendDocument() - -
-           
- voidendElement(java.lang.String uri, - java.lang.String localName, - java.lang.String qName) - -
-           
- voidendPrefixMapping(java.lang.String prefix) - -
-           
- voidflushBlock() - -
-           
- java.lang.StringgetTitle() - -
-           
- voidignorableWhitespace(char[] ch, - int start, - int length) - -
-           
- voidprocessingInstruction(java.lang.String target, - java.lang.String data) - -
-           
- voidrecycle() - -
-          Recycles this instance.
- voidsetDocumentLocator(org.xml.sax.Locator locator) - -
-           
- voidsetTitle(java.lang.String s) - -
-           
- voidskippedEntity(java.lang.String name) - -
-           
- voidstartDocument() - -
-           
- voidstartElement(java.lang.String uri, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- voidstartPrefixMapping(java.lang.String prefix, - java.lang.String uri) - -
-           
- TextDocumenttoTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlock - s.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeHTMLContentHandler

-
-public BoilerpipeHTMLContentHandler()
-
-
Constructs a BoilerpipeHTMLContentHandler using the - DefaultTagActionMap. -

-

-
- -

-BoilerpipeHTMLContentHandler

-
-public BoilerpipeHTMLContentHandler(TagActionMap tagActions)
-
-
Constructs a BoilerpipeHTMLContentHandler using the given - TagActionMap. -

-

-
Parameters:
tagActions - The TagActionMap to use, e.g. - DefaultTagActionMap.
-
- - - - - - - - -
-Method Detail
- -

-recycle

-
-public void recycle()
-
-
Recycles this instance. -

-

-
-
-
-
-
-
-
- -

-endDocument

-
-public void endDocument()
-                 throws org.xml.sax.SAXException
-
-
-
Specified by:
endDocument in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-endPrefixMapping

-
-public void endPrefixMapping(java.lang.String prefix)
-                      throws org.xml.sax.SAXException
-
-
-
Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-ignorableWhitespace

-
-public void ignorableWhitespace(char[] ch,
-                                int start,
-                                int length)
-                         throws org.xml.sax.SAXException
-
-
-
Specified by:
ignorableWhitespace in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-processingInstruction

-
-public void processingInstruction(java.lang.String target,
-                                  java.lang.String data)
-                           throws org.xml.sax.SAXException
-
-
-
Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-setDocumentLocator

-
-public void setDocumentLocator(org.xml.sax.Locator locator)
-
-
-
Specified by:
setDocumentLocator in interface org.xml.sax.ContentHandler
-
-
-
-
-
-
- -

-skippedEntity

-
-public void skippedEntity(java.lang.String name)
-                   throws org.xml.sax.SAXException
-
-
-
Specified by:
skippedEntity in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startDocument

-
-public void startDocument()
-                   throws org.xml.sax.SAXException
-
-
-
Specified by:
startDocument in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startPrefixMapping

-
-public void startPrefixMapping(java.lang.String prefix,
-                               java.lang.String uri)
-                        throws org.xml.sax.SAXException
-
-
-
Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-startElement

-
-public void startElement(java.lang.String uri,
-                         java.lang.String localName,
-                         java.lang.String qName,
-                         org.xml.sax.Attributes atts)
-                  throws org.xml.sax.SAXException
-
-
-
Specified by:
startElement in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-endElement

-
-public void endElement(java.lang.String uri,
-                       java.lang.String localName,
-                       java.lang.String qName)
-                throws org.xml.sax.SAXException
-
-
-
Specified by:
endElement in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-characters

-
-public void characters(char[] ch,
-                       int start,
-                       int length)
-                throws org.xml.sax.SAXException
-
-
-
Specified by:
characters in interface org.xml.sax.ContentHandler
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-flushBlock

-
-public void flushBlock()
-
-
-
-
-
-
-
-
-
- -

-addTextBlock

-
-protected void addTextBlock(TextBlock tb)
-
-
-
-
-
-
-
-
-
- -

-getTitle

-
-public java.lang.String getTitle()
-
-
-
-
-
-
-
-
-
- -

-setTitle

-
-public void setTitle(java.lang.String s)
-
-
-
-
-
-
-
-
-
- -

-toTextDocument

-
-public TextDocument toTextDocument()
-
-
Returns a TextDocument containing the extracted TextBlock - s. NOTE: Only call this after parsing. -

-

-
-
-
- -
Returns:
The TextDocument
-
-
-
- -

-addWhitespaceIfNecessary

-
-public void addWhitespaceIfNecessary()
-
-
-
-
-
-
-
-
-
- -

-addLabelAction

-
-public void addLabelAction(LabelAction la)
-                    throws java.lang.IllegalStateException
-
-
-
-
-
- -
Throws: -
java.lang.IllegalStateException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html b/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html deleted file mode 100644 index 26cf218..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeHTMLParser.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - -BoilerpipeHTMLParser (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeHTMLParser

-
-java.lang.Object
-  extended by org.apache.xerces.parsers.XMLParser
-      extended by org.apache.xerces.parsers.AbstractXMLDocumentParser
-          extended by org.apache.xerces.parsers.AbstractSAXParser
-              extended by de.l3s.boilerpipe.sax.BoilerpipeHTMLParser
-
-
-
All Implemented Interfaces:
BoilerpipeDocumentSource, org.apache.xerces.xni.XMLDocumentHandler, org.apache.xerces.xni.XMLDTDContentModelHandler, org.apache.xerces.xni.XMLDTDHandler, org.apache.xerces.xs.PSVIProvider, org.xml.sax.Parser, org.xml.sax.XMLReader
-
-
-
-
public class BoilerpipeHTMLParser
extends org.apache.xerces.parsers.AbstractSAXParser
implements BoilerpipeDocumentSource
- - -

-A simple SAX Parser, used by BoilerpipeSAXInput. The parser uses CyberNeko to parse HTML content. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - -
-Nested Class Summary
- - - - - - - -
Nested classes/interfaces inherited from class org.apache.xerces.parsers.AbstractSAXParser
org.apache.xerces.parsers.AbstractSAXParser.AttributesProxy, org.apache.xerces.parsers.AbstractSAXParser.LocatorProxy
-  - - - - - - - -
-Field Summary
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.AbstractSAXParser
ALLOW_UE_AND_NOTATION_EVENTS, DECLARATION_HANDLER, DOM_NODE, fContentHandler, fDeclaredAttrs, fDeclHandler, fDocumentHandler, fDTDHandler, fLexicalHandler, fLexicalHandlerParameterEntities, fNamespaceContext, fNamespacePrefixes, fNamespaces, fParseInProgress, fQName, fResolveDTDURIs, fStandalone, fUseEntityResolver2, fVersion, fXMLNSURIs, LEXICAL_HANDLER, NAMESPACES, STRING_INTERNING
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.AbstractXMLDocumentParser
fDocumentSource, fDTDContentModelSource, fDTDSource, fInDTD
- - - - - - - -
Fields inherited from class org.apache.xerces.parsers.XMLParser
ENTITY_RESOLVER, ERROR_HANDLER, fConfiguration
- - - - - - - -
Fields inherited from interface org.apache.xerces.xni.XMLDTDHandler
CONDITIONAL_IGNORE, CONDITIONAL_INCLUDE
- - - - - - - -
Fields inherited from interface org.apache.xerces.xni.XMLDTDContentModelHandler
OCCURS_ONE_OR_MORE, OCCURS_ZERO_OR_MORE, OCCURS_ZERO_OR_ONE, SEPARATOR_CHOICE, SEPARATOR_SEQUENCE
-  - - - - - - - - - - - - - - - - - - - -
-Constructor Summary
- BoilerpipeHTMLParser() - -
-          Constructs a BoilerpipeHTMLParser using a default HTML content handler.
- BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler contentHandler) - -
-          Constructs a BoilerpipeHTMLParser using the given BoilerpipeHTMLContentHandler.
-protected BoilerpipeHTMLParser(boolean ignore) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- voidsetContentHandler(BoilerpipeHTMLContentHandler contentHandler) - -
-           
- voidsetContentHandler(org.xml.sax.ContentHandler contentHandler) - -
-           
- TextDocumenttoTextDocument() - -
-          Returns a TextDocument containing the extracted TextBlock - s.
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.AbstractSAXParser
attributeDecl, characters, comment, doctypeDecl, elementDecl, endCDATA, endDocument, endDTD, endElement, endExternalSubset, endGeneralEntity, endNamespaceMapping, endParameterEntity, externalEntityDecl, getAttributePSVI, getAttributePSVIByName, getContentHandler, getDeclHandler, getDTDHandler, getElementPSVI, getEntityResolver, getErrorHandler, getFeature, getLexicalHandler, getProperty, ignorableWhitespace, internalEntityDecl, notationDecl, parse, parse, processingInstruction, reset, setDeclHandler, setDocumentHandler, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setLexicalHandler, setLocale, setProperty, startCDATA, startDocument, startElement, startExternalSubset, startGeneralEntity, startNamespaceMapping, startParameterEntity, unparsedEntityDecl, xmlDecl
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.AbstractXMLDocumentParser
any, element, empty, emptyElement, endAttlist, endConditional, endContentModel, endGroup, getDocumentSource, getDTDContentModelSource, getDTDSource, ignoredCharacters, occurrence, pcdata, separator, setDocumentSource, setDTDContentModelSource, setDTDSource, startAttlist, startConditional, startContentModel, startDTD, startGroup, textDecl
- - - - - - - -
Methods inherited from class org.apache.xerces.parsers.XMLParser
parse
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeHTMLParser

-
-public BoilerpipeHTMLParser()
-
-
Constructs a BoilerpipeHTMLParser using a default HTML content handler. -

-

-
- -

-BoilerpipeHTMLParser

-
-public BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler contentHandler)
-
-
Constructs a BoilerpipeHTMLParser using the given BoilerpipeHTMLContentHandler. -

-

-
Parameters:
contentHandler -
-
-
- -

-BoilerpipeHTMLParser

-
-protected BoilerpipeHTMLParser(boolean ignore)
-
-
- - - - - - - - -
-Method Detail
- -

-setContentHandler

-
-public void setContentHandler(BoilerpipeHTMLContentHandler contentHandler)
-
-
-
-
-
-
-
-
-
- -

-setContentHandler

-
-public void setContentHandler(org.xml.sax.ContentHandler contentHandler)
-
-
-
Specified by:
setContentHandler in interface org.xml.sax.XMLReader
Overrides:
setContentHandler in class org.apache.xerces.parsers.AbstractSAXParser
-
-
-
-
-
-
- -

-toTextDocument

-
-public TextDocument toTextDocument()
-
-
Returns a TextDocument containing the extracted TextBlock - s. NOTE: Only call this after AbstractSAXParser.parse(org.xml.sax.InputSource). -

-

-
Specified by:
toTextDocument in interface BoilerpipeDocumentSource
-
-
- -
Returns:
The TextDocument
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html b/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html deleted file mode 100644 index f845236..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/BoilerpipeSAXInput.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -BoilerpipeSAXInput (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class BoilerpipeSAXInput

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.BoilerpipeSAXInput
-
-
-
All Implemented Interfaces:
BoilerpipeInput
-
-
-
-
public final class BoilerpipeSAXInput
extends java.lang.Object
implements BoilerpipeInput
- - -

-Parses an InputSource using SAX and returns a TextDocument. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
BoilerpipeSAXInput(org.xml.sax.InputSource is) - -
-          Creates a new instance of BoilerpipeSAXInput for the given InputSource.
-  - - - - - - - - - - - - - - - -
-Method Summary
- TextDocumentgetTextDocument() - -
-          Retrieves the TextDocument using a default HTML parser.
- TextDocumentgetTextDocument(BoilerpipeHTMLParser parser) - -
-          Retrieves the TextDocument using the given HTML parser.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-BoilerpipeSAXInput

-
-public BoilerpipeSAXInput(org.xml.sax.InputSource is)
-                   throws org.xml.sax.SAXException
-
-
Creates a new instance of BoilerpipeSAXInput for the given InputSource. -

-

-
Parameters:
is - -
Throws: -
org.xml.sax.SAXException
-
- - - - - - - - -
-Method Detail
- -

-getTextDocument

-
-public TextDocument getTextDocument()
-                             throws BoilerpipeProcessingException
-
-
Retrieves the TextDocument using a default HTML parser. -

-

-
Specified by:
getTextDocument in interface BoilerpipeInput
-
-
- -
Returns:
A TextDocument. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-getTextDocument

-
-public TextDocument getTextDocument(BoilerpipeHTMLParser parser)
-                             throws BoilerpipeProcessingException
-
-
Retrieves the TextDocument using the given HTML parser. -

-

-
-
-
-
Parameters:
parser - The parser used to transform the input into boilerpipe's internal representation. -
Returns:
The retrieved TextDocument -
Throws: -
BoilerpipeProcessingException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.BlockTagLabelAction.html b/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.BlockTagLabelAction.html deleted file mode 100644 index 02661f0..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.BlockTagLabelAction.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - -CommonTagActions.BlockTagLabelAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class CommonTagActions.BlockTagLabelAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction
-
-
-
All Implemented Interfaces:
TagAction
-
-
-
Enclosing class:
CommonTagActions
-
-
-
-
public static final class CommonTagActions.BlockTagLabelAction
extends java.lang.Object
implements TagAction
- - -

-CommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock. -

- -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CommonTagActions.BlockTagLabelAction(LabelAction action) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- booleanchangesTagLevel() - -
-           
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CommonTagActions.BlockTagLabelAction

-
-public CommonTagActions.BlockTagLabelAction(LabelAction action)
-
-
- - - - - - - - -
-Method Detail
- -

-start

-
-public boolean start(BoilerpipeHTMLContentHandler instance,
-                     java.lang.String localName,
-                     java.lang.String qName,
-                     org.xml.sax.Attributes atts)
-
-
-
Specified by:
start in interface TagAction
-
-
-
-
-
-
- -

-end

-
-public boolean end(BoilerpipeHTMLContentHandler instance,
-                   java.lang.String localName,
-                   java.lang.String qName)
-
-
-
Specified by:
end in interface TagAction
-
-
-
-
-
-
- -

-changesTagLevel

-
-public boolean changesTagLevel()
-
-
-
Specified by:
changesTagLevel in interface TagAction
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.Chained.html b/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.Chained.html deleted file mode 100644 index 5775ad4..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.Chained.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - - -CommonTagActions.Chained (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class CommonTagActions.Chained

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.CommonTagActions.Chained
-
-
-
All Implemented Interfaces:
TagAction
-
-
-
Enclosing class:
CommonTagActions
-
-
-
-
public static final class CommonTagActions.Chained
extends java.lang.Object
implements TagAction
- - -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CommonTagActions.Chained(TagAction t1, - TagAction t2) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- booleanchangesTagLevel() - -
-           
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CommonTagActions.Chained

-
-public CommonTagActions.Chained(TagAction t1,
-                                TagAction t2)
-
-
- - - - - - - - -
-Method Detail
- -

-start

-
-public boolean start(BoilerpipeHTMLContentHandler instance,
-                     java.lang.String localName,
-                     java.lang.String qName,
-                     org.xml.sax.Attributes atts)
-              throws org.xml.sax.SAXException
-
-
-
Specified by:
start in interface TagAction
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-end

-
-public boolean end(BoilerpipeHTMLContentHandler instance,
-                   java.lang.String localName,
-                   java.lang.String qName)
-            throws org.xml.sax.SAXException
-
-
-
Specified by:
end in interface TagAction
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-changesTagLevel

-
-public boolean changesTagLevel()
-
-
-
Specified by:
changesTagLevel in interface TagAction
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.InlineTagLabelAction.html b/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.InlineTagLabelAction.html deleted file mode 100644 index 10e4866..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.InlineTagLabelAction.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - - -CommonTagActions.InlineTagLabelAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class CommonTagActions.InlineTagLabelAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction
-
-
-
All Implemented Interfaces:
TagAction
-
-
-
Enclosing class:
CommonTagActions
-
-
-
-
public static final class CommonTagActions.InlineTagLabelAction
extends java.lang.Object
implements TagAction
- - -

-CommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock. -

- -

-


- -

- - - - - - - - - - - -
-Constructor Summary
CommonTagActions.InlineTagLabelAction(LabelAction action) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- booleanchangesTagLevel() - -
-           
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-CommonTagActions.InlineTagLabelAction

-
-public CommonTagActions.InlineTagLabelAction(LabelAction action)
-
-
- - - - - - - - -
-Method Detail
- -

-start

-
-public boolean start(BoilerpipeHTMLContentHandler instance,
-                     java.lang.String localName,
-                     java.lang.String qName,
-                     org.xml.sax.Attributes atts)
-
-
-
Specified by:
start in interface TagAction
-
-
-
-
-
-
- -

-end

-
-public boolean end(BoilerpipeHTMLContentHandler instance,
-                   java.lang.String localName,
-                   java.lang.String qName)
-
-
-
Specified by:
end in interface TagAction
-
-
-
-
-
-
- -

-changesTagLevel

-
-public boolean changesTagLevel()
-
-
-
Specified by:
changesTagLevel in interface TagAction
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.html b/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.html deleted file mode 100644 index 8afbacd..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/CommonTagActions.html +++ /dev/null @@ -1,417 +0,0 @@ - - - - - - -CommonTagActions (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class CommonTagActions

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.CommonTagActions
-
-
-
-
public abstract class CommonTagActions
extends java.lang.Object
- - -

-Defines an action that is to be performed whenever a particular tag occurs during HTML parsing. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - -
-Nested Class Summary
-static classCommonTagActions.BlockTagLabelAction - -
-          CommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock.
-static classCommonTagActions.Chained - -
-           
-static classCommonTagActions.InlineTagLabelAction - -
-          CommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Field Summary
-static TagActionTA_ANCHOR_TEXT - -
-          Marks this tag as "anchor" (this should usually only be set for the <A> tag).
-static TagActionTA_BLOCK_LEVEL - -
-          Explicitly marks this tag a simple "block-level" element, which always generates whitespace
-static TagActionTA_BODY - -
-          Marks this tag the body element (this should usually only be set for the <BODY> tag).
-static TagActionTA_FONT - -
-          Special TagAction for the <FONT> tag, which keeps track of the - absolute and relative font size.
-static TagActionTA_IGNORABLE_ELEMENT - -
-          Marks this tag as "ignorable", i.e. all its inner content is silently skipped.
-static TagActionTA_INLINE - -
-          Deprecated. Use TA_INLINE_WHITESPACE instead
-static TagActionTA_INLINE_NO_WHITESPACE - -
-          Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block.
-static TagActionTA_INLINE_WHITESPACE - -
-          Marks this tag a simple "inline" element, which generates whitespace, but no new block.
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Field Detail
- -

-TA_IGNORABLE_ELEMENT

-
-public static final TagAction TA_IGNORABLE_ELEMENT
-
-
Marks this tag as "ignorable", i.e. all its inner content is silently skipped. -

-

-
-
-
- -

-TA_ANCHOR_TEXT

-
-public static final TagAction TA_ANCHOR_TEXT
-
-
Marks this tag as "anchor" (this should usually only be set for the <A> tag). - Anchor tags may not be nested. - - There is a bug in certain versions of NekoHTML which still allows nested tags. - If boilerpipe encounters such nestings, a SAXException is thrown. -

-

-
-
-
- -

-TA_BODY

-
-public static final TagAction TA_BODY
-
-
Marks this tag the body element (this should usually only be set for the <BODY> tag). -

-

-
-
-
- -

-TA_INLINE_WHITESPACE

-
-public static final TagAction TA_INLINE_WHITESPACE
-
-
Marks this tag a simple "inline" element, which generates whitespace, but no new block. -

-

-
-
-
- -

-TA_INLINE

-
-@Deprecated
-public static final TagAction TA_INLINE
-
-
Deprecated. Use TA_INLINE_WHITESPACE instead
-
-
-
- -

-TA_INLINE_NO_WHITESPACE

-
-public static final TagAction TA_INLINE_NO_WHITESPACE
-
-
Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block. -

-

-
-
-
- -

-TA_BLOCK_LEVEL

-
-public static final TagAction TA_BLOCK_LEVEL
-
-
Explicitly marks this tag a simple "block-level" element, which always generates whitespace -

-

-
-
-
- -

-TA_FONT

-
-public static final TagAction TA_FONT
-
-
Special TagAction for the <FONT> tag, which keeps track of the - absolute and relative font size. -

-

-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/DefaultTagActionMap.html b/javadoc/1.2/de/l3s/boilerpipe/sax/DefaultTagActionMap.html deleted file mode 100644 index 0fcd084..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/DefaultTagActionMap.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - -DefaultTagActionMap (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class DefaultTagActionMap

-
-java.lang.Object
-  extended by java.util.AbstractMap<K,V>
-      extended by java.util.HashMap<java.lang.String,TagAction>
-          extended by de.l3s.boilerpipe.sax.TagActionMap
-              extended by de.l3s.boilerpipe.sax.DefaultTagActionMap
-
-
-
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.util.Map<java.lang.String,TagAction>
-
-
-
-
public class DefaultTagActionMap
extends TagActionMap
- - -

-Default TagActions. Seem to work well. -

- -

-

-
See Also:
TagActionMap, -Serialized Form
-
- -

- - - - - - - -
-Nested Class Summary
- - - - - - - -
Nested classes/interfaces inherited from class java.util.AbstractMap
java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>
-  - - - - - - - - - - - -
-Field Summary
-static TagActionMapINSTANCE - -
-           
-  - - - - - - - - - - - -
-Constructor Summary
-protected DefaultTagActionMap() - -
-           
-  - - - - - - - -
-Method Summary
- - - - - - - -
Methods inherited from class de.l3s.boilerpipe.sax.TagActionMap
addTagAction, setTagAction
- - - - - - - -
Methods inherited from class java.util.HashMap
clear, clone, containsKey, containsValue, entrySet, get, isEmpty, keySet, put, putAll, remove, size, values
- - - - - - - -
Methods inherited from class java.util.AbstractMap
equals, hashCode, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
- - - - - - - -
Methods inherited from interface java.util.Map
equals, hashCode
-  -

- - - - - - - - -
-Field Detail
- -

-INSTANCE

-
-public static final TagActionMap INSTANCE
-
-
-
-
- - - - - - - - -
-Constructor Detail
- -

-DefaultTagActionMap

-
-protected DefaultTagActionMap()
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLDocument.html b/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLDocument.html deleted file mode 100644 index e47638e..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLDocument.html +++ /dev/null @@ -1,326 +0,0 @@ - - - - - - -HTMLDocument (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class HTMLDocument

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.HTMLDocument
-
-
-
All Implemented Interfaces:
InputSourceable
-
-
-
-
public class HTMLDocument
extends java.lang.Object
implements InputSourceable
- - -

-An InputSourceable for HTMLFetcher. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - -
-Constructor Summary
HTMLDocument(byte[] data, - java.nio.charset.Charset charset) - -
-           
HTMLDocument(java.lang.String data) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.nio.charset.CharsetgetCharset() - -
-           
- byte[]getData() - -
-           
- org.xml.sax.InputSourcetoInputSource() - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-HTMLDocument

-
-public HTMLDocument(byte[] data,
-                    java.nio.charset.Charset charset)
-
-
-
- -

-HTMLDocument

-
-public HTMLDocument(java.lang.String data)
-
-
- - - - - - - - -
-Method Detail
- -

-getCharset

-
-public java.nio.charset.Charset getCharset()
-
-
-
-
-
-
-
-
-
- -

-getData

-
-public byte[] getData()
-
-
-
-
-
-
-
-
-
- -

-toInputSource

-
-public org.xml.sax.InputSource toInputSource()
-
-
-
Specified by:
toInputSource in interface InputSourceable
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLFetcher.html b/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLFetcher.html deleted file mode 100644 index 748494b..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLFetcher.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - -HTMLFetcher (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class HTMLFetcher

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.HTMLFetcher
-
-
-
-
public class HTMLFetcher
extends java.lang.Object
- - -

-A very simple HTTP/HTML fetcher, really just for demo purposes. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
-static HTMLDocumentfetch(java.net.URL url) - -
-          Fetches the document at the given URL, using URLConnection.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Method Detail
- -

-fetch

-
-public static HTMLDocument fetch(java.net.URL url)
-                          throws java.io.IOException
-
-
Fetches the document at the given URL, using URLConnection. -

-

-
Parameters:
url - -
Returns:
-
Throws: -
java.io.IOException
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLHighlighter.html b/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLHighlighter.html deleted file mode 100644 index b770cbf..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/HTMLHighlighter.html +++ /dev/null @@ -1,533 +0,0 @@ - - - - - - -HTMLHighlighter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class HTMLHighlighter

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.HTMLHighlighter
-
-
-
-
public final class HTMLHighlighter
extends java.lang.Object
- - -

-Highlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Method Summary
- java.lang.StringgetExtraStyleSheet() - -
-          Returns the extra stylesheet definition that will be inserted in the HEAD - element.
- java.lang.StringgetPostHighlight() - -
-          Returns the string that will be inserted after any highlighted HTML - block.
- java.lang.StringgetPreHighlight() - -
-          Returns the string that will be inserted before any highlighted HTML - block.
- booleanisOutputHighlightOnly() - -
-          If true, only HTML enclosed within highlighted content will be returned
-static HTMLHighlighternewExtractingInstance() - -
-          Creates a new HTMLHighlighter, which is set-up to return only the - extracted HTML text, including enclosed markup.
-static HTMLHighlighternewHighlightingInstance() - -
-          Creates a new HTMLHighlighter, which is set-up to return the full - HTML text, with the extracted text portion highlighted.
- java.lang.Stringprocess(TextDocument doc, - org.xml.sax.InputSource is) - -
-          Processes the given TextDocument and the original HTML text (as - an InputSource).
- java.lang.Stringprocess(TextDocument doc, - java.lang.String origHTML) - -
-          Processes the given TextDocument and the original HTML text (as a - String).
- java.lang.Stringprocess(java.net.URL url, - BoilerpipeExtractor extractor) - -
-           
- voidsetExtraStyleSheet(java.lang.String extraStyleSheet) - -
-          Sets the extra stylesheet definition that will be inserted in the HEAD - element.
- voidsetOutputHighlightOnly(boolean outputHighlightOnly) - -
-          Sets whether only HTML enclosed within highlighted content will be - returned, or the whole HTML document.
- voidsetPostHighlight(java.lang.String postHighlight) - -
-          Sets the string that will be inserted after any highlighted HTML block.
- voidsetPreHighlight(java.lang.String preHighlight) - -
-          Sets the string that will be inserted prior to any highlighted HTML - block.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Method Detail
- -

-newHighlightingInstance

-
-public static HTMLHighlighter newHighlightingInstance()
-
-
Creates a new HTMLHighlighter, which is set-up to return the full - HTML text, with the extracted text portion highlighted. -

-

-
-
-
-
- -

-newExtractingInstance

-
-public static HTMLHighlighter newExtractingInstance()
-
-
Creates a new HTMLHighlighter, which is set-up to return only the - extracted HTML text, including enclosed markup. -

-

-
-
-
-
- -

-process

-
-public java.lang.String process(TextDocument doc,
-                                java.lang.String origHTML)
-                         throws BoilerpipeProcessingException
-
-
Processes the given TextDocument and the original HTML text (as a - String). -

-

-
Parameters:
doc - The processed TextDocument.
origHTML - The original HTML document. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-process

-
-public java.lang.String process(TextDocument doc,
-                                org.xml.sax.InputSource is)
-                         throws BoilerpipeProcessingException
-
-
Processes the given TextDocument and the original HTML text (as - an InputSource). -

-

-
Parameters:
doc - The processed TextDocument.
is - The original HTML document. -
Throws: -
BoilerpipeProcessingException
-
-
-
- -

-process

-
-public java.lang.String process(java.net.URL url,
-                                BoilerpipeExtractor extractor)
-                         throws java.io.IOException,
-                                BoilerpipeProcessingException,
-                                org.xml.sax.SAXException
-
-
- -
Throws: -
java.io.IOException -
BoilerpipeProcessingException -
org.xml.sax.SAXException
-
-
-
- -

-isOutputHighlightOnly

-
-public boolean isOutputHighlightOnly()
-
-
If true, only HTML enclosed within highlighted content will be returned -

-

-
-
-
-
- -

-setOutputHighlightOnly

-
-public void setOutputHighlightOnly(boolean outputHighlightOnly)
-
-
Sets whether only HTML enclosed within highlighted content will be - returned, or the whole HTML document. -

-

-
-
-
-
- -

-getExtraStyleSheet

-
-public java.lang.String getExtraStyleSheet()
-
-
Returns the extra stylesheet definition that will be inserted in the HEAD - element. - - By default, this corresponds to a simple definition that marks text in - class "x-boilerpipe-mark1" as inline text with yellow background. -

-

-
-
-
-
- -

-setExtraStyleSheet

-
-public void setExtraStyleSheet(java.lang.String extraStyleSheet)
-
-
Sets the extra stylesheet definition that will be inserted in the HEAD - element. - - To disable, set it to the empty string: "" -

-

-
Parameters:
extraStyleSheet - Plain HTML
-
-
-
- -

-getPreHighlight

-
-public java.lang.String getPreHighlight()
-
-
Returns the string that will be inserted before any highlighted HTML - block. - - By default, this corresponds to - <span class=&qupt;x-boilerpipe-mark1"> -

-

-
-
-
-
- -

-setPreHighlight

-
-public void setPreHighlight(java.lang.String preHighlight)
-
-
Sets the string that will be inserted prior to any highlighted HTML - block. - - To disable, set it to the empty string: "" -

-

-
-
-
-
- -

-getPostHighlight

-
-public java.lang.String getPostHighlight()
-
-
Returns the string that will be inserted after any highlighted HTML - block. - - By default, this corresponds to </span> -

-

-
-
-
-
- -

-setPostHighlight

-
-public void setPostHighlight(java.lang.String postHighlight)
-
-
Sets the string that will be inserted after any highlighted HTML block. - - To disable, set it to the empty string: "" -

-

-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/InputSourceable.html b/javadoc/1.2/de/l3s/boilerpipe/sax/InputSourceable.html deleted file mode 100644 index c2e785a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/InputSourceable.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - -InputSourceable (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Interface InputSourceable

-
-
All Known Implementing Classes:
HTMLDocument
-
-
-
-
public interface InputSourceable
- - -

-An InputSourceable can return an arbitrary number of new InputSources for a given document. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - -
-Method Summary
- org.xml.sax.InputSourcetoInputSource() - -
-           
-  -

- - - - - - - - -
-Method Detail
- -

-toInputSource

-
-org.xml.sax.InputSource toInputSource()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/MarkupTagAction.html b/javadoc/1.2/de/l3s/boilerpipe/sax/MarkupTagAction.html deleted file mode 100644 index 4749233..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/MarkupTagAction.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - -MarkupTagAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class MarkupTagAction

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.sax.MarkupTagAction
-
-
-
All Implemented Interfaces:
TagAction
-
-
-
-
public final class MarkupTagAction
extends java.lang.Object
implements TagAction
- - -

-Assigns labels for element CSS classes and ids to the corresponding - TextBlock. CSS classes are prefixed by - DefaultLabels.MARKUP_PREFIX., and IDs are prefixed by - DefaultLabels.MARKUP_PREFIX# -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
MarkupTagAction(boolean isBlockLevel) - -
-           
-  - - - - - - - - - - - - - - - - - - - -
-Method Summary
- booleanchangesTagLevel() - -
-           
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-MarkupTagAction

-
-public MarkupTagAction(boolean isBlockLevel)
-
-
- - - - - - - - -
-Method Detail
- -

-start

-
-public boolean start(BoilerpipeHTMLContentHandler instance,
-                     java.lang.String localName,
-                     java.lang.String qName,
-                     org.xml.sax.Attributes atts)
-              throws org.xml.sax.SAXException
-
-
-
Specified by:
start in interface TagAction
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-end

-
-public boolean end(BoilerpipeHTMLContentHandler instance,
-                   java.lang.String localName,
-                   java.lang.String qName)
-            throws org.xml.sax.SAXException
-
-
-
Specified by:
end in interface TagAction
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-changesTagLevel

-
-public boolean changesTagLevel()
-
-
-
Specified by:
changesTagLevel in interface TagAction
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/TagAction.html b/javadoc/1.2/de/l3s/boilerpipe/sax/TagAction.html deleted file mode 100644 index 07467bb..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/TagAction.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - -TagAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Interface TagAction

-
-
All Known Implementing Classes:
CommonTagActions.BlockTagLabelAction, CommonTagActions.Chained, CommonTagActions.InlineTagLabelAction, MarkupTagAction
-
-
-
-
public interface TagAction
- - -

-Defines an action that is to be performed whenever a particular tag occurs - during HTML parsing. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - - - - - - - - - - -
-Method Summary
- booleanchangesTagLevel() - -
-           
- booleanend(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanstart(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
-  -

- - - - - - - - -
-Method Detail
- -

-start

-
-boolean start(BoilerpipeHTMLContentHandler instance,
-              java.lang.String localName,
-              java.lang.String qName,
-              org.xml.sax.Attributes atts)
-              throws org.xml.sax.SAXException
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-end

-
-boolean end(BoilerpipeHTMLContentHandler instance,
-            java.lang.String localName,
-            java.lang.String qName)
-            throws org.xml.sax.SAXException
-
-
- -
Throws: -
org.xml.sax.SAXException
-
-
-
- -

-changesTagLevel

-
-boolean changesTagLevel()
-
-
-
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/TagActionMap.html b/javadoc/1.2/de/l3s/boilerpipe/sax/TagActionMap.html deleted file mode 100644 index 7522b68..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/TagActionMap.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - - -TagActionMap (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.sax -
-Class TagActionMap

-
-java.lang.Object
-  extended by java.util.AbstractMap<K,V>
-      extended by java.util.HashMap<java.lang.String,TagAction>
-          extended by de.l3s.boilerpipe.sax.TagActionMap
-
-
-
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, java.util.Map<java.lang.String,TagAction>
-
-
-
Direct Known Subclasses:
DefaultTagActionMap
-
-
-
-
public abstract class TagActionMap
extends java.util.HashMap<java.lang.String,TagAction>
- - -

-Base class for definition a set of TagActions that are to be used for the - HTML parsing process. -

- -

-

-
Author:
-
Christian Kohlschütter
-
See Also:
DefaultTagActionMap, -Serialized Form
-
- -

- - - - - - - -
-Nested Class Summary
- - - - - - - -
Nested classes/interfaces inherited from class java.util.AbstractMap
java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>
-  - - - - - - - - - - - -
-Constructor Summary
TagActionMap() - -
-           
-  - - - - - - - - - - - - - - - -
-Method Summary
-protected  voidaddTagAction(java.lang.String tag, - TagAction action) - -
-          Adds a particular TagAction for a given tag.
-protected  voidsetTagAction(java.lang.String tag, - TagAction action) - -
-          Sets a particular TagAction for a given tag.
- - - - - - - -
Methods inherited from class java.util.HashMap
clear, clone, containsKey, containsValue, entrySet, get, isEmpty, keySet, put, putAll, remove, size, values
- - - - - - - -
Methods inherited from class java.util.AbstractMap
equals, hashCode, toString
- - - - - - - -
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
- - - - - - - -
Methods inherited from interface java.util.Map
equals, hashCode
-  -

- - - - - - - - -
-Constructor Detail
- -

-TagActionMap

-
-public TagActionMap()
-
-
- - - - - - - - -
-Method Detail
- -

-setTagAction

-
-protected void setTagAction(java.lang.String tag,
-                            TagAction action)
-
-
Sets a particular TagAction for a given tag. Any existing TagAction for that tag - will be removed and overwritten. -

-

-
Parameters:
tag - The tag (will be stored internally 1. as it is, 2. lower-case, 3. upper-case)
action - The TagAction
-
-
-
- -

-addTagAction

-
-protected void addTagAction(java.lang.String tag,
-                            TagAction action)
-
-
Adds a particular TagAction for a given tag. If a TagAction already exists for that tag, - a chained action, consisting of the previous and the new TagAction is created. -

-

-
Parameters:
tag - The tag (will be stored internally 1. as it is, 2. lower-case, 3. upper-case)
action - The TagAction
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html deleted file mode 100644 index f83d787..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLContentHandler.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler

-
- - - - - - - - - -
-Packages that use BoilerpipeHTMLContentHandler
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeHTMLContentHandler in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type BoilerpipeHTMLContentHandler
- booleanTagAction.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanMarkupTagAction.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanCommonTagActions.Chained.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanCommonTagActions.InlineTagLabelAction.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- booleanCommonTagActions.BlockTagLabelAction.end(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName) - -
-           
- voidBoilerpipeHTMLParser.setContentHandler(BoilerpipeHTMLContentHandler contentHandler) - -
-           
- booleanTagAction.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- booleanMarkupTagAction.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- booleanCommonTagActions.Chained.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- booleanCommonTagActions.InlineTagLabelAction.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
- booleanCommonTagActions.BlockTagLabelAction.start(BoilerpipeHTMLContentHandler instance, - java.lang.String localName, - java.lang.String qName, - org.xml.sax.Attributes atts) - -
-           
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type BoilerpipeHTMLContentHandler
BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler contentHandler) - -
-          Constructs a BoilerpipeHTMLParser using the given BoilerpipeHTMLContentHandler.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html deleted file mode 100644 index ac0cf80..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeHTMLParser.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeHTMLParser

-
- - - - - - - - - -
-Packages that use BoilerpipeHTMLParser
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of BoilerpipeHTMLParser in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type BoilerpipeHTMLParser
- TextDocumentBoilerpipeSAXInput.getTextDocument(BoilerpipeHTMLParser parser) - -
-          Retrieves the TextDocument using the given HTML parser.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html deleted file mode 100644 index e66f9ce..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/BoilerpipeSAXInput.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.BoilerpipeSAXInput (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.BoilerpipeSAXInput

-
-No usage of de.l3s.boilerpipe.sax.BoilerpipeSAXInput -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.BlockTagLabelAction.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.BlockTagLabelAction.html deleted file mode 100644 index 961fd5a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.BlockTagLabelAction.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction

-
-No usage of de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.Chained.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.Chained.html deleted file mode 100644 index 30fd9c8..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.Chained.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.CommonTagActions.Chained (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.CommonTagActions.Chained

-
-No usage of de.l3s.boilerpipe.sax.CommonTagActions.Chained -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.InlineTagLabelAction.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.InlineTagLabelAction.html deleted file mode 100644 index 743d835..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.InlineTagLabelAction.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction

-
-No usage of de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.html deleted file mode 100644 index 340e016..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/CommonTagActions.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.CommonTagActions (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.CommonTagActions

-
-No usage of de.l3s.boilerpipe.sax.CommonTagActions -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/DefaultTagActionMap.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/DefaultTagActionMap.html deleted file mode 100644 index 58cc62a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/DefaultTagActionMap.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.DefaultTagActionMap (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.DefaultTagActionMap

-
-No usage of de.l3s.boilerpipe.sax.DefaultTagActionMap -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLDocument.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLDocument.html deleted file mode 100644 index 07309e2..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLDocument.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.HTMLDocument (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.HTMLDocument

-
- - - - - - - - - - - - - -
-Packages that use HTMLDocument
de.l3s.boilerpipe.boilers  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of HTMLDocument in de.l3s.boilerpipe.boilers
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.boilers with parameters of type HTMLDocument
- TextDocumentStructureAwareBoiler.process(HTMLDocument htmlDoc) - -
-           
-  -

- - - - - -
-Uses of HTMLDocument in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that return HTMLDocument
-static HTMLDocumentHTMLFetcher.fetch(java.net.URL url) - -
-          Fetches the document at the given URL, using URLConnection.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLFetcher.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLFetcher.html deleted file mode 100644 index 54d0b73..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLFetcher.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.HTMLFetcher (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.HTMLFetcher

-
-No usage of de.l3s.boilerpipe.sax.HTMLFetcher -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html deleted file mode 100644 index 323bd06..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/HTMLHighlighter.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.HTMLHighlighter (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.HTMLHighlighter

-
- - - - - - - - - -
-Packages that use HTMLHighlighter
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of HTMLHighlighter in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax that return HTMLHighlighter
-static HTMLHighlighterHTMLHighlighter.newExtractingInstance() - -
-          Creates a new HTMLHighlighter, which is set-up to return only the - extracted HTML text, including enclosed markup.
-static HTMLHighlighterHTMLHighlighter.newHighlightingInstance() - -
-          Creates a new HTMLHighlighter, which is set-up to return the full - HTML text, with the extracted text portion highlighted.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/InputSourceable.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/InputSourceable.html deleted file mode 100644 index 52fe475..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/InputSourceable.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.sax.InputSourceable (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.sax.InputSourceable

-
- - - - - - - - - -
-Packages that use InputSourceable
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of InputSourceable in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Classes in de.l3s.boilerpipe.sax that implement InputSourceable
- classHTMLDocument - -
-          An InputSourceable for HTMLFetcher.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/MarkupTagAction.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/MarkupTagAction.html deleted file mode 100644 index 8421047..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/MarkupTagAction.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.MarkupTagAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.MarkupTagAction

-
-No usage of de.l3s.boilerpipe.sax.MarkupTagAction -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/TagAction.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/TagAction.html deleted file mode 100644 index f3e9efd..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/TagAction.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - -Uses of Interface de.l3s.boilerpipe.sax.TagAction (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Interface
de.l3s.boilerpipe.sax.TagAction

-
- - - - - - - - - -
-Packages that use TagAction
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TagAction in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - - - - - - - - - - - - - -
Classes in de.l3s.boilerpipe.sax that implement TagAction
-static classCommonTagActions.BlockTagLabelAction - -
-          CommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock.
-static classCommonTagActions.Chained - -
-           
-static classCommonTagActions.InlineTagLabelAction - -
-          CommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock.
- classMarkupTagAction - -
-          Assigns labels for element CSS classes and ids to the corresponding - TextBlock.
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Fields in de.l3s.boilerpipe.sax declared as TagAction
-static TagActionCommonTagActions.TA_ANCHOR_TEXT - -
-          Marks this tag as "anchor" (this should usually only be set for the <A> tag).
-static TagActionCommonTagActions.TA_BLOCK_LEVEL - -
-          Explicitly marks this tag a simple "block-level" element, which always generates whitespace
-static TagActionCommonTagActions.TA_BODY - -
-          Marks this tag the body element (this should usually only be set for the <BODY> tag).
-static TagActionCommonTagActions.TA_FONT - -
-          Special TagAction for the <FONT> tag, which keeps track of the - absolute and relative font size.
-static TagActionCommonTagActions.TA_IGNORABLE_ELEMENT - -
-          Marks this tag as "ignorable", i.e. all its inner content is silently skipped.
-static TagActionCommonTagActions.TA_INLINE - -
-          Deprecated. Use CommonTagActions.TA_INLINE_WHITESPACE instead
-static TagActionCommonTagActions.TA_INLINE_NO_WHITESPACE - -
-          Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block.
-static TagActionCommonTagActions.TA_INLINE_WHITESPACE - -
-          Marks this tag a simple "inline" element, which generates whitespace, but no new block.
-  -

- - - - - - - - - - - - - -
Methods in de.l3s.boilerpipe.sax with parameters of type TagAction
-protected  voidTagActionMap.addTagAction(java.lang.String tag, - TagAction action) - -
-          Adds a particular TagAction for a given tag.
-protected  voidTagActionMap.setTagAction(java.lang.String tag, - TagAction action) - -
-          Sets a particular TagAction for a given tag.
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type TagAction
CommonTagActions.Chained(TagAction t1, - TagAction t2) - -
-           
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/TagActionMap.html b/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/TagActionMap.html deleted file mode 100644 index be09eb6..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/class-use/TagActionMap.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.sax.TagActionMap (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.sax.TagActionMap

-
- - - - - - - - - -
-Packages that use TagActionMap
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - -
-Uses of TagActionMap in de.l3s.boilerpipe.sax
-  -

- - - - - - - - - -
Subclasses of TagActionMap in de.l3s.boilerpipe.sax
- classDefaultTagActionMap - -
-          Default TagActions.
-  -

- - - - - - - - - -
Fields in de.l3s.boilerpipe.sax declared as TagActionMap
-static TagActionMapDefaultTagActionMap.INSTANCE - -
-           
-  -

- - - - - - - - -
Constructors in de.l3s.boilerpipe.sax with parameters of type TagActionMap
BoilerpipeHTMLContentHandler(TagActionMap tagActions) - -
-          Constructs a BoilerpipeHTMLContentHandler using the given - TagActionMap.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/sax/package-frame.html deleted file mode 100644 index 1a1dbad..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/package-frame.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.sax - - - - -
-Interfaces  - -
-InputSourceable -
-TagAction
- - - - - - -
-Classes  - -
-BoilerpipeHTMLContentHandler -
-BoilerpipeHTMLParser -
-BoilerpipeSAXInput -
-CommonTagActions -
-CommonTagActions.BlockTagLabelAction -
-CommonTagActions.Chained -
-CommonTagActions.InlineTagLabelAction -
-DefaultTagActionMap -
-HTMLDocument -
-HTMLFetcher -
-HTMLHighlighter -
-MarkupTagAction -
-TagActionMap
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/sax/package-summary.html deleted file mode 100644 index 7426967..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/package-summary.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.sax -

- -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. -

-See: -
-          Description -

- - - - - - - - - - - - - -
-Interface Summary
InputSourceableAn InputSourceable can return an arbitrary number of new InputSources for a given document.
TagActionDefines an action that is to be performed whenever a particular tag occurs - during HTML parsing.
-  - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Class Summary
BoilerpipeHTMLContentHandlerA simple SAX ContentHandler, used by BoilerpipeSAXInput.
BoilerpipeHTMLParserA simple SAX Parser, used by BoilerpipeSAXInput.
BoilerpipeSAXInputParses an InputSource using SAX and returns a TextDocument.
CommonTagActionsDefines an action that is to be performed whenever a particular tag occurs during HTML parsing.
CommonTagActions.BlockTagLabelActionCommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock.
CommonTagActions.Chained 
CommonTagActions.InlineTagLabelActionCommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock.
DefaultTagActionMapDefault TagActions.
HTMLDocumentAn InputSourceable for HTMLFetcher.
HTMLFetcherA very simple HTTP/HTML fetcher, really just for demo purposes.
HTMLHighlighterHighlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument.
MarkupTagActionAssigns labels for element CSS classes and ids to the corresponding - TextBlock.
TagActionMapBase class for definition a set of TagActions that are to be used for the - HTML parsing process.
-  - -

-

-Package de.l3s.boilerpipe.sax Description -

- -

-

-Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/sax/package-tree.html deleted file mode 100644 index 223f521..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/package-tree.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -de.l3s.boilerpipe.sax Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.sax -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/sax/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/sax/package-use.html deleted file mode 100644 index d4f471e..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/sax/package-use.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.sax (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.sax

-
- - - - - - - - - - - - - -
-Packages that use de.l3s.boilerpipe.sax
de.l3s.boilerpipe.boilers  
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments. 
-  -

- - - - - - - - -
-Classes in de.l3s.boilerpipe.sax used by de.l3s.boilerpipe.boilers
HTMLDocument - -
-          An InputSourceable for HTMLFetcher.
-  -

- - - - - - - - - - - - - - - - - - - - - - - - - - -
-Classes in de.l3s.boilerpipe.sax used by de.l3s.boilerpipe.sax
BoilerpipeHTMLContentHandler - -
-          A simple SAX ContentHandler, used by BoilerpipeSAXInput.
BoilerpipeHTMLParser - -
-          A simple SAX Parser, used by BoilerpipeSAXInput.
HTMLDocument - -
-          An InputSourceable for HTMLFetcher.
HTMLHighlighter - -
-          Highlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument.
InputSourceable - -
-          An InputSourceable can return an arbitrary number of new InputSources for a given document.
TagAction - -
-          Defines an action that is to be performed whenever a particular tag occurs - during HTML parsing.
TagActionMap - -
-          Base class for definition a set of TagActions that are to be used for the - HTML parsing process.
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/util/UnicodeTokenizer.html b/javadoc/1.2/de/l3s/boilerpipe/util/UnicodeTokenizer.html deleted file mode 100644 index fd767b1..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/util/UnicodeTokenizer.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - -UnicodeTokenizer (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- -

- -de.l3s.boilerpipe.util -
-Class UnicodeTokenizer

-
-java.lang.Object
-  extended by de.l3s.boilerpipe.util.UnicodeTokenizer
-
-
-
-
public class UnicodeTokenizer
extends java.lang.Object
- - -

-Tokenizes text according to Unicode word boundaries and strips off non-word - characters. -

- -

-

-
Author:
-
Christian Kohlschütter
-
-
- -

- - - - - - - - - - - -
-Constructor Summary
UnicodeTokenizer() - -
-           
-  - - - - - - - - - - - -
-Method Summary
-static java.lang.String[]tokenize(java.lang.CharSequence text) - -
-          Tokenizes the text and returns an array of tokens.
- - - - - - - -
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-  -

- - - - - - - - -
-Constructor Detail
- -

-UnicodeTokenizer

-
-public UnicodeTokenizer()
-
-
- - - - - - - - -
-Method Detail
- -

-tokenize

-
-public static java.lang.String[] tokenize(java.lang.CharSequence text)
-
-
Tokenizes the text and returns an array of tokens. -

-

-
Parameters:
text - The text -
Returns:
The tokens
-
-
- -
- - - - - - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html b/javadoc/1.2/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html deleted file mode 100644 index e07b99a..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/util/class-use/UnicodeTokenizer.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Class de.l3s.boilerpipe.util.UnicodeTokenizer (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Class
de.l3s.boilerpipe.util.UnicodeTokenizer

-
-No usage of de.l3s.boilerpipe.util.UnicodeTokenizer -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/util/package-frame.html b/javadoc/1.2/de/l3s/boilerpipe/util/package-frame.html deleted file mode 100644 index bb625ba..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/util/package-frame.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util (1.2 API) - - - - - - - - - -de.l3s.boilerpipe.util - - - - -
-Classes  - -
-UnicodeTokenizer
- - - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/util/package-summary.html b/javadoc/1.2/de/l3s/boilerpipe/util/package-summary.html deleted file mode 100644 index a957c45..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/util/package-summary.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-

-Package de.l3s.boilerpipe.util -

- -Some helper classes. -

-See: -
-          Description -

- - - - - - - - - -
-Class Summary
UnicodeTokenizerTokenizes text according to Unicode word boundaries and strips off non-word - characters.
-  - -

-

-Package de.l3s.boilerpipe.util Description -

- -

-

-Some helper classes. -

-

- -

-

-
-
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/util/package-tree.html b/javadoc/1.2/de/l3s/boilerpipe/util/package-tree.html deleted file mode 100644 index c734e2e..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/util/package-tree.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -de.l3s.boilerpipe.util Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For Package de.l3s.boilerpipe.util -

-
-
-
Package Hierarchies:
All Packages
-
-

-Class Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/de/l3s/boilerpipe/util/package-use.html b/javadoc/1.2/de/l3s/boilerpipe/util/package-use.html deleted file mode 100644 index 4f5d643..0000000 --- a/javadoc/1.2/de/l3s/boilerpipe/util/package-use.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Uses of Package de.l3s.boilerpipe.util (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Uses of Package
de.l3s.boilerpipe.util

-
-No usage of de.l3s.boilerpipe.util -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/deprecated-list.html b/javadoc/1.2/deprecated-list.html deleted file mode 100644 index 4066306..0000000 --- a/javadoc/1.2/deprecated-list.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -Deprecated List (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Deprecated API

-
-
-Contents - - - - - - - - - -
-Deprecated Fields
de.l3s.boilerpipe.sax.CommonTagActions.TA_INLINE -
-          Use CommonTagActions.TA_INLINE_WHITESPACE instead 
-  -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/help-doc.html b/javadoc/1.2/help-doc.html deleted file mode 100644 index 4fa2462..0000000 --- a/javadoc/1.2/help-doc.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -API Help (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-How This API Document Is Organized

-
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

-Overview

-
- -

-The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

-

-Package

-
- -

-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    -
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
-
-

-Class/Interface

-
- -

-Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    -
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description -

    -

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary -

    -

  • Field Detail
  • Constructor Detail
  • Method Detail
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
- -

-Annotation Type

-
- -

-Each annotation type has its own separate page with the following sections:

    -
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
-
- -

-Enum

-
- -

-Each enum has its own separate page with the following sections:

    -
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
-
-

-Use

-
-Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
-

-Tree (Class Hierarchy)

-
-There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    -
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
-
-

-Deprecated API

-
-The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
-

-Index

-
-The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
-

-Prev/Next

-These links take you to the next or previous class, interface, package, or related page.

-Frames/No Frames

-These links show and hide the HTML frames. All pages are available with or without frames. -

-

-Serialized Form

-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. -

-

-Constant Field Values

-The Constant Field Values page lists the static final fields and their values. -

- - -This help file applies to API documentation generated using the standard doclet. - -
-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/index-all.html b/javadoc/1.2/index-all.html deleted file mode 100644 index a131518..0000000 --- a/javadoc/1.2/index-all.html +++ /dev/null @@ -1,1140 +0,0 @@ - - - - - - -Index (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -A B C D E F G H I K L M N P R S T U
-

-A

-
-
addLabel(String) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Adds an arbitrary String label to this TextBlock. -
addLabelAction(LabelAction) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
addLabels(Set<String>) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Adds a set of labels to this TextBlock. -
addLabels(String...) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Adds a set of labels to this TextBlock. -
addLabelsTo(TextBlock) - -Method in class de.l3s.boilerpipe.labels.LabelAction -
  -
AddPrecedingLabelsFilter - Class in de.l3s.boilerpipe.filters.heuristics
Adds the labels of the preceding block to the current block, optionally adding a prefix.
AddPrecedingLabelsFilter(String) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.AddPrecedingLabelsFilter -
Creates a new AddPrecedingLabelsFilter instance. -
addTagAction(String, TagAction) - -Method in class de.l3s.boilerpipe.sax.TagActionMap -
Adds a particular TagAction for a given tag. -
addTextBlock(TextBlock) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
addTo(TextBlock) - -Method in class de.l3s.boilerpipe.labels.ConditionalLabelAction -
  -
addTo(TextBlock) - -Method in class de.l3s.boilerpipe.labels.LabelAction -
  -
addWhitespaceIfNecessary() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
ARTICLE_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Works very well for most types of Article-like HTML. -
ARTICLE_METADATA - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
ArticleExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which is tuned towards news articles.
ArticleExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
ArticleMetadataFilter - Class in de.l3s.boilerpipe.filters.heuristics
 
ArticleSentencesExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which is tuned towards extracting sentences from news articles.
ArticleSentencesExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
avgNumWords() - -Method in class de.l3s.boilerpipe.document.TextDocumentStatistics -
Returns the average number of words at block-level (= overall number of words divided by - the number of blocks). -
-
-

-B

-
-
BlockProximityFusion - Class in de.l3s.boilerpipe.filters.heuristics
Fuses adjacent blocks if their distance (in blocks) does not exceed a certain limit.
BlockProximityFusion(int, boolean, boolean) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
Creates a new BlockProximityFusion instance. -
BoilerpipeDocumentSource - Interface in de.l3s.boilerpipe
 
BoilerpipeExtractor - Interface in de.l3s.boilerpipe
Describes a complete filter pipeline.
BoilerpipeFilter - Interface in de.l3s.boilerpipe
A generic BoilerpipeFilter.
BoilerpipeHTMLContentHandler - Class in de.l3s.boilerpipe.sax
A simple SAX ContentHandler, used by BoilerpipeSAXInput.
BoilerpipeHTMLContentHandler() - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Constructs a BoilerpipeHTMLContentHandler using the - DefaultTagActionMap. -
BoilerpipeHTMLContentHandler(TagActionMap) - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Constructs a BoilerpipeHTMLContentHandler using the given - TagActionMap. -
BoilerpipeHTMLParser - Class in de.l3s.boilerpipe.sax
A simple SAX Parser, used by BoilerpipeSAXInput.
BoilerpipeHTMLParser() - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
Constructs a BoilerpipeHTMLParser using a default HTML content handler. -
BoilerpipeHTMLParser(BoilerpipeHTMLContentHandler) - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
Constructs a BoilerpipeHTMLParser using the given BoilerpipeHTMLContentHandler. -
BoilerpipeHTMLParser(boolean) - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
  -
BoilerpipeInput - Interface in de.l3s.boilerpipe
A source that returns TextDocuments.
BoilerpipeProcessingException - Exception in de.l3s.boilerpipe
Exception for signaling failure in the processing pipeline.
BoilerpipeProcessingException() - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(String, Throwable) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(String) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeProcessingException(Throwable) - -Constructor for exception de.l3s.boilerpipe.BoilerpipeProcessingException -
  -
BoilerpipeSAXInput - Class in de.l3s.boilerpipe.sax
Parses an InputSource using SAX and returns a TextDocument.
BoilerpipeSAXInput(InputSource) - -Constructor for class de.l3s.boilerpipe.sax.BoilerpipeSAXInput -
Creates a new instance of BoilerpipeSAXInput for the given InputSource. -
BoilerplateBlockFilter - Class in de.l3s.boilerpipe.filters.simple
Removes TextBlocks which have explicitly been marked as "not content".
BoilerplateBlockFilter() - -Constructor for class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
-
-

-C

-
-
CANOLA_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Trained on krdwrd Canola (different definition of "boilerplate"). -
CanolaExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor trained on krdwrd Canola - .
CanolaExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.CanolaExtractor -
  -
changesTagLevel() - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -
  -
changesTagLevel() - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.Chained -
  -
changesTagLevel() - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -
  -
changesTagLevel() - -Method in class de.l3s.boilerpipe.sax.MarkupTagAction -
  -
changesTagLevel() - -Method in interface de.l3s.boilerpipe.sax.TagAction -
  -
characters(char[], int, int) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
CLASSIFIER - -Static variable in class de.l3s.boilerpipe.extractors.CanolaExtractor -
The actual classifier, exposed. -
classify(TextBlock, TextBlock, TextBlock) - -Method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
classify(TextBlock, TextBlock, TextBlock) - -Method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
clone() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
CommonExtractors - Class in de.l3s.boilerpipe.extractors
Provides quick access to common BoilerpipeExtractors.
CommonTagActions - Class in de.l3s.boilerpipe.sax
Defines an action that is to be performed whenever a particular tag occurs during HTML parsing.
CommonTagActions.BlockTagLabelAction - Class in de.l3s.boilerpipe.sax
CommonTagActions for block-level elements, which triggers some LabelAction on the generated - TextBlock.
CommonTagActions.BlockTagLabelAction(LabelAction) - -Constructor for class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -
  -
CommonTagActions.Chained - Class in de.l3s.boilerpipe.sax
 
CommonTagActions.Chained(TagAction, TagAction) - -Constructor for class de.l3s.boilerpipe.sax.CommonTagActions.Chained -
  -
CommonTagActions.InlineTagLabelAction - Class in de.l3s.boilerpipe.sax
CommonTagActions for inline elements, which triggers some LabelAction on the generated - TextBlock.
CommonTagActions.InlineTagLabelAction(LabelAction) - -Constructor for class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -
  -
ConditionalLabelAction - Class in de.l3s.boilerpipe.labels
Adds labels to a TextBlock if the given criteria are met.
ConditionalLabelAction(TextBlockCondition, String...) - -Constructor for class de.l3s.boilerpipe.labels.ConditionalLabelAction -
  -
ContentFusion - Class in de.l3s.boilerpipe.filters.heuristics
 
ContentFusion() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.ContentFusion -
Creates a new ContentFusion instance. -
CopyOfTerminatingBlocksFinder - Class in de.l3s.boilerpipe.filters.english
Finds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT.
CopyOfTerminatingBlocksFinder() - -Constructor for class de.l3s.boilerpipe.filters.english.CopyOfTerminatingBlocksFinder -
  -
-
-

-D

-
-
de.l3s.boilerpipe - package de.l3s.boilerpipe
-The Boilerpipe top-level package.
de.l3s.boilerpipe.boilers - package de.l3s.boilerpipe.boilers
 
de.l3s.boilerpipe.conditions - package de.l3s.boilerpipe.conditions
 
de.l3s.boilerpipe.document - package de.l3s.boilerpipe.document
-The classes in this package represent the simple Boilerpipe document model.
de.l3s.boilerpipe.estimators - package de.l3s.boilerpipe.estimators
 
de.l3s.boilerpipe.extractors - package de.l3s.boilerpipe.extractors
-This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -
de.l3s.boilerpipe.filters.english - package de.l3s.boilerpipe.filters.english
-The BoilerpipeFilters in this package have only been tested on English text.
de.l3s.boilerpipe.filters.heuristics - package de.l3s.boilerpipe.filters.heuristics
-The BoilerpipeFilters in this package are pure heuristics.
de.l3s.boilerpipe.filters.simple - package de.l3s.boilerpipe.filters.simple
-The BoilerpipeFilters in this package are straight-forward and probably not really specific to English.
de.l3s.boilerpipe.labels - package de.l3s.boilerpipe.labels
 
de.l3s.boilerpipe.sax - package de.l3s.boilerpipe.sax
-Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments.
de.l3s.boilerpipe.util - package de.l3s.boilerpipe.util
-Some helper classes.
debugString() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns detailed debugging information about the contained TextBlocks. -
DEFAULT_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Usually worse than ArticleExtractor, but simpler/no heuristics. -
DEFAULT_INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
DEFAULT_INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
DefaultExtractor - Class in de.l3s.boilerpipe.extractors
A quite generic full-text extractor.
DefaultExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
DefaultLabels - Class in de.l3s.boilerpipe.labels
Some pre-defined labels which can be used in conjunction with - TextBlock.addLabel(String) and TextBlock.hasLabel(String).
DefaultLabels() - -Constructor for class de.l3s.boilerpipe.labels.DefaultLabels -
  -
DefaultTagActionMap - Class in de.l3s.boilerpipe.sax
Default TagActions.
DefaultTagActionMap() - -Constructor for class de.l3s.boilerpipe.sax.DefaultTagActionMap -
  -
DensityRulesClassifier - Class in de.l3s.boilerpipe.filters.english
Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in the - paper "Boilerplate Detection using Shallow Text Features", particularly using - text densities and link densities.
DensityRulesClassifier() - -Constructor for class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
DocumentTitleMatchClassifier - Class in de.l3s.boilerpipe.filters.heuristics
Marks TextBlocks which contain parts of the HTML - <TITLE> tag, using some heuristics which are quite - specific to the news domain.
DocumentTitleMatchClassifier(String) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -
  -
-
-

-E

-
-
EMPTY_END - -Static variable in class de.l3s.boilerpipe.document.TextBlock -
  -
EMPTY_START - -Static variable in class de.l3s.boilerpipe.document.TextBlock -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.Chained -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in class de.l3s.boilerpipe.sax.MarkupTagAction -
  -
end(BoilerpipeHTMLContentHandler, String, String) - -Method in interface de.l3s.boilerpipe.sax.TagAction -
  -
endDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
endElement(String, String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
endPrefixMapping(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
ExpandTitleToContentFilter - Class in de.l3s.boilerpipe.filters.heuristics
Marks all TextBlocks "content" which are between the headline and the part that - has already been marked content, if they are marked DefaultLabels.MIGHT_BE_CONTENT.
ExpandTitleToContentFilter() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
ExtractorBase - Class in de.l3s.boilerpipe.extractors
The base class of Extractors.
ExtractorBase() - -Constructor for class de.l3s.boilerpipe.extractors.ExtractorBase -
  -
-
-

-F

-
-
fetch(URL) - -Static method in class de.l3s.boilerpipe.sax.HTMLFetcher -
Fetches the document at the given URL, using URLConnection. -
flushBlock() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-G

-
-
getCharset() - -Method in class de.l3s.boilerpipe.sax.HTMLDocument -
  -
getContainedTextElements() - -Method in class de.l3s.boilerpipe.document.TextBlock -
Returns the containedTextElements BitSet, or null. -
getContent() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextDocument's content. -
getData() - -Method in class de.l3s.boilerpipe.sax.HTMLDocument -
  -
getDefaultInstance() - -Static method in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
Returns the singleton instance for DeleteBlocksAfterContentFilter. -
getDefaultInstance() - -Static method in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
getExtraStyleSheet() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Returns the extra stylesheet definition that will be inserted in the HEAD - element. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.ArticleExtractor -
Returns the singleton instance for ArticleExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
Returns the singleton instance for ArticleSentencesExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.CanolaExtractor -
Returns the singleton instance for CanolaExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.DefaultExtractor -
Returns the singleton instance for DefaultExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
Returns the singleton instance for LargestContentExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.LargestContentExtractor2 -
Returns the singleton instance for LargestContentExtractor2. -
getInstance() - -Static method in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
Returns the singleton instance for NumWordsRulesExtractor. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.CopyOfTerminatingBlocksFinder -
Returns the singleton instance for TerminatingBlocksFinder. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
Returns the singleton instance for RulebasedBoilerpipeClassifier. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
Returns the singleton instance for RulebasedBoilerpipeClassifier. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
Returns the singleton instance for TerminatingBlocksFinder. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
Returns the singleton instance for ExpandTitleToContentFilter. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
Returns the singleton instance for BlockFusionProcessor. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
Returns the singleton instance for BoilerplateBlockFilter. -
getInstance() - -Static method in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
Returns the singleton instance for TerminatingBlocksFinder. -
getLabels() - -Method in class de.l3s.boilerpipe.document.TextBlock -
Returns the labels associated to this TextBlock, or null if no such labels - exist. -
getLinkDensity() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getNumWords() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getNumWords() - -Method in class de.l3s.boilerpipe.document.TextDocumentStatistics -
Returns the overall number of words in all blocks. -
getNumWordsInAnchorText() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getOffsetBlocksEnd() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getOffsetBlocksStart() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getPostHighlight() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Returns the string that will be inserted after any highlighted HTML - block. -
getPotentialTitles() - -Method in class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -
  -
getPreHighlight() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Returns the string that will be inserted before any highlighted HTML - block. -
getTagLevel() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getText(String) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code given as a String. -
getText(InputSource) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code available from the given - InputSource. -
getText(Reader) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the HTML code available from the given Reader. -
getText(TextDocument) - -Method in interface de.l3s.boilerpipe.BoilerpipeExtractor -
Extracts text from the given TextDocument object. -
getText() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getText(boolean, boolean) - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextDocument's content, non-content or both -
getText(String) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code given as a String. -
getText(InputSource) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given InputSource. -
getText(URL) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given URL. -
getText(Reader) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the HTML code available from the given Reader. -
getText(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ExtractorBase -
Extracts text from the given TextDocument object. -
getTextBlocks() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the TextBlocks of this document. -
getTextDensity() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
getTextDocument() - -Method in interface de.l3s.boilerpipe.BoilerpipeInput -
Returns (somehow) a TextDocument. -
getTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeSAXInput -
Retrieves the TextDocument using a default HTML parser. -
getTextDocument(BoilerpipeHTMLParser) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeSAXInput -
Retrieves the TextDocument using the given HTML parser. -
getTitle() - -Method in class de.l3s.boilerpipe.document.TextDocument -
Returns the "main" title for this document, or null if no - such title has ben set. -
getTitle() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-H

-
-
hasLabel(String) - -Method in class de.l3s.boilerpipe.document.TextBlock -
Checks whether this TextBlock has the given label. -
HR - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
HTMLDocument - Class in de.l3s.boilerpipe.sax
An InputSourceable for HTMLFetcher.
HTMLDocument(byte[], Charset) - -Constructor for class de.l3s.boilerpipe.sax.HTMLDocument -
  -
HTMLDocument(String) - -Constructor for class de.l3s.boilerpipe.sax.HTMLDocument -
  -
HTMLFetcher - Class in de.l3s.boilerpipe.sax
A very simple HTTP/HTML fetcher, really just for demo purposes.
HTMLHighlighter - Class in de.l3s.boilerpipe.sax
Highlights text blocks in an HTML document that have been marked as "content" - in the corresponding TextDocument.
-
-

-I

-
-
ignorableWhitespace(char[], int, int) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
IgnoreBlocksAfterContentFilter - Class in de.l3s.boilerpipe.filters.english
Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT.
IgnoreBlocksAfterContentFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
IgnoreBlocksAfterContentFromEndFilter - Class in de.l3s.boilerpipe.filters.english
Marks all blocks as "non-content" that occur after blocks that have been - marked DefaultLabels.INDICATES_END_OF_TEXT, and after any content block.
INDICATES_END_OF_TEXT - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
InputSourceable - Interface in de.l3s.boilerpipe.sax
An InputSourceable can return an arbitrary number of new InputSources for a given document.
INSTANCE - -Static variable in class de.l3s.boilerpipe.boilers.StructureAwareBoiler -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.estimators.SimpleEstimator -
Returns the singleton instance of SimpleEstimator -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.CanolaExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.KeepEverythingExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.LargestContentExtractor2 -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.CopyOfTerminatingBlocksFinder -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFromEndFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.AddPrecedingLabelsFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.ArticleMetadataFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.ContentFusion -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.LabelFusion -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.InvertedFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
INSTANCE - -Static variable in class de.l3s.boilerpipe.sax.DefaultTagActionMap -
  -
INSTANCE_200 - -Static variable in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
INSTANCE_EXPAND_TO_SAME_TAGLEVEL - -Static variable in class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
INSTANCE_PRE - -Static variable in class de.l3s.boilerpipe.filters.heuristics.AddPrecedingLabelsFilter -
  -
INSTANCE_STRICTLY_NOT_CONTENT - -Static variable in class de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter -
  -
INSTANCE_TEXT - -Static variable in class de.l3s.boilerpipe.filters.simple.SurroundingToContentFilter -
  -
InvertedFilter - Class in de.l3s.boilerpipe.filters.simple
Reverts the "isContent" flag for all TextBlocks
isContent() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
isLowQuality(TextDocumentStatistics, TextDocumentStatistics) - -Method in class de.l3s.boilerpipe.estimators.SimpleEstimator -
Given the statistics of the document before and after applying the BoilerpipeExtractor, - can we regard the extraction quality (too) low? -
isOutputHighlightOnly() - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
If true, only HTML enclosed within highlighted content will be returned -
-
-

-K

-
-
KEEP_EVERYTHING_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Dummy Extractor; should return the input text. -
KeepEverythingExtractor - Class in de.l3s.boilerpipe.extractors
Marks everything as content.
KeepEverythingWithMinKWordsExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which extracts the largest text component of a page.
KeepEverythingWithMinKWordsExtractor(int) - -Constructor for class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -
  -
KeepLargestBlockFilter - Class in de.l3s.boilerpipe.filters.heuristics
Keeps the largest TextBlock only (by the number of words).
KeepLargestBlockFilter(boolean) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
KeepLargestFulltextBlockFilter - Class in de.l3s.boilerpipe.filters.english
Keeps the largest TextBlock only (by the number of words).
KeepLargestFulltextBlockFilter() - -Constructor for class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
-
-

-L

-
-
LabelAction - Class in de.l3s.boilerpipe.labels
Helps adding labels to TextBlocks.
LabelAction(String...) - -Constructor for class de.l3s.boilerpipe.labels.LabelAction -
  -
LabelFusion - Class in de.l3s.boilerpipe.filters.heuristics
Fuses adjacent blocks if their labels are equal.
LabelFusion(String) - -Constructor for class de.l3s.boilerpipe.filters.heuristics.LabelFusion -
Creates a new LabelFusion instance. -
labels - -Variable in class de.l3s.boilerpipe.labels.LabelAction -
  -
LabelToBoilerplateFilter - Class in de.l3s.boilerpipe.filters.simple
Marks all blocks that contain a given label as "boilerplate".
LabelToBoilerplateFilter(String...) - -Constructor for class de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter -
  -
LabelToContentFilter - Class in de.l3s.boilerpipe.filters.simple
Marks all blocks that contain a given label as "content".
LabelToContentFilter(String...) - -Constructor for class de.l3s.boilerpipe.filters.simple.LabelToContentFilter -
  -
LARGEST_CONTENT_EXTRACTOR - -Static variable in class de.l3s.boilerpipe.extractors.CommonExtractors -
Like DefaultExtractor, but keeps the largest text block only. -
LargestContentExtractor - Class in de.l3s.boilerpipe.extractors
A full-text extractor which extracts the largest text component of a page.
LargestContentExtractor2 - Class in de.l3s.boilerpipe.extractors
A full-text extractor which extracts the largest text component of a page.
-
-

-M

-
-
main(String[]) - -Static method in class de.l3s.boilerpipe.boilers.StructureAwareBoiler -
  -
MarkEverythingContentFilter - Class in de.l3s.boilerpipe.filters.simple
Marks all blocks as content.
MARKUP_PREFIX - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
MarkupTagAction - Class in de.l3s.boilerpipe.sax
Assigns labels for element CSS classes and ids to the corresponding - TextBlock.
MarkupTagAction(boolean) - -Constructor for class de.l3s.boilerpipe.sax.MarkupTagAction -
  -
MAX_DISTANCE_1 - -Static variable in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
MAX_DISTANCE_1_CONTENT_ONLY - -Static variable in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
MAX_DISTANCE_1_CONTENT_ONLY_SAME_TAGLEVEL - -Static variable in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
MAX_DISTANCE_1_SAME_TAGLEVEL - -Static variable in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
meetsCondition(TextBlock) - -Method in interface de.l3s.boilerpipe.conditions.TextBlockCondition -
Returns true iff the given TextBlock tb meets the defined condition. -
mergeNext(TextBlock) - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
MIGHT_BE_CONTENT - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
MinClauseWordsFilter - Class in de.l3s.boilerpipe.filters.simple
Keeps only blocks that have at least one segment fragment ("clause") with at - least k words (default: 5).
MinClauseWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
MinClauseWordsFilter(int, boolean) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
MinFulltextWordsFilter - Class in de.l3s.boilerpipe.filters.english
Keeps only those content blocks which contain at least k full-text words - (measured by HeuristicFilterBase.getNumFullTextWords(TextBlock)). k is 30 by default.
MinFulltextWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
MinWordsFilter - Class in de.l3s.boilerpipe.filters.simple
Keeps only those content blocks which contain at least k words.
MinWordsFilter(int) - -Constructor for class de.l3s.boilerpipe.filters.simple.MinWordsFilter -
  -
-
-

-N

-
-
newExtractingInstance() - -Static method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Creates a new HTMLHighlighter, which is set-up to return only the - extracted HTML text, including enclosed markup. -
newHighlightingInstance() - -Static method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Creates a new HTMLHighlighter, which is set-up to return the full - HTML text, with the extracted text portion highlighted. -
NumWordsRulesClassifier - Class in de.l3s.boilerpipe.filters.english
Classifies TextBlocks as content/not-content through rules that have - been determined using the C4.8 machine learning algorithm, as described in - the paper "Boilerplate Detection using Shallow Text Features" (WSDM 2010), - particularly using number of words per block and link density per block.
NumWordsRulesClassifier() - -Constructor for class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
NumWordsRulesExtractor - Class in de.l3s.boilerpipe.extractors
A quite generic full-text extractor solely based upon the number of words per - block (the current, the previous and the next block).
NumWordsRulesExtractor() - -Constructor for class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
-
-

-P

-
-
process(TextDocument) - -Method in interface de.l3s.boilerpipe.BoilerpipeFilter -
Processes the given document doc. -
process(HTMLDocument) - -Method in class de.l3s.boilerpipe.boilers.StructureAwareBoiler -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ArticleExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.ArticleSentencesExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.CanolaExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.DefaultExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.KeepEverythingExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.KeepEverythingWithMinKWordsExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.LargestContentExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.LargestContentExtractor2 -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.extractors.NumWordsRulesExtractor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.CopyOfTerminatingBlocksFinder -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.DensityRulesClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.IgnoreBlocksAfterContentFromEndFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.KeepLargestFulltextBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.MinFulltextWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.NumWordsRulesClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.AddPrecedingLabelsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.ArticleMetadataFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.BlockProximityFusion -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.ContentFusion -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.DocumentTitleMatchClassifier -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.ExpandTitleToContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.KeepLargestBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.LabelFusion -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.BoilerplateBlockFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.InvertedFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.LabelToBoilerplateFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.LabelToContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MarkEverythingContentFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MinClauseWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.MinWordsFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
process(TextDocument) - -Method in class de.l3s.boilerpipe.filters.simple.SurroundingToContentFilter -
  -
process(TextDocument, String) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Processes the given TextDocument and the original HTML text (as a - String). -
process(TextDocument, InputSource) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Processes the given TextDocument and the original HTML text (as - an InputSource). -
process(URL, BoilerpipeExtractor) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
  -
processingInstruction(String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
-
-

-R

-
-
recycle() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Recycles this instance. -
removeLabel(String) - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
-
-

-S

-
-
setContentHandler(BoilerpipeHTMLContentHandler) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
  -
setContentHandler(ContentHandler) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
  -
setDocumentLocator(Locator) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
setExtraStyleSheet(String) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Sets the extra stylesheet definition that will be inserted in the HEAD - element. -
setIsContent(boolean) - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
setOutputHighlightOnly(boolean) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Sets whether only HTML enclosed within highlighted content will be - returned, or the whole HTML document. -
setPostHighlight(String) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Sets the string that will be inserted after any highlighted HTML block. -
setPreHighlight(String) - -Method in class de.l3s.boilerpipe.sax.HTMLHighlighter -
Sets the string that will be inserted prior to any highlighted HTML - block. -
setTagAction(String, TagAction) - -Method in class de.l3s.boilerpipe.sax.TagActionMap -
Sets a particular TagAction for a given tag. -
setTagLevel(int) - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
setTitle(String) - -Method in class de.l3s.boilerpipe.document.TextDocument -
Updates the "main" title for this document. -
setTitle(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
SimpleBlockFusionProcessor - Class in de.l3s.boilerpipe.filters.heuristics
Merges two subsequent blocks if their text densities are equal.
SimpleBlockFusionProcessor() - -Constructor for class de.l3s.boilerpipe.filters.heuristics.SimpleBlockFusionProcessor -
  -
SimpleEstimator - Class in de.l3s.boilerpipe.estimators
Estimates the "goodness" of a BoilerpipeExtractor on a given document.
skippedEntity(String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
SplitParagraphBlocksFilter - Class in de.l3s.boilerpipe.filters.simple
Splits TextBlocks at paragraph boundaries.
SplitParagraphBlocksFilter() - -Constructor for class de.l3s.boilerpipe.filters.simple.SplitParagraphBlocksFilter -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.BlockTagLabelAction -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.Chained -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.CommonTagActions.InlineTagLabelAction -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.MarkupTagAction -
  -
start(BoilerpipeHTMLContentHandler, String, String, Attributes) - -Method in interface de.l3s.boilerpipe.sax.TagAction -
  -
startDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
startElement(String, String, String, Attributes) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
startPrefixMapping(String, String) - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
  -
STRICTLY_NOT_CONTENT - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
StructureAwareBoiler - Class in de.l3s.boilerpipe.boilers
 
SurroundingToContentFilter - Class in de.l3s.boilerpipe.filters.simple
 
SurroundingToContentFilter(TextBlockCondition) - -Constructor for class de.l3s.boilerpipe.filters.simple.SurroundingToContentFilter -
  -
-
-

-T

-
-
TA_ANCHOR_TEXT - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag as "anchor" (this should usually only be set for the <A> tag). -
TA_BLOCK_LEVEL - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Explicitly marks this tag a simple "block-level" element, which always generates whitespace -
TA_BODY - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag the body element (this should usually only be set for the <BODY> tag). -
TA_FONT - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Special TagAction for the <FONT> tag, which keeps track of the - absolute and relative font size. -
TA_IGNORABLE_ELEMENT - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag as "ignorable", i.e. all its inner content is silently skipped. -
TA_INLINE - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Deprecated. Use CommonTagActions.TA_INLINE_WHITESPACE instead -
TA_INLINE_NO_WHITESPACE - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag a simple "inline" element, which neither generates whitespace, nor a new block. -
TA_INLINE_WHITESPACE - -Static variable in class de.l3s.boilerpipe.sax.CommonTagActions -
Marks this tag a simple "inline" element, which generates whitespace, but no new block. -
TagAction - Interface in de.l3s.boilerpipe.sax
Defines an action that is to be performed whenever a particular tag occurs - during HTML parsing.
TagActionMap - Class in de.l3s.boilerpipe.sax
Base class for definition a set of TagActions that are to be used for the - HTML parsing process.
TagActionMap() - -Constructor for class de.l3s.boilerpipe.sax.TagActionMap -
  -
TerminatingBlocksFinder - Class in de.l3s.boilerpipe.filters.english
Finds blocks which are potentially indicating the end of an article text and - marks them with DefaultLabels.INDICATES_END_OF_TEXT.
TerminatingBlocksFinder() - -Constructor for class de.l3s.boilerpipe.filters.english.TerminatingBlocksFinder -
  -
TextBlock - Class in de.l3s.boilerpipe.document
Describes a block of text.
TextBlock(String) - -Constructor for class de.l3s.boilerpipe.document.TextBlock -
  -
TextBlock(String, BitSet, int, int, int, int, int) - -Constructor for class de.l3s.boilerpipe.document.TextBlock -
  -
TextBlockCondition - Interface in de.l3s.boilerpipe.conditions
Evaluates whether a given TextBlock meets a certain condition.
TextDocument - Class in de.l3s.boilerpipe.document
A text document, consisting of one or more TextBlocks.
TextDocument(List<TextBlock>) - -Constructor for class de.l3s.boilerpipe.document.TextDocument -
Creates a new TextDocument with given TextBlocks, and no - title. -
TextDocument(String, List<TextBlock>) - -Constructor for class de.l3s.boilerpipe.document.TextDocument -
Creates a new TextDocument with given TextBlocks and - given title. -
TextDocumentStatistics - Class in de.l3s.boilerpipe.document
Provides shallow statistics on a given TextDocument
TextDocumentStatistics(TextDocument, boolean) - -Constructor for class de.l3s.boilerpipe.document.TextDocumentStatistics -
Computes statistics on a given TextDocument. -
TITLE - -Static variable in class de.l3s.boilerpipe.labels.DefaultLabels -
  -
toInputSource() - -Method in class de.l3s.boilerpipe.sax.HTMLDocument -
  -
toInputSource() - -Method in interface de.l3s.boilerpipe.sax.InputSourceable -
  -
tokenize(CharSequence) - -Static method in class de.l3s.boilerpipe.util.UnicodeTokenizer -
Tokenizes the text and returns an array of tokens. -
toString() - -Method in class de.l3s.boilerpipe.document.TextBlock -
  -
toString() - -Method in class de.l3s.boilerpipe.labels.LabelAction -
  -
toTextDocument() - -Method in interface de.l3s.boilerpipe.BoilerpipeDocumentSource -
  -
toTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLContentHandler -
Returns a TextDocument containing the extracted TextBlock - s. -
toTextDocument() - -Method in class de.l3s.boilerpipe.sax.BoilerpipeHTMLParser -
Returns a TextDocument containing the extracted TextBlock - s. -
-
-

-U

-
-
UnicodeTokenizer - Class in de.l3s.boilerpipe.util
Tokenizes text according to Unicode word boundaries and strips off non-word - characters.
UnicodeTokenizer() - -Constructor for class de.l3s.boilerpipe.util.UnicodeTokenizer -
  -
-
-A B C D E F G H I K L M N P R S T U - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/index.html b/javadoc/1.2/index.html deleted file mode 100644 index 52e2d6e..0000000 --- a/javadoc/1.2/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - -1.2 API - - - - - - - - - - - -<H2> -Frame Alert</H2> - -<P> -This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. -<BR> -Link to<A HREF="overview-summary.html">Non-frame version.</A> - - - diff --git a/javadoc/1.2/overview-frame.html b/javadoc/1.2/overview-frame.html deleted file mode 100644 index c36b987..0000000 --- a/javadoc/1.2/overview-frame.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - -Overview List (1.2 API) - - - - - - - - - - - - - -
-
- - - - - -
All Classes -

- -Packages -
-de.l3s.boilerpipe -
-de.l3s.boilerpipe.boilers -
-de.l3s.boilerpipe.conditions -
-de.l3s.boilerpipe.document -
-de.l3s.boilerpipe.estimators -
-de.l3s.boilerpipe.extractors -
-de.l3s.boilerpipe.filters.english -
-de.l3s.boilerpipe.filters.heuristics -
-de.l3s.boilerpipe.filters.simple -
-de.l3s.boilerpipe.labels -
-de.l3s.boilerpipe.sax -
-de.l3s.boilerpipe.util -
-

- -

-  - - diff --git a/javadoc/1.2/overview-summary.html b/javadoc/1.2/overview-summary.html deleted file mode 100644 index f0edd52..0000000 --- a/javadoc/1.2/overview-summary.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - -Overview (1.2 API) - - - - - - - - - - -


- - - - - - - - - - - - - - - -
- -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Packages
de.l3s.boilerpipe -The Boilerpipe top-level package.
de.l3s.boilerpipe.boilers 
de.l3s.boilerpipe.conditions 
de.l3s.boilerpipe.document -The classes in this package represent the simple Boilerpipe document model.
de.l3s.boilerpipe.estimators 
de.l3s.boilerpipe.extractors -This package contains some standard extractors (i.e., completely piped BoilerpipeFilters) -
de.l3s.boilerpipe.filters.english -The BoilerpipeFilters in this package have only been tested on English text.
de.l3s.boilerpipe.filters.heuristics -The BoilerpipeFilters in this package are pure heuristics.
de.l3s.boilerpipe.filters.simple -The BoilerpipeFilters in this package are straight-forward and probably not really specific to English.
de.l3s.boilerpipe.labels 
de.l3s.boilerpipe.sax -Classes related to parsing and producing HTML from/to Boilerpipe TextDocuments.
de.l3s.boilerpipe.util -Some helper classes.
- -


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/overview-tree.html b/javadoc/1.2/overview-tree.html deleted file mode 100644 index e3e474b..0000000 --- a/javadoc/1.2/overview-tree.html +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - -Class Hierarchy (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Hierarchy For All Packages

-
-
-
Package Hierarchies:
de.l3s.boilerpipe, de.l3s.boilerpipe.boilers, de.l3s.boilerpipe.conditions, de.l3s.boilerpipe.document, de.l3s.boilerpipe.estimators, de.l3s.boilerpipe.extractors, de.l3s.boilerpipe.filters.english, de.l3s.boilerpipe.filters.heuristics, de.l3s.boilerpipe.filters.simple, de.l3s.boilerpipe.labels, de.l3s.boilerpipe.sax, de.l3s.boilerpipe.util
-
-

-Class Hierarchy -

- -

-Interface Hierarchy -

- -
- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/package-list b/javadoc/1.2/package-list deleted file mode 100644 index 337ea5f..0000000 --- a/javadoc/1.2/package-list +++ /dev/null @@ -1,12 +0,0 @@ -de.l3s.boilerpipe -de.l3s.boilerpipe.boilers -de.l3s.boilerpipe.conditions -de.l3s.boilerpipe.document -de.l3s.boilerpipe.estimators -de.l3s.boilerpipe.extractors -de.l3s.boilerpipe.filters.english -de.l3s.boilerpipe.filters.heuristics -de.l3s.boilerpipe.filters.simple -de.l3s.boilerpipe.labels -de.l3s.boilerpipe.sax -de.l3s.boilerpipe.util diff --git a/javadoc/1.2/resources/inherit.gif b/javadoc/1.2/resources/inherit.gif deleted file mode 100644 index c814867a13deb0ca7ea2156c6ca1d5a03372af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X diff --git a/javadoc/1.2/serialized-form.html b/javadoc/1.2/serialized-form.html deleted file mode 100644 index 3da83f4..0000000 --- a/javadoc/1.2/serialized-form.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - -Serialized Form (1.2 API) - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- -
- - - -
-
-

-Serialized Form

-
-
- - - - - -
-Package de.l3s.boilerpipe
- -

- - - - - -
-Class de.l3s.boilerpipe.BoilerpipeProcessingException extends java.lang.Exception implements Serializable
- -

-serialVersionUID: 1L - -

-


- - - - - -
-Package de.l3s.boilerpipe.sax
- -

- - - - - -
-Class de.l3s.boilerpipe.sax.DefaultTagActionMap extends TagActionMap implements Serializable
- -

-serialVersionUID: 1L - -

- -

- - - - - -
-Class de.l3s.boilerpipe.sax.TagActionMap extends java.util.HashMap<java.lang.String,TagAction> implements Serializable
- -

-serialVersionUID: 1L - -

- -

-


- - - - - - - - - - - - - - - -
- -
- - - -
- - - diff --git a/javadoc/1.2/stylesheet.css b/javadoc/1.2/stylesheet.css deleted file mode 100644 index 6ea9e51..0000000 --- a/javadoc/1.2/stylesheet.css +++ /dev/null @@ -1,29 +0,0 @@ -/* Javadoc style sheet */ - -/* Define colors, fonts and other style attributes here to override the defaults */ - -/* Page background color */ -body { background-color: #FFFFFF; color:#000000 } - -/* Headings */ -h1 { font-size: 145% } - -/* Table colors */ -.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */ -.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */ -.TableRowColor { background: #FFFFFF; color:#000000 } /* White */ - -/* Font used in left-hand frame lists */ -.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 } -.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } -.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } - -/* Navigation bar fonts and colors */ -.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */ -.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */ -.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;} -.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;} - -.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} -.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} - diff --git a/lib/nekohtml-1.9.13.jar b/lib/nekohtml-1.9.13.jar deleted file mode 100644 index a8081d294524f723efa147a7633893b145e1b36b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121981 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π>1dhIExnX3U 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�`e@mifdB**C>#aqYU04#2N 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

Q;8(uyTV80_RWtEQ|KR%Ln2E# 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

q6wHghk0 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%0A})41t{;o;mIs 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