ruby_wordcram 1.0.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.mvn/extensions.xml +8 -0
- data/.mvn/wrapper/maven-wrapper.properties +1 -0
- data/Rakefile +28 -5
- data/docs/_posts/2017-03-07-getting_started.md +3 -2
- data/docs/_posts/2017-03-07-under_the_hood.md +33 -0
- data/lib/WordCram.jar +0 -0
- data/lib/jsoup-1.10.2.jar +0 -0
- data/lib/ruby_wordcram/version.rb +1 -1
- data/lib/ruby_wordcram.rb +1 -2
- data/pom.rb +53 -0
- data/pom.xml +87 -0
- data/ruby_wordcram.gemspec +1 -2
- data/src/cue/lang/Counter.java +141 -0
- data/src/cue/lang/IterableText.java +10 -0
- data/src/cue/lang/NGramIterator.java +151 -0
- data/src/cue/lang/SentenceIterator.java +86 -0
- data/src/cue/lang/WordIterator.java +60 -0
- data/src/cue/lang/stop/StopWords.java +114 -0
- data/src/cue/lang/stop/arabic +351 -0
- data/src/cue/lang/stop/armenian +45 -0
- data/src/cue/lang/stop/catalan +219 -0
- data/src/cue/lang/stop/croatian +2024 -0
- data/src/cue/lang/stop/czech +256 -0
- data/src/cue/lang/stop/danish +94 -0
- data/src/cue/lang/stop/dutch +107 -0
- data/src/cue/lang/stop/english +183 -0
- data/src/cue/lang/stop/esperanto +180 -0
- data/src/cue/lang/stop/farsi +966 -0
- data/src/cue/lang/stop/finnish +235 -0
- data/src/cue/lang/stop/french +543 -0
- data/src/cue/lang/stop/german +231 -0
- data/src/cue/lang/stop/greek +637 -0
- data/src/cue/lang/stop/hebrew +220 -0
- data/src/cue/lang/stop/hindi +97 -0
- data/src/cue/lang/stop/hungarian +202 -0
- data/src/cue/lang/stop/italian +279 -0
- data/src/cue/lang/stop/latin +1 -0
- data/src/cue/lang/stop/norwegian +176 -0
- data/src/cue/lang/stop/polish +138 -0
- data/src/cue/lang/stop/portuguese +204 -0
- data/src/cue/lang/stop/romanian +284 -0
- data/src/cue/lang/stop/russian +652 -0
- data/src/cue/lang/stop/slovak +110 -0
- data/src/cue/lang/stop/slovenian +448 -0
- data/src/cue/lang/stop/spanish +308 -0
- data/src/cue/lang/stop/swedish +114 -0
- data/src/cue/lang/stop/turkish +117 -0
- data/src/cue/lang/unicode/BlockUtil.java +103 -0
- data/src/cue/lang/unicode/Normalizer.java +55 -0
- data/src/cue/lang/unicode/Normalizer6.java +32 -0
- data/src/license.txt +201 -0
- data/src/wordcram/Anglers.java +137 -0
- data/src/wordcram/BBTree.java +133 -0
- data/src/wordcram/BBTreeBuilder.java +61 -0
- data/src/wordcram/Colorers.java +52 -0
- data/src/wordcram/EngineWord.java +73 -0
- data/src/wordcram/Fonters.java +17 -0
- data/src/wordcram/HsbWordColorer.java +28 -0
- data/src/wordcram/ImageShaper.java +91 -0
- data/src/wordcram/Observer.java +9 -0
- data/src/wordcram/PlacerHeatMap.java +134 -0
- data/src/wordcram/Placers.java +74 -0
- data/src/wordcram/PlottingWordNudger.java +38 -0
- data/src/wordcram/PlottingWordPlacer.java +36 -0
- data/src/wordcram/ProcessingWordRenderer.java +42 -0
- data/src/wordcram/RandomWordNudger.java +44 -0
- data/src/wordcram/RenderOptions.java +10 -0
- data/src/wordcram/ShapeBasedPlacer.java +66 -0
- data/src/wordcram/Sizers.java +54 -0
- data/src/wordcram/SketchCallbackObserver.java +70 -0
- data/src/wordcram/SpiralWordNudger.java +31 -0
- data/src/wordcram/SvgWordRenderer.java +110 -0
- data/src/wordcram/SwirlWordPlacer.java +25 -0
- data/src/wordcram/UpperLeftWordPlacer.java +27 -0
- data/src/wordcram/WaveWordPlacer.java +25 -0
- data/src/wordcram/Word.java +357 -0
- data/src/wordcram/WordAngler.java +20 -0
- data/src/wordcram/WordArray.java +18 -0
- data/src/wordcram/WordBag.java +31 -0
- data/src/wordcram/WordColorer.java +25 -0
- data/src/wordcram/WordCounter.java +96 -0
- data/src/wordcram/WordCram.java +920 -0
- data/src/wordcram/WordCramEngine.java +196 -0
- data/src/wordcram/WordFonter.java +24 -0
- data/src/wordcram/WordNudger.java +44 -0
- data/src/wordcram/WordPlacer.java +44 -0
- data/src/wordcram/WordRenderer.java +10 -0
- data/src/wordcram/WordShaper.java +78 -0
- data/src/wordcram/WordSizer.java +46 -0
- data/src/wordcram/WordSkipReason.java +42 -0
- data/src/wordcram/WordSorterAndScaler.java +31 -0
- data/src/wordcram/WordSource.java +5 -0
- data/src/wordcram/text/Html.java +15 -0
- data/src/wordcram/text/Html2Text.java +17 -0
- data/src/wordcram/text/Text.java +15 -0
- data/src/wordcram/text/TextFile.java +23 -0
- data/src/wordcram/text/TextSource.java +5 -0
- data/src/wordcram/text/WebPage.java +23 -0
- metadata +94 -5
- data/lib/cue.language.jar +0 -0
- data/lib/jsoup-1.7.2.jar +0 -0
- data/vendors/Rakefile +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 405e8f60fe4dbae1f2e01fec268f218951e038e0
|
4
|
+
data.tar.gz: '07490b56020c882ec52d2ce621467ba880d6cc5b'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efce853dee8cd3966d66b897c7bc48d119a9e87dcac80f745e89e8c9f6c43b0072e07a8ff0e5cdc042e2a1e2642305200b488470053bd34593d1593ca6a983f3
|
7
|
+
data.tar.gz: ce8eaf5968499b5928358d88a1be28f841eefa8f65a2d0c355d7239d9deb55a82873ec4848489db3a3e7ac29fd931298ff9b62828e7f1f9776ce9470538f8e73
|
data/.gitignore
CHANGED
data/.mvn/extensions.xml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip
|
data/Rakefile
CHANGED
@@ -1,11 +1,34 @@
|
|
1
|
-
|
1
|
+
require_relative 'lib/ruby_wordcram/version'
|
2
2
|
|
3
|
-
|
3
|
+
def create_manifest
|
4
|
+
title = 'Implementation-Title: WordCram for JRubyArt and propane)'
|
5
|
+
version = format('Implementation-Version: %s', WordCram::VERSION)
|
6
|
+
File.open('MANIFEST.MF', 'w') do |f|
|
7
|
+
f.puts(title)
|
8
|
+
f.puts(version)
|
9
|
+
f.puts('Class-Path: jsoup-1.10.2.jar')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
task default: [:init, :compile, :install]
|
14
|
+
|
15
|
+
desc 'Create Manifest'
|
16
|
+
task :init do
|
17
|
+
create_manifest
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'Install'
|
21
|
+
task :install do
|
22
|
+
sh 'mvn dependency:copy'
|
23
|
+
sh 'mv target/WordCram.jar lib'
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'Gem'
|
4
27
|
task :gem do
|
5
28
|
sh 'gem build ruby_wordcram.gemspec'
|
6
29
|
end
|
7
30
|
|
8
|
-
desc '
|
9
|
-
task :
|
10
|
-
sh
|
31
|
+
desc 'Compile'
|
32
|
+
task :compile do
|
33
|
+
sh 'mvn package'
|
11
34
|
end
|
@@ -47,8 +47,9 @@ end
|
|
47
47
|
### Output
|
48
48
|
|
49
49
|
<img src="{{ site.github.url }}/assets/wordcram.png" />
|
50
|
-
|
50
|
+
Follow links for more JRubyArt [examples][examples] or [propane examples][propane examples].
|
51
51
|
|
52
|
-
Usage with propane is
|
52
|
+
Usage with propane is essentially the same but with a class wrapper.
|
53
53
|
|
54
54
|
[examples]:https://github.com/ruby-processing/JRubyArt-examples/tree/master/external_library/gem/ruby_wordcram/
|
55
|
+
[propane examples]:https://github.com/ruby-processing/propane-examples/tree/master/external_library/gem/ruby_wordcram
|
@@ -0,0 +1,33 @@
|
|
1
|
+
---
|
2
|
+
layout: post
|
3
|
+
title: "Under the hood"
|
4
|
+
date: 2017-03-07 10:34:13
|
5
|
+
categories: wordcram update
|
6
|
+
---
|
7
|
+
|
8
|
+
### The required libraries
|
9
|
+
|
10
|
+
- cue.language.jar
|
11
|
+
|
12
|
+
Created by Jonathan Feinberg
|
13
|
+
|
14
|
+
cue.language is a small library of Java code and resources that provides the following basic natural-language processing capabilities:
|
15
|
+
|
16
|
+
* Tokenizing natural language text into individual words
|
17
|
+
* Tokenizing natural language text into sentences
|
18
|
+
* Tokenizing natural language text into n-grams (sequences of 2 or more words that appear next to each other in a sentence)
|
19
|
+
* Counting strings
|
20
|
+
* Detecting which script (alphabet, writing system) is required to represent a text
|
21
|
+
* Guessing what language a text is in
|
22
|
+
* Customizable "stop word" detection for a variety of languages
|
23
|
+
|
24
|
+
|
25
|
+
- WordCram.jar
|
26
|
+
|
27
|
+
Created by Dan Bernier
|
28
|
+
WordCram lets you generate word clouds in Processing. It does the heavy lifting – text analysis, collision detection – for you, so you can focus on making your word clouds as beautiful, as revealing, or as silly as you like.
|
29
|
+
|
30
|
+
|
31
|
+
- jsoup-1.7.2.jar
|
32
|
+
|
33
|
+
jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods.
|
data/lib/WordCram.jar
CHANGED
Binary file
|
Binary file
|
data/lib/ruby_wordcram.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
if RUBY_PLATFORM == 'java'
|
3
3
|
require 'WordCram.jar'
|
4
|
-
require 'jsoup-1.
|
5
|
-
require 'cue.language.jar'
|
4
|
+
require 'jsoup-1.10.2.jar'
|
6
5
|
wc = %w(WordAngler WordColorer WordCram WordFonter WordPlacer WordSkipReason)
|
7
6
|
sh = %w(Colorers ImageShaper Observer Placers Word ShapeBasedPlacer)
|
8
7
|
WC = wc.concat(sh).freeze
|
data/pom.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
project 'Wordcram' do
|
2
|
+
|
3
|
+
model_version '4.0.0'
|
4
|
+
id 'wordcram:WordCram:2.0.0'
|
5
|
+
packaging 'jar'
|
6
|
+
|
7
|
+
properties(
|
8
|
+
'source.directory' => 'src',
|
9
|
+
'wordcram.basedir' => '${project.basedir}',
|
10
|
+
'polyglot.dump.pom' => 'pom.xml',
|
11
|
+
'maven.compiler.source' => '1.8',
|
12
|
+
'project.build.sourceEncoding' => 'utf-8',
|
13
|
+
'maven.compiler.target' => '1.8'
|
14
|
+
)
|
15
|
+
|
16
|
+
overrides do
|
17
|
+
plugin( :jar,
|
18
|
+
'archive' => {
|
19
|
+
'manifestEntries' => {
|
20
|
+
'Built-By' => 'monkstone'
|
21
|
+
}
|
22
|
+
} )
|
23
|
+
end
|
24
|
+
|
25
|
+
jar 'org.processing:core:3.3.0'
|
26
|
+
jar 'org.jsoup:jsoup:1.10.2'
|
27
|
+
|
28
|
+
build do
|
29
|
+
default_goal 'package'
|
30
|
+
source_directory 'source.directory'
|
31
|
+
final_name 'WordCram'
|
32
|
+
resource do
|
33
|
+
directory 'src'
|
34
|
+
includes
|
35
|
+
excludes '**/*.java'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
overrides do
|
40
|
+
plugin :resources, '2.6'
|
41
|
+
plugin :dependency, '2.10' do
|
42
|
+
execute_goals( id: 'default-cli',
|
43
|
+
artifactItems: [ { groupId: 'org.jsoup',
|
44
|
+
artifactId: 'jsoup',
|
45
|
+
version: '1.10.2',
|
46
|
+
type: 'jar',
|
47
|
+
outputDirectory: '${wordcram.basedir}/lib'
|
48
|
+
}
|
49
|
+
]
|
50
|
+
)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/pom.xml
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!--
|
3
|
+
|
4
|
+
|
5
|
+
DO NOT MODIFIY - GENERATED CODE
|
6
|
+
|
7
|
+
|
8
|
+
-->
|
9
|
+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
10
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
11
|
+
<modelVersion>4.0.0</modelVersion>
|
12
|
+
<groupId>wordcram</groupId>
|
13
|
+
<artifactId>WordCram</artifactId>
|
14
|
+
<version>2.0.0</version>
|
15
|
+
<name>Wordcram</name>
|
16
|
+
<properties>
|
17
|
+
<source.directory>src</source.directory>
|
18
|
+
<wordcram.basedir>${project.basedir}</wordcram.basedir>
|
19
|
+
<polyglot.dump.pom>pom.xml</polyglot.dump.pom>
|
20
|
+
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
|
21
|
+
<maven.compiler.source>1.8</maven.compiler.source>
|
22
|
+
<maven.compiler.target>1.8</maven.compiler.target>
|
23
|
+
</properties>
|
24
|
+
<dependencies>
|
25
|
+
<dependency>
|
26
|
+
<groupId>org.processing</groupId>
|
27
|
+
<artifactId>core</artifactId>
|
28
|
+
<version>3.3.0</version>
|
29
|
+
</dependency>
|
30
|
+
<dependency>
|
31
|
+
<groupId>org.jsoup</groupId>
|
32
|
+
<artifactId>jsoup</artifactId>
|
33
|
+
<version>1.10.2</version>
|
34
|
+
</dependency>
|
35
|
+
</dependencies>
|
36
|
+
<build>
|
37
|
+
<sourceDirectory>source.directory</sourceDirectory>
|
38
|
+
<defaultGoal>package</defaultGoal>
|
39
|
+
<resources>
|
40
|
+
<resource>
|
41
|
+
<directory>src</directory>
|
42
|
+
<excludes>
|
43
|
+
<exclude>**/*.java</exclude>
|
44
|
+
</excludes>
|
45
|
+
</resource>
|
46
|
+
</resources>
|
47
|
+
<finalName>WordCram</finalName>
|
48
|
+
<pluginManagement>
|
49
|
+
<plugins>
|
50
|
+
<plugin>
|
51
|
+
<artifactId>maven-jar-plugin</artifactId>
|
52
|
+
<configuration>
|
53
|
+
<archive>
|
54
|
+
<manifestEntries>
|
55
|
+
<Built-By>monkstone</Built-By>
|
56
|
+
</manifestEntries>
|
57
|
+
</archive>
|
58
|
+
</configuration>
|
59
|
+
</plugin>
|
60
|
+
<plugin>
|
61
|
+
<artifactId>maven-resources-plugin</artifactId>
|
62
|
+
<version>2.6</version>
|
63
|
+
</plugin>
|
64
|
+
<plugin>
|
65
|
+
<artifactId>maven-dependency-plugin</artifactId>
|
66
|
+
<version>2.10</version>
|
67
|
+
<executions>
|
68
|
+
<execution>
|
69
|
+
<id>default-cli</id>
|
70
|
+
<configuration>
|
71
|
+
<artifactItems>
|
72
|
+
<artifactItem>
|
73
|
+
<groupId>org.jsoup</groupId>
|
74
|
+
<artifactId>jsoup</artifactId>
|
75
|
+
<version>1.10.2</version>
|
76
|
+
<type>jar</type>
|
77
|
+
<outputDirectory>${wordcram.basedir}/lib</outputDirectory>
|
78
|
+
</artifactItem>
|
79
|
+
</artifactItems>
|
80
|
+
</configuration>
|
81
|
+
</execution>
|
82
|
+
</executions>
|
83
|
+
</plugin>
|
84
|
+
</plugins>
|
85
|
+
</pluginManagement>
|
86
|
+
</build>
|
87
|
+
</project>
|
data/ruby_wordcram.gemspec
CHANGED
@@ -18,8 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.homepage = 'http://ruby-processing.github.io/WordCram/'
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
20
|
spec.files << 'lib/WordCram.jar'
|
21
|
-
spec.files << 'lib/
|
22
|
-
spec.files << 'lib/jsoup-1.7.2.jar'
|
21
|
+
spec.files << 'lib/jsoup-1.10.2.jar'
|
23
22
|
spec.require_paths = ['lib']
|
24
23
|
spec.add_development_dependency 'rake', '~> 12', '>= 12.0'
|
25
24
|
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
/*
|
2
|
+
Copyright 2009 IBM Corp
|
3
|
+
|
4
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
you may not use this file except in compliance with the License.
|
6
|
+
You may obtain a copy of the License at
|
7
|
+
|
8
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
|
10
|
+
Unless required by applicable law or agreed to in writing, software
|
11
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
See the License for the specific language governing permissions and
|
14
|
+
limitations under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
package cue.lang;
|
18
|
+
|
19
|
+
import java.util.ArrayList;
|
20
|
+
import java.util.Collections;
|
21
|
+
import java.util.Comparator;
|
22
|
+
import java.util.HashMap;
|
23
|
+
import java.util.List;
|
24
|
+
import java.util.Map;
|
25
|
+
import java.util.Map.Entry;
|
26
|
+
import java.util.Set;
|
27
|
+
|
28
|
+
/**
|
29
|
+
*
|
30
|
+
* @author Jonathan Feinberg <jdf@us.ibm.com>
|
31
|
+
* @param <T>
|
32
|
+
*
|
33
|
+
*/
|
34
|
+
public class Counter<T> {
|
35
|
+
// delegate, don't extend, to prevent unauthorized monkeying with internals
|
36
|
+
private final Map<T, Integer> items = new HashMap<T, Integer>();
|
37
|
+
private int totalItemCount = 0;
|
38
|
+
|
39
|
+
public Counter() {
|
40
|
+
this.BY_FREQ_DESC = new Comparator<Entry<T, Integer>>() {
|
41
|
+
@Override
|
42
|
+
public int compare(final Entry<T, Integer> o1,
|
43
|
+
final Entry<T, Integer> o2) {
|
44
|
+
return o2.getValue() - o1.getValue();
|
45
|
+
}
|
46
|
+
};
|
47
|
+
}
|
48
|
+
|
49
|
+
public Counter(final Iterable<T> items) {
|
50
|
+
this.BY_FREQ_DESC = new Comparator<Entry<T, Integer>>() {
|
51
|
+
@Override
|
52
|
+
public int compare(final Entry<T, Integer> o1,
|
53
|
+
final Entry<T, Integer> o2) {
|
54
|
+
return o2.getValue() - o1.getValue();
|
55
|
+
}
|
56
|
+
};
|
57
|
+
noteAll(items);
|
58
|
+
}
|
59
|
+
|
60
|
+
public final void noteAll(final Iterable<T> items) {
|
61
|
+
for (final T t : items) {
|
62
|
+
note(t, 1);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
public void note(final T item) {
|
67
|
+
note(item, 1);
|
68
|
+
}
|
69
|
+
|
70
|
+
public void note(final T item, final int count) {
|
71
|
+
final Integer existingCount = items.get(item);
|
72
|
+
if (existingCount != null) {
|
73
|
+
items.put(item, existingCount + count);
|
74
|
+
} else {
|
75
|
+
items.put(item, count);
|
76
|
+
}
|
77
|
+
totalItemCount += count;
|
78
|
+
}
|
79
|
+
|
80
|
+
public void merge(final Counter<T> c) {
|
81
|
+
for (final Entry<T, Integer> e : c.items.entrySet()) {
|
82
|
+
note(e.getKey(), e.getValue());
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
public int getTotalItemCount() {
|
87
|
+
return totalItemCount;
|
88
|
+
}
|
89
|
+
|
90
|
+
private final Comparator<Entry<T, Integer>> BY_FREQ_DESC;
|
91
|
+
|
92
|
+
/**
|
93
|
+
* @param n
|
94
|
+
* @return A list of the min(n, size()) most frequent items
|
95
|
+
*/
|
96
|
+
public List<T> getMostFrequent(final int n) {
|
97
|
+
final List<Entry<T, Integer>> all = getAllByFrequency();
|
98
|
+
final int resultSize = Math.min(n, items.size());
|
99
|
+
final List<T> result = new ArrayList<T>(resultSize);
|
100
|
+
for (final Entry<T, Integer> e : all.subList(0, resultSize)) {
|
101
|
+
result.add(e.getKey());
|
102
|
+
}
|
103
|
+
return Collections.unmodifiableList(result);
|
104
|
+
}
|
105
|
+
|
106
|
+
public List<Entry<T, Integer>> getAllByFrequency() {
|
107
|
+
final List<Entry<T, Integer>> all = new ArrayList<Entry<T, Integer>>(
|
108
|
+
items.entrySet());
|
109
|
+
Collections.sort(all, BY_FREQ_DESC);
|
110
|
+
return Collections.unmodifiableList(all);
|
111
|
+
}
|
112
|
+
|
113
|
+
public Integer getCount(final T item) {
|
114
|
+
final Integer freq = items.get(item);
|
115
|
+
if (freq == null) {
|
116
|
+
return 0;
|
117
|
+
}
|
118
|
+
return freq;
|
119
|
+
}
|
120
|
+
|
121
|
+
public void clear() {
|
122
|
+
items.clear();
|
123
|
+
}
|
124
|
+
|
125
|
+
public Set<Entry<T, Integer>> entrySet() {
|
126
|
+
return Collections.unmodifiableSet(items.entrySet());
|
127
|
+
}
|
128
|
+
|
129
|
+
public Set<T> keySet() {
|
130
|
+
return Collections.unmodifiableSet(items.keySet());
|
131
|
+
}
|
132
|
+
|
133
|
+
public List<T> keyList() {
|
134
|
+
return getMostFrequent(items.size());
|
135
|
+
}
|
136
|
+
|
137
|
+
@Override
|
138
|
+
public String toString() {
|
139
|
+
return items.toString();
|
140
|
+
}
|
141
|
+
}
|