подсчитать количество различных слов

Я пытаюсь подсчитать количество отдельных слов в тексте, используя Java.

Слово может быть униграммным, биграммным или триграммным существительным. Эти трое уже обнаружены с помощью тэггера Stanford POS, но я не могу подсчитайте слова, частота которых больше, чем равна одному, двум, трем, четырем и пяти, и их количество.


person mahi    schedule 23.06.2011    source источник
comment
Общий алгоритм можно найти здесь: Подсчет слов в Java. Это домашнее задание?   -  person Atreys    schedule 23.06.2011
comment
На мой взгляд, этот вопрос, возможно, необходимо переписать и значительно расширить, потому что кажется, что вы не запрашиваете программный способ установления количества слов в обычном смысле. Например: Коллекционные зеленые Тачки - это не 3 слова, а одно в этом смысле? Т.е. эти три слова относятся к одному, к тем машинам, которые коллекционные и зеленые одновременно?   -  person J. Martin    schedule 28.04.2012


Ответы (3)


Возможно, я неправильно понимаю, но если все, что вам нужно сделать, это подсчитать количество отдельных слов в данном тексте в зависимости от того, где и как вы получаете слова, которые вам нужно подсчитать из текста, вы можете использовать Java.Util.Scanner, а затем добавьте слова в ArrayList, и если слово уже существует в списке, не добавляйте его, и тогда размер списка будет равен количеству уникальных слов, что-то вроде примера ниже:

public ArrayList<String> makeWordList(){
    Scanner scan = new Scanner(yourTextFileOrOtherTypeOfInput);
    ArrayList<String> listOfWords = new ArrayList<String>();

       String word = scan.next(); //scanner automatically uses " " as a delimeter
       if(!listOfWords.contains(word)){ //add the word if it isn't added already
            listOfWords.add(word);
    }

    return listOfWords; //return the list you made of distinct words
}

public int getDistinctWordCount(ArrayList<String> list){
    return list.size();
}

теперь, если вам действительно нужно сначала подсчитать количество символов в слове, прежде чем добавить его в список, вам просто нужно будет добавить некоторые операторы, чтобы проверить длину строки слова, прежде чем добавлять ее в список. Например:

if(word.length() <= someNumber){
//do whatever you need to
}

Извините, если я не понимаю вопроса и просто дал какой-то дерьмовый несвязанный ответ = P, но я надеюсь, что это каким-то образом поможет!

если вам нужно отслеживать, как часто вы видите одно и то же слово, даже если вы хотите подсчитать его только один раз, вы можете создать переменную, которая отслеживает эту частоту, и поместить ее в список, чтобы индекс частоты считался совпадает с индексом в ArrayList, поэтому вы знаете, какому слову соответствует частота или даже лучше, используйте HashMap, где ключ — это отдельное слово, а значение — его частота (в основном используйте тот же код, что и выше, но вместо ArrayList используйте HashMap и добавьте некоторую переменную для подсчета частоты:

 public HashMap<String, Integer> makeWordList(){
        Scanner scan = new Scanner(yourTextFileOrOtherTypeOfInput);
        HashMap<String, Integer> listOfWords = new HashMap<String, Integer>();
        Scanner scan = new Scanner(sc);
        while(cs.hasNext())
       {
            String word = scan.next(); //scanner automatically uses " " as a delimeter
            int countWord = 0;
            if(!listOfWords.containsKey(word))
            {                             //add word if it isn't added already
                listOfWords.put(word, 1); //first occurance of this word
            }
            else
            {
                countWord = listOfWords.get(word) + 1; //get current count and increment
                //now put the new value back in the HashMap
                listOfWords.remove(word); //first remove it (can't have duplicate keys)
                listOfWords.put(word, countWord); //now put it back with new value
            }
       }
        return listOfWrods; //return the HashMap you made of distinct words
    }

public int getDistinctWordCount(HashMap<String, Integer> list){
       return list.size();
}

//get the frequency of the given word
public int getFrequencyForWord(String word, HashMap<String, Integer> list){
    return list.get(word);
}
person Wolfcow    schedule 23.06.2011
comment
Что такое переменная sc и cs?? - person Jonathan Laliberte; 21.02.2017
comment
это было давно, так как я даже смотрел на это. Я думаю, что sc просто должен был представлять другой ввод, может быть другой файл или командную строку и т. д., а затем cs, я действительно не уверен, откуда это взялось, вероятно, должно быть написано scan.hasNext() - извините за путаницу. может быть просто ошибка ввода тоже. ржу не могу - person Wolfcow; 19.07.2017


Решений этой проблемы может быть много, но мне помогла одна шляпа, которая была такой простой, как показано ниже:

public static int countDistinctWords(String str){
        Set<String> noOWoInString = new HashSet<String>();
        String[] words = str.split(" ");
        //noOWoInString.addAll(words);
    for(String wrd:words){
        noOWoInString.add(wrd);
    }
    return noOWoInString.size();
}

Спасибо, Сагар

person Sagar    schedule 28.04.2012