Если я правильно понимаю, у вас, похоже, есть две части вашей проблемы здесь.
Сначала вам нужно взять все слова, попробовать все возможные сочетания букв в каждом слове и составить из него новый список слов.
Во-вторых, вам нужно попробовать все возможные способы создания допустимых фраз из нового списка слов.
Первая проблема вполне выполнима. Я думаю, что даже делать это без какой-либо оптимизации все еще хорошо, хотя для его вычисления может потребоваться некоторое время (имейте в виду, что даже просто 7-буквенное слово, например, будет иметь ~ 5000 возможных перестановок, хотя, безусловно, подавляющее большинство из них не приводить к действительным словам). Вам потребуется доступ к копии словаря (только слова, а не определения), и вы, вероятно, захотите сохранить его в дереве или, по крайней мере, в хэш-наборе для быстрого доступа, поскольку вам нужно быстро проверять каждую перестановку, если это верное слово.
Вторая проблема заключается в том, что ИМО на самом деле не прогулка в парке. Я думаю, вы получите довольно большой список слов. Тогда:
- Вам необходимо проверить возможные способы упорядочения этих слов, чтобы составить правильную фразу. Это не простая проблема. Даже для относительно короткой фразы будет много возможных структур фраз (я имею в виду расположение возможных синтаксических функций).
- для каждого из этих аранжировок (думайте о них как о способах расстановки ящиков), будет много способов вставить ваши слова в них. (например, у каждого существительного может быть предмет). Также непросто выяснить, какую функцию может выполнять каждое слово, вам понадобится некоторая библиотека синтаксического анализа на естественном языке, чтобы помочь вам понять это.
- Наконец, вы получите МНОЖЕСТВО возможных фраз, большинство из которых не будет иметь никакого смысла. Как проверить, имеют ли они смысл? Это совсем не тривиально :) И если вы не можете сделать это и должны вручную пройтись по всем из них, я думаю, что это довольно много работы.
Я думаю, что, возможно, был бы какой-то способ «обмануть» эти сложные проблемы, выяснив семантическую и, возможно, даже сгенерировав фразы, и просто воспользуйтесь поиском Google, чтобы помочь вам разобраться с фразами. Например, используйте функцию автозаполнения и автокоррекции, чтобы определить, правильна ли ваша фраза. Я мог видеть некоторые подходы, идущие таким образом ..
В целом, я думаю, что у вас есть проблема, которая возрастает в геометрической прогрессии (все возможные комбинации букв -> все возможные комбинации результирующих слов) и требует довольно небольшой интеллектуальной фильтрации, чтобы исключить все недействительные записи и сохранить ее от становится слишком большим. Это определенно то, что можно сделать, но это требует немало работы.
Мне любопытно услышать другие мысли по этому поводу :)