forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Как создать словарь? (http://forum.boolean.name/showthread.php?t=14896)

Dexter 15.06.2011 15:53

Как создать словарь?
 
Вложений: 1
Всем привет! Я хочу создать словарь для моб.телефона,например,эсперанто-русский:) Вопрос к профи:как реализовать это на MP?
Типа вот этого:

Reks888 15.06.2011 15:56

Ответ: Как создать словарь?
 
Скачать из интернета большой-большой словарь в txt(словари для взлома паролей подойдут) и читать оттуда слова?

Dexter 15.06.2011 16:15

Ответ: Как создать словарь?
 
Нет.Словарь для перевода с одного языка на другой.Пример я выложил)

JACUK 15.06.2011 16:28

Ответ: Как создать словарь?
 
Как вариант создать масив(заполнять из файлла) в котором одно значение слово, другое перевод. Осущеествить поиск слова и вывести соответствующее значение.

YellowAfterlife 15.06.2011 20:28

Ответ: Как создать словарь?
 
Для вашей информации, именно такая штука описана в справке MidletPascal 2 - Раздел Tutorial - Advanced Features. Последняя часть (Resources).
Если подгружать данные в память, то можно воспользоватся Lib_htable, который прилагается как пример тут. Hashtable позволяет хранить данные не по индексу, а по имени. То есть можно вносить в ключ с именем слова на одном языке слово (+описание?) на другом языке.
Если это помогает, кнопка "Полезно" находится в нижнем правом углу сообщений.

DIMMON4IK 16.06.2011 18:31

Ответ: Как создать словарь?
 
Создаешь на каждый язык 2 файла: в первом - слово, во втором - перевод. В программе загружаешь слова и их переводы в 2 массива, ищешь в 1 массиве нужное слово, выводишь перевод со второго массива по номеру элемента в первом массиве

_Nox_ 16.06.2011 19:44

Ответ: Как создать словарь?
 
Если предварительно отсортировать по первой букве,затем отсортировать по второй букве (в отрезках с одинаковой первой буквой) и т д. (на компьютере конечно), то можно применить бинарный поиск, и находить искомое слово довольно быстро

+ сразу разбить все слова на файлы по первой букве, чтобы не грузить всё и сразу а только ту часть в которой мы будем осуществлять поиск

Dexter 16.06.2011 19:54

Ответ: Как создать словарь?
 
Вложений: 1
Я в программировании совсем новичок.
Пробовал использовать исходники программы PhoneBook,но там вылетает "Необработанное исключение" Out of Memory Error...
Если вам не сложно,то выложите,пожалуйста,рабочие исходники.:SOS:

Dexter 16.06.2011 20:26

Ответ: Как создать словарь?
 
Цитата:

Сообщение от _Nox_ (Сообщение 191811)
Если предварительно отсортировать по первой букве,затем отсортировать по второй букве (в отрезках с одинаковой первой буквой) и т д. (на компьютере конечно), то можно применить бинарный поиск, и находить искомое слово довольно быстро

+ сразу разбить все слова на файлы по первой букве, чтобы не грузить всё и сразу а только ту часть в которой мы будем осуществлять поиск

Это для меня пока сложновато:( Мне пример нужен,исходники...

Dexter 24.06.2011 16:20

Ответ: Как создать словарь?
 
Код:

import java.io.*;
import java.util.Hashtable;

public class ResourcesUTF8
{

    public ResourcesUTF8(String s, String s1, String s2)
    {
        buffer = new StringBuffer();
        endFile = false;
        fileName = null;
        extenssion = "";
        load = false;
        error = false;
        extenssion = s2;
        load = false;
        name = s1;
        directory = '/' + (s != null && s.trim().length() != 0 ? s + '/' : "");
    }

    public String get(String s)
    {
        if(!load && !load())
            return "";
        String s1 = (String)hashtable.get(s);
        if(s1 == null)
            return "";
        else
            return s1;
    }

    public void unload()
    {
        hashtable = null;
        if(fileName != null)
        {
            name = null;
            extenssion = null;
            directory = null;
        }
        load = false;
        endFile = true;
        buffer = null;
    }

    public boolean load()
    {
        InputStream inputstream;
        if(error)
            return false;
        inputstream = null;
        InputStream inputstream1;
        boolean flag;
        inputstream1 = getInputStream();
        if(inputstream1 != null)
            break MISSING_BLOCK_LABEL_37;
        flag = false;
        if(inputstream != null)
            try
            {
                inputstream.close();
            }
            catch(IOException ioexception) { }
        return flag;
        boolean flag1;
        inputstream = new DataInputStream(inputstream1);
        hashtable = new Hashtable();
        endFile = false;
        buffer = new StringBuffer();
        for(String s = readKey(inputstream); s != null; s = readKey(inputstream))
        {
            String s1 = s.trim();
            if(s1.length() > 0)
            {
                String s2 = readValue(inputstream);
                if(s2 != null)
                    hashtable.put(s1, s2.trim());
            }
        }

        inputstream.close();
        load = true;
        flag1 = true;
        if(inputstream != null)
            try
            {
                inputstream.close();
            }
            catch(IOException ioexception1) { }
        try
        {
            return flag1;
        }
        catch(Exception exception)
        {
            error = true;
        }
        unload();
        flag = false;
        if(inputstream != null)
            try
            {
                inputstream.close();
            }
            catch(IOException ioexception2) { }
        return flag;
        Exception exception1;
        exception1;
        if(inputstream != null)
            try
            {
                inputstream.close();
            }
            catch(IOException ioexception3) { }
        throw exception1;
    }

    private InputStream getInputStream()
    {
        if(error)
            return null;
        if(fileName == null)
        {
            InputStream inputstream = null;
            String s = System.getProperty("microedition.locale");
            if(s != null)
            {
                s = s.replace('-', '_');
                fileName = directory + name + "_" + s + "." + extenssion;
                inputstream = getClass().getResourceAsStream(fileName);
                if(inputstream != null)
                    return inputstream;
                int i = s.indexOf('_');
                if(i != -1)
                {
                    s = s.substring(0, i);
                    fileName = directory + name + "_" + s + "." + extenssion;
                    inputstream = getClass().getResourceAsStream(fileName);
                    if(inputstream != null)
                        return inputstream;
                }
            }
            fileName = directory + name + "." + extenssion;
            inputstream = getClass().getResourceAsStream(fileName);
            if(inputstream == null)
            {
                error = true;
                unload();
                return null;
            } else
            {
                return inputstream;
            }
        } else
        {
            return getClass().getResourceAsStream(fileName);
        }
    }

    private String readKey(DataInputStream datainputstream)
        throws IOException
    {
        if(endFile)
            return null;
        buffer.setLength(0);
        int i;
        for(i = -1; (i = datainputstream.read()) > 0 && i != 10 && i != 61;)
        {
            char c = (char)i;
            buffer.append(c);
        }

        if(i == -1)
        {
            endFile = true;
            return null;
        } else
        {
            return buffer.toString();
        }
    }

    private String readValue(InputStream inputstream)
        throws IOException
    {
        if(endFile)
            return null;
        buffer.setLength(0);
        for(int i1 = 0; (i1 = inputstream.read()) > 0 && i1 != 10;)
        {
            int i = i1 & 0xff;
            switch(i >> 4)
            {
            case 0: // '\0'
            case 1: // '\001'
            case 2: // '\002'
            case 3: // '\003'
            case 4: // '\004'
            case 5: // '\005'
            case 6: // '\006'
            case 7: // '\007'
                buffer.append((char)i);
                break;

            case 12: // '\f'
            case 13: // '\r'
                int j = getByte(inputstream);
                if((j & 0xc0) != 128)
                    throw new UTFDataFormatException();
                buffer.append((char)((i & 0x1f) << 6 | j & 0x3f));
                break;

            case 14: // '\016'
                int k = getByte(inputstream);
                int l = getByte(inputstream);
                if((k & 0xc0) != 128 || (l & 0xc0) != 128)
                    throw new UTFDataFormatException();
                buffer.append((char)((i & 0xf) << 12 | (k & 0x3f) << 6 | (l & 0x3f) << 0));
                break;

            case 8: // '\b'
            case 9: // '\t'
            case 10: // '\n'
            case 11: // '\013'
            default:
                throw new UTFDataFormatException();
            }
        }

        return buffer.toString();
    }

    private int getByte(InputStream inputstream)
        throws IOException, UTFDataFormatException
    {
        int i = inputstream.read();
        if(i < 0 || i == 10)
        {
            endFile = true;
            throw new UTFDataFormatException();
        } else
        {
            return i;
        }
    }

    public static final char DELIMITER = 61;
    private Hashtable hashtable;
    private StringBuffer buffer;
    private boolean endFile;
    private String fileName;
    private String directory;
    private String extenssion;
    private String name;
    private boolean load;
    private boolean error;
}

Код:

import java.io.*;
import java.util.Hashtable;

public class ResourcesUTF8
{

    public ResourcesUTF8(String s, String s1, String s2)
    {
        buffer = new StringBuffer();
        endFile = false;
        fileName = null;
        extenssion = "";
        load = false;
        error = false;
        extenssion = s2;
        load = false;
        name = s1;
        directory = '/' + (s != null && s.trim().length() != 0 ? s + '/' : "");
    }

    public String get(String s)
    {
        if(!load && !load())
            return "";
        String s1 = (String)hashtable.get(s);
        if(s1 == null)
            return "";
        else
            return s1;
    }

    public void unload()
    {
        hashtable = null;
        if(fileName != null)
        {
            name = null;
            extenssion = null;
            directory = null;
        }
        load = false;
        endFile = true;
        buffer = null;
    }

    public boolean load()
    {
        InputStream inputstream;
        if(error)
            return false;
        inputstream = null;
        InputStream inputstream1;
        boolean flag;
        inputstream1 = getInputStream();
        if(inputstream1 != null)
            break MISSING_BLOCK_LABEL_37;
        flag = false;
        if(inputstream != null)
            try
            {
                inputstream.close();
            }
            catch(IOException ioexception) { }
        return flag;
        boolean flag1;
        inputstream = new DataInputStream(inputstream1);
        hashtable = new Hashtable();
        endFile = false;
        buffer = new StringBuffer();
        for(String s = readKey(inputstream); s != null; s = readKey(inputstream))
        {
            String s1 = s.trim();
            if(s1.length() > 0)
            {
                String s2 = readValue(inputstream);
                if(s2 != null)
                    hashtable.put(s1, s2.trim());
            }
        }

И соответсвенно,word.txt и tran.txt :-) Это Mobilelexicon.

im_zorg 24.06.2011 21:17

Ответ: Как создать словарь?
 
Оо как тут все сложно..
Program ReTranslit;
var
itemId,i,id : integer;
cmdNext : command;
cmdQuit : command;
name : string;
slovo1,slovo2:array [0..9] of string;

procedure loading;//процедура загрузки слов в словарь, это сделаешь сам я пока вручную пропишу 10ть слов
begin
i:=0;
slovo1[i]:='Привет';slovo2[i]:='Hello'; i:=i+1;
slovo1[i]:='My';slovo2[i]:='Myqw'; i:=i+1;
slovo1[i]:='Имя';slovo2[i]:='Name'; i:=i+1;
slovo1[i]:='Начало';slovo2[i]:='Begin'; i:=i+1;
slovo1[i]:='Конец';slovo2[i]:='End'; i:=i+1;
slovo1[i]:=' и т.д.';slovo2[i]:='и т.д.'; i:=i+1;
slovo1[i]:='';slovo2[i]:=''; i:=i+1;
slovo1[i]:='';slovo2[i]:=''; i:=i+1;
slovo1[i]:='';slovo2[i]:=''; i:=i+1;
slovo1[i]:='';slovo2[i]:=''; i:=0;
end;

begin
loading;
ShowForm;
itemId := FormAddTextField('Введите слово', '', 20, TF_ANY);
cmdNext := CreateCommand('ОК', CM_OK, 1);
AddCommand(cmdNext);
repeat until GetClickedCommand = cmdNext;
name := FormGetText(itemId);
for i:=0 to 9 do if slovo1[i]=name then begin id:=i; break; end;
ShowCanvas;
DrawText(slovo2[id], 0, 0);
Repaint;
cmdQuit := CreateCommand('Quit', CM_EXIT, 1);
AddCommand(cmdQuit);
repeat until GetClickedCommand = cmdQuit;
end.
Потом если захочешь добавишь авторегистр слова которое пишет пользователь, загрузку из тхт сделай сам.. я с тела этот пример писал(если что не работает простите..), так же советую добавить перевод с русского на английский и наоборот, делается это с помощью dolang:boolean додумаешься тоже сам))))

im_zorg 24.06.2011 21:19

Ответ: Как создать словарь?
 
Цитата:

__________________
Кто не был новичком,пусть тот первым бросит в меня камень!
Лови

Dexter 24.06.2011 23:52

Ответ: Как создать словарь?
 
Вложений: 1
Написал,откомпилировал(mp2.02by odd:)).
"Необработанное исключение"No Class Def Found Error
java.lang.NoClass.DefFoundError
M
Где здесь ошибка?

odd 27.06.2011 14:36

Ответ: Как создать словарь?
 
Отсутствует M.class - это самый главный класс с кодом твоего приложения. Проверь тщательно исходник почему он может не компилироваться, например одна и та же переменная объявлена дважды.

Dexter 27.06.2011 17:36

Ответ: Как создать словарь?
 
Вложений: 1
Это мой антивирь не любит M.class))) Сейчас во время компиляции отключил его и прога заработала:)


Часовой пояс GMT +4, время: 05:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot