подсчитать количество разных слов - PullRequest
2 голосов
/ 23 июня 2011

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

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

Ответы [ 3 ]

4 голосов
/ 23 июня 2011

Возможно, я не правильно понимаю, но если все, что вам нужно сделать, это подсчитать количество отдельных слов в данном тексте в зависимости от того, где / как вы получаете слова, которые вам нужно считать из текста, вы можете использовать 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);
}
2 голосов
/ 23 июня 2011

Вы можете использовать Multiset

  • разбить строку на пробел
  • создать новый мультисеть из результата

Что-то вроде

String[] words = string.split(" ");
Multiset<String> wordCounts = HashMultiset.create(Arrays.asList(words));
1 голос
/ 28 апреля 2012

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

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();
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...