Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нужны исходники создания TF IDF образа документа 
:(
    Опции темы
newsTester
Дата 1.4.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



основная загвоздка в том что очень не хочется самостоятельно писать нормирование текста (в смысле предобработку слов). Подойдет код на Java, Delphi, Pascle, C, C++, C#.
PM MAIL   Вверх
sergejzr
Дата 1.4.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Не знаю, насколько поможет...

Код

package util;

import java.util.Hashtable;
import java.util.Vector;

public class Analyzer {

    private class Meta {
        int curpos;

        Meta() {
            curpos = 0;
        }
    }

    private String getShortcut(final int number) {
        switch (number) {
        case 191:
        case 223: {
            return "ss";
        }
        case 220:
        case 252: {
            return "ue";
        }
        case 196:
        case 228: {
            return "ae";
        }
        case 214:
        case 246: {
            return "oe";
        }
        }

        return null;
    }

    boolean isHex(final char in) {

        return Character.isDigit(in) || ((in >= 'a') && (in <= 'f'))
                || ((in >= 'A') && (in <= 'F'));
    }

    public String[] splitXMLIntoTerms(String xmlString) {
        final Vector<String> ret = new Vector<String>();
        xmlString = xmlString.toLowerCase();
        final Meta met = this.new Meta();
        String word;
        while ((word = readWord(xmlString, met)) != null) {
            ret.add(word);
        }
        final String retstr[] = new String[ret.size()];
        ret.toArray(retstr);
        return retstr;

    }

    public Hashtable<String, Integer> splitXMLIntoRankedtable(String xmlString) {
        final Hashtable<String, Integer> result = new Hashtable<String, Integer>();
        xmlString = xmlString.toLowerCase();
        final Meta met = this.new Meta();
        String word;
        while ((word = readWord(xmlString, met)) != null) {

            Integer oldval;
            if ((oldval = result.get(word)) == null) {
                result.put(word, 1);
            } else {
                result.put(word, oldval + 1);
            }
        }
        return result;

    }

    String readWord(final String in, final Meta met) {
        int curidx = met.curpos;
        char curchar = 'd';
        final StringBuffer out = new StringBuffer();
        mainloop: for (; curidx < in.length(); curidx = met.curpos) {

            if (Character.isLetter(curchar = in.charAt(curidx))) {
                out.append(curchar);
                met.curpos++;
                continue mainloop;
            }
            if (curchar == '<') {
                for (; (met.curpos < in.length())
                        && (in.charAt(met.curpos) != '>'); met.curpos++) {
                    ;
                }
                met.curpos++;
                continue mainloop;

            }
            if (curchar == '-') {
                if ((curidx + 5 < in.length())
                        && (in.charAt(curidx + 1) == '\\')
                        && (in.charAt(curidx + 2) == 'r')
                        && (in.charAt(curidx + 3) == '\\')
                        && (in.charAt(curidx + 4) == 'n')) {
                    met.curpos += 5;
                    continue;
                }
            } else if (curchar == '\\') {
                if ((curidx + 1) < in.length()) {
                    if (in.charAt(curidx + 1) == 'u') {
                        if (((curidx + 6) < in.length())
                                && isHex(in.charAt(curidx + 2))
                                && isHex(in.charAt(curidx + 3))
                                && isHex(in.charAt(curidx + 4))
                                && isHex(in.charAt(curidx + 5))) {
                            try {
                                final int number = Integer.parseInt(in
                                        .substring(curidx + 2, curidx + 6), 16);
                                final String shortcut = getShortcut(number);

                                if (shortcut != null) {
                                    met.curpos += 6;
                                    out.append(shortcut);
                                    continue mainloop;
                                } else {
                                    met.curpos += 5;

                                }

                            } catch (final NumberFormatException e) {
                                e.printStackTrace();
                            } catch (final IndexOutOfBoundsException e) {
                                e.printStackTrace();
                            }
                        }
                    } else {
                        if ((in.charAt(curidx + 1) == 'r')
                                || (in.charAt(curidx + 1) == 'n')
                                || (in.charAt(curidx + 1) == 't')

                        ) {
                            met.curpos += 1;
                        }
                    }
                }
            }
            met.curpos += 1;
            if (out.length() < 1) {
                continue mainloop;
            }
            return out.toString();
        }
        if (out.length() > 0)
            return out.toString();

        return null;
    }

    public static void main(final String argv[]) {

        String text = "<xml><title>blabla</title><body>tramparam \r\nUniversit\u00E4t  \r\nInstitut H\u00E4ngeranschl\u00FCssen an  \r\n \r\n</body></xml>";

         Analyzer a = new Analyzer();
        String terms[] = a.splitXMLIntoTerms(text);
        for (String element : terms) {
            System.out.println(element);
        }

        Hashtable<String, Integer> rankedTable = a
                .splitXMLIntoRankedtable(text);
        for (String term : rankedTable.keySet()) {
            System.out.println(term + ":" + rankedTable.get(term));

        }

    }

}


Примеры в main. Эта штука умлауты немецкие так же в комбинации букв переделывает, у ХМЛ читает только то, что в тэгах. Учитывает переносы слов в тексте. Возвращает массив из слов, или таблицу по типы: слово:кол_во_раз. В общем, попробуй, авось подойдёт.. smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
newsTester
Дата 1.4.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



спасибо конечно, работу с тегами я наверно таки возьму  smile .
Но мне хотелось что б работа была с русским языком, и, желательно, исходник был опубликован
PM MAIL   Вверх
sergejzr
Дата 2.4.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 4
Всего: 360



Java кириллицу должна брать без проблем. Перевод умлаутов - только для нормализации. Это например как "я" переводить в "йа" (удалённо конечно) 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0454 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.