Привет, поскольку он в настоящее время использует обработку и обучение Java, мой код по существу работает через ArrayList и находит слово, которое больше всего встречается и выводит его на консоль, мой код ниже:
import java.util.Arrays;
ArrayList<String> words = new ArrayList();
int[] occurrence = new int[2000];
void setup() {
size(800,480);
smooth();
String[] data = loadStrings("data/data.txt");
Arrays.sort(data);
for (int i = 0; i < data.length; i ++ ) {
words.add(data[i]);
words.add(data[j]); //Put each word into the words ArrayList
}
for(int i =0; i<data.length; i++) {
occurrence[i] =0;
for(int j=i+1; j<data.length; j++) {
if(data[i].equals(data[j])) {
occurrence[i] = occurrence[i]+1;
}
}
}
int max = 0;
String most_talked ="";
for(int i =0;i<data.length;i++) {
if(occurrence[i]>max) {
max = occurrence[i];
most_talked = data[i];
}
}
println("The most talked keyword is " + most_talked + " occuring " + max + " times.");
Мне интересно, как я собираюсь изменить его, чтобы добавить второе наиболее распространенное слово и т.д. И т.д.
Я изучил использование карты, а также collection.sort, но не могу понять, как двигаться дальше. Я новичок в java, поэтому все было бы полезно.
Кажется, что Multisets из библиотеки Guava были бы идеальны для этой работы. Вы можете сохранить все слова, которые вы прочитали, в Multiset
и когда вы хотите получить вхождения (количество), вы можете просто перебрать копию, возвращенную Multisets.copyHighestCountFirst(myMultiset)
:
import com.google.common.collect.*;
...
// data contains the words from the text file
Multiset<String> myMultiset = ImmutableMultiset.copyOf(data);
for (String word : Multisets.copyHighestCountFirst(myMultiset).elementSet()) {
System.out.println(word + ": " + myMultiset.count(word));
}
Это должно сделать это.
Первое, что приходит мне на ум, состоит в том, чтобы сохранить используемые слова в вспомогательном массиве, а затем для каждого содержащегося слова, найти его в этом списке.
Если это соответствует увеличению счетчика для этого слова (если их слишком много, вы также можете добавить int [] для хранения вхождений), а затем просто отобразить его (каждый aux [index] с помощью Occurrence [index]).
Example: (Only a scheme)
If the list is:
Tom Tom Dog fish
Then:
Aux[0] = Tom;
Aux[1] = Dog;
Aux[3] = fish;
и вхождения для каждого находятся в "int list": для Tom index = 0, dog = 1 и fish = 3.
Надеюсь, это поможет вам!