Java игра в слова - PullRequest
       19

Java игра в слова

0 голосов
/ 29 августа 2010

Я кодирую маленькое приложение, более или менее похожее на игру в слова. Существует требование для проверки слова, которое пользователь может создать, чтобы проверить, является ли оно правильным английским словом или нет. Я подумал о некоторых способах реализации этого - 1) Иметь хэш-карту с каждым английским словом в качестве ключа и логическим значением в качестве значения. таким образом, я мог искать ключ во время проверки пользователя и так далее. 2) Отправьте HTTP-запрос на какой-либо сайт, например dictionary.com, чтобы проверить, существует слово или нет.

Хотя HTTP-запрос кажется мне хорошим способом реализовать это, я хотел иметь хэш-карту, которая сначала заполняется, а затем периодически обновляется из источника, например dictionary.com, чтобы я мог избежать задержки, участвующие в реализации HTTP-запроса.

Буду очень признателен за любые указания о том, как я могу заполнить хэш-карту словами из источника.

Спасибо P1nG

Ответы [ 5 ]

1 голос
/ 29 августа 2010

Вы можете использовать веб-сервисы и Большой Огромный Тезаурус.Это веб-службы REST, поэтому вам могут потребоваться такие инструменты, как Jersey или RestEasy.

Альтернативой может быть Oanaware и его веб-служба SOAP.


Ресурсы:

По той же теме:

0 голосов
/ 29 августа 2010

1) Иметь хэш-карту с каждым английским словом в качестве ключа и логическим значением в качестве значения.таким образом, я мог бы искать ключ во время проверки пользователя и т. д.

A HashMap является избыточным для этой задачи.Вам просто нужно знать, существует ли слово, чтобы вы могли использовать HashSet.После добавления всех слов в HashSet вы должны использовать метод contains(), чтобы проверить, существует ли слово в HashSet или нет.Но вы должны знать, что это подход с учетом регистра, поэтому вам нужно убедиться, что все ваши слова имеют одинаковый регистр (например, «hello» не будет соответствовать «Hello»).

Кроме того, я не знаю, насколько интенсивной будет загрузка всего английского словаря в память.Если вы столкнулись с проблемами, лучшим подходом может быть сканирование файла словаря каждый раз, когда вам нужно проверить, существует ли слово.

2) Отправьте HTTP-запрос на какой-либо сайт, например dictionary.comпроверьте, существует ли это слово.

Это также сработает, но оно зависит от (1) компьютера, имеющего активное подключение к Интернету и (2) работающего веб-сайта dictionary.com.

0 голосов
/ 29 августа 2010

Как насчет загрузки списка слов. Вы можете использовать WordNet http://wordnet.princeton.edu/wordnet/ список из 155 287 слов с синонимами и многое другое.

Или поищите что-то вроде "списка английских слов" с множеством соответствующих ссылок на первой странице.

0 голосов
/ 29 августа 2010

Если вы хотите проверить, существует ли слово в словаре, почему бы не использовать HashSet? Вы можете использовать текстовый файл словаря со словом в каждой строке, или, по крайней мере, это то, что я делал в прошлом.

Не уверен насчет обновления, но если dictionary.com предоставляет файл со списками слов, вы можете просто скачать его, затем открыть файл и добавить каждую запись в вашу хэш-карту / набор. Предполагая, что слова не будут удалены, существующие записи будут просто перезаписаны.

Редактировать: только что написал тестовую прогу, которая должна демонстрировать коллизии, не будет проблемой с хэш-картой или хэш-набором при проверке вашего слова.

import java.util.HashSet;

public class CollidingHash {
    String value;
    public CollidingHash(String s){
        value=s;
    }
    @Override 
    public int hashCode(){
        return 1;
    }
    @Override 
    public boolean equals(Object o){
        if(! (o instanceof CollidingHash)){
            return false;
        }
        CollidingHash c2 = (CollidingHash)o;
        return value.equals(c2.value);
    }
    public static void main(String[] args) {
        HashSet<CollidingHash> dict = new HashSet<CollidingHash>();
        CollidingHash a = new CollidingHash("This");
        CollidingHash b = new CollidingHash("That");
        dict.add(a);
        System.out.println("Is "+ (dict.contains(b)? "Bad": "OK"));
    }   
}

Edit2: добавлен метод equals, как упомянуто Pace.

0 голосов
/ 29 августа 2010

Я не думаю, что проверки хеша слова будет достаточно. Два слова могут иметь одинаковый хэш. Более того, случайная последовательность букв может иметь такое же значение хеша, что и правильное слово. Принимая во внимание эти два момента, я не думаю, что вы сможете избежать проверки своего слова (поиск его в словаре).

Я не уверен, что будет лучшим способом пополнить ваш словарь. Попробуйте найти бесплатное программное обеспечение словаря и проверить, что их лицензия говорит о данных, которые они используют. Я думаю, что было бы проще купить что-то вроде это .

Если это не вариант, я думаю, что онлайн-обработка - неплохой вариант.

...