Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример диплома ПиИТ v0.1.doc
Скачиваний:
2
Добавлен:
20.08.2019
Размер:
1.39 Mб
Скачать

Приложение 1. Класс-action ShowRubricProbability

Приложений может быть сколько угодно, но они должны что-то добавлять к работе, а не просто цитировать мегабайты исходников и xml. Обычно сюда идут особо интересные исходники, подробные описания таблиц БД, классов, справочная информация и т.п.

public class ShowRubricsProbability extends BaseAction {

public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

AdProbabilityForm adProbabilityForm = (AdProbabilityForm) form;

String adText = adProbabilityForm.getAdText();

List<Long> rubricsIds = DAOFactory.getFactory().getLearningSelectionDAO().getRubricIds();

HashMap<Long, Long> adsInRubric = DAOFactory.getFactory().getLearningSelectionDAO().countAdsInRubricGroupedByRubricId(rubricsIds);

List<String> firstForms = DAOFactory.getFactory().getBayesVocabularyDAO().getFirstForms(ClassifierUtils.splitWordsOfAd(adText));

// для инф_частей

HashMap<Long, Long> countWordInRubrics;

HashMap<Long, Double> avgWordInRubric = new HashMap<Long, Double>();

HashMap<Long, Double> rubricProbability = new HashMap<Long, Double>();

double absAvgWordInRubrics = 0;

double absAvgWordInRubric;

for (String word : firstForms) {

// для инф_частей

countWordInRubrics = DAOFactory.getFactory().getWordInRubricStatisticDAO().getCountsGroupedByRubric(word);

ClassifierUtils.addRubricWithEmptyCount(countWordInRubrics, rubricsIds);

// вычисление частоты встречаемости слова в рубрике

//для инф_частей

for (Map.Entry<Long, Long> countWordInRubricsEntry : countWordInRubrics.entrySet()) {

// если в карте "объявлений в рубрике" есть нужная рубрика

if (adsInRubric.containsKey(countWordInRubricsEntry.getKey())) {

absAvgWordInRubric = (double) countWordInRubricsEntry.getValue() / adsInRubric.get(countWordInRubricsEntry.getKey());

avgWordInRubric.put(countWordInRubricsEntry.getKey(), absAvgWordInRubric);

absAvgWordInRubrics += absAvgWordInRubric;

}

absAvgWordInRubric = 0;

}

// для инф_частей

if (absAvgWordInRubrics != 0) {

for (Map.Entry<Long, Double> avgWordInRubricEntry : avgWordInRubric.entrySet()) {

if (!rubricProbability.containsKey(avgWordInRubricEntry.getKey()))

rubricProbability.put(avgWordInRubricEntry.getKey(), (avgWordInRubricEntry.getValue() + 1) / absAvgWordInRubrics);

else {

double tmpProb = rubricProbability.get(avgWordInRubricEntry.getKey());

tmpProb *= (avgWordInRubricEntry.getValue() + 1) / absAvgWordInRubrics;

rubricProbability.put(avgWordInRubricEntry.getKey(), tmpProb);

tmpProb = 0;

}

}

}

// для инф_частей

absAvgWordInRubrics = 0;

countWordInRubrics.clear();

}

// Учет априорной вероятности выбора рубрики.

for (Long rubricId : rubricsIds) {

if (rubricProbability.containsKey(rubricId)) {

double tmpProb = rubricProbability.get(rubricId);

Long adsInOneRubric = adsInRubric.get(rubricId);

double apriorProb = (double) adsInOneRubric / adsInAllRubrics;

tmpProb *= apriorProb;

rubricProbability.put(rubricId, tmpProb);

}

}

if (rubricProbability.size() > 0)

request.setAttribute("maxProbs", ClassifierUtils.basedOnValuesSort(ClassifierUtils.getMaxsProbabilities(rubricProbability, 5)));

else

request.setAttribute("errorNoProb", 1);

return mapping.findForward("success");

}

}