Подсчет ассоциаций слов - PullRequest
0 голосов
/ 19 декабря 2010

Я новичок в Java.Мне нужно посчитать ассоциации слов друг с другом в предложении.Например, для предложения «Собака - это собака, а кошка - это кошка», итоговый счет ассоциации будет следующим: Первая строка: Dog-Dog (0), Dog-is (2), Dog-a (2)Dog-and (1), Dog-Cat (2)

и т. Д.

Это своего рода разработка матрицы ассоциации.Любое предложение о том, как это может быть разработано?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2010

Спасибо, Роман. Я могу отделить слова от предложений-

String sentence=null;
    String target="Dog is a Dog and Cat is a Cat";
    int index = 0;
    Locale currentLocale = new Locale ("en","US");
    BreakIterator wordIterator = BreakIterator.getWordInstance(currentLocale);
    //Creating the sentence iterator
    BreakIterator bi = BreakIterator.getSentenceInstance();
    bi.setText(target);

    while (bi.next() != BreakIterator.DONE) {

        sentence = target.substring(index, bi.current());
        System.out.println(sentence);
        wordIterator.setText(sentence);
        int start = wordIterator.first();
        int end = wordIterator.next();

        while (end!=BreakIterator.DONE){

            String word = sentence.substring(start,end);
             if (Character.isLetterOrDigit(word.charAt(0))) {

                System.out.println(word);

             }//if (Character.isLetterOrDigit(word.charAt(0)))

             start = end;
             end = wordIterator.next();
        }//while (end!=BreakIterator.DONE)
        index = bi.current();
    }  //  while (bi.next() != BreakIterator.DONE)

Но не получили ваши остальные два очка. Спасибо.

0 голосов
/ 19 декабря 2010
  1. Разделить предложение на отдельные слова.
  2. Создать пары.
  3. Объединить одинаковые пары.

Это так же просто, как:

String[] words = sentence.split("\\s"); //first step
List<List<String>> pairs = 
    new ArrayList<List<String>>((int)(((words.length) / 2.0) * (words.length - 1)));
for (int i = 0; i < words.length - 1; i++) {
    for (int j = i + 1; j < words.length; j++) {
         List<String> pair = Arrays.asList(words[i], words[j]);
         Collections.sort(pair);
         pairs.add(pair);
    }
} //second step
Map<List<String>, Integer> pair2count = new LinkedHashMap<List<String>, Integer>();
for (List<String> pair : pairs) {
    if (pair2count.containsKey(pair)) {
        pair2count.put(pair, pair2count.get(pair) + 1);
    } else {
        pair2count.put(pair, 1);
    }
} //third step

//output
System.out.println(pair2count);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...