Java Anagram Solver - PullRequest
       34

Java Anagram Solver

4 голосов
/ 24 апреля 2010

Я могу понять, как создавать анаграммы строки, но я не знаю, как сравнить их со словарем реальных слов, чтобы проверить, является ли анаграмма реальным словом. Есть ли класс в Java API, который содержит весь словарь английского языка?

Ответы [ 5 ]

5 голосов
/ 24 апреля 2010

Нет, но вы можете получить список слов из различных мест . Оттуда вы можете прочитать файл списка слов в список:

List<String> lines = new ArrayList<String>();
BufferedReader in = new BufferedReader(new FileReader("wordlist.txt"));
String line = null;
while (null!=(line=in.readLine()))
{
   lines.add(line);
}
in.close();

И наконец бинарный поиск используйте lines.contains() для вашего слова-кандидата.

2 голосов
/ 25 апреля 2010

Один метод определения того, является ли набор символов анаграммой слова, включает использование простых чисел. Присвойте каждой букве простое число, например, a = 2, b = 3, c = 5, d = 7. Теперь предварительно вычислите произведение простых чисел для каждого слова в вашем словаре. Например, «добавить» = 2 * 7 * 7 = 98 или «плохо» = 3 * 2 * 7 = 42.

Теперь определение, является ли набор букв анаграммой какого-либо слова в словаре, может быть выполнено путем вычисления значения набора букв. Например, буквы «abd» = 2 * 3 * 7 = 42 = «плохо». Просто проверьте, существует ли вычисленное значение для букв в вашем предварительно вычисленном словаре. Для любой анаграммы вам нужно сделать это вычисление только один раз, а не пытаться сгенерировать каждую возможную анаграмму. Однако обратите внимание, что этот метод будет хорошо работать только для относительно небольших слов, в противном случае вы столкнетесь с проблемами переполнения и должны будете использовать BigInteger.

1 голос
/ 24 апреля 2010

Может быть, английский словарь в jazzy может вам помочь.

1 голос
/ 24 апреля 2010

В стандартной библиотеке Java такого специализированного класса нет, но вы можете использовать любую понравившуюся реализацию интерфейса Set и инициализировать его, загрузив его словами по вашему выбору, выбранными из любого из бесчисленное количество списков слов вы можете найти во многих местах (просто внимательно проверьте, что лицензия для списка слов, который вы выбираете, совместима с вашим предполагаемым приложением, например, разрешает ли оно коммерческое использование, приложения с закрытым исходным кодом, если что вам нужно и т. д.).

1 голос
/ 24 апреля 2010

Нет, вам нужно использовать внешнюю библиотеку, такую ​​как JWNL , которая является оберткой для WordNet - машиночитаемая лексическая база данных, организованная значениями , которая содержит довольно много каждого английского слова.

...