Перечислите все слова в словаре, которые начинаются с <user input> - PullRequest
7 голосов
/ 22 сентября 2008

Как можно создать программу, в которой пользователь вводит строку, а программа генерирует список слов, начинающихся с этой строки?

Пример:
Пользователь: "abd"
Программа: отречься от престола, живот, похитить ...

Спасибо!


Edit: я использую python, но я предполагаю, что это довольно независимая от языка проблема.

Ответы [ 16 ]

1 голос
/ 22 сентября 2008

Попробуйте использовать регулярные выражения для поиска в вашем списке слов, например, / ^ слово / и сообщить обо всех совпадениях.

1 голос
/ 22 сентября 2008
var words = from word in dictionary
            where word.key.StartsWith("bla-bla-bla");
            select word;
0 голосов
/ 20 декабря 2018

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

df = pd.read_csv('dictionary.csv')
matching_words = df[0].loc[df[0].str.startswith(user_entry)] 
0 голосов
/ 20 ноября 2008

Линейное сканирование медленное, но дерево префиксов, вероятно, излишне. Сохранение отсортированных слов и использование бинарного поиска - это быстрый и простой компромисс.

import bisect
words = sorted(map(str.strip, open('/usr/share/dict/words')))
def lookup(prefix):
    return words[bisect.bisect_left(words, prefix):bisect.bisect_right(words, prefix+'~')]

>>> lookup('abdicat')
['abdicate', 'abdication', 'abdicative', 'abdicator']
0 голосов
/ 22 сентября 2008

Не используйте базуку, чтобы убить муху. Используйте что-то простое, как SQLite. Для всех современных языков есть все инструменты, которые вам нужны, и вы можете просто:

"SELECT word FROM dict WHERE word LIKE "user_entry%"

Молниеносно, и ребенок мог это сделать. Более того, он портативен, надежен и прост в обслуживании.

Python Tuto:

http://www.initd.org/pub/software/pysqlite/doc/usage-guide.html

0 голосов
/ 22 сентября 2008

Если ваш словарь действительно большой, я бы предложил индексацию с помощью текстового индекса python (PyLucene - обратите внимание, что я никогда не использовал расширение python для lucene) Поиск будет эффективным, и вы даже можете вернуть результат поиска .

Кроме того, если ваш словарь относительно статичен, у вас даже не будет лишних затрат на повторную индексацию очень часто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...