Автозаполнение для всех слов в строке - PullRequest
1 голос
/ 22 марта 2011

Можно ли на основе строки создать автозаполнение для всех слов в этой строке?

Например: String str = "Wave поддерживает роботы и гаджеты. Разработка роботов Wave требует Java 1.6. Waveможет рассматриваться как конверт с вейвлетами "

Теперь, если пользователь вводит Wave в текстовое поле ввода, в раскрывающемся списке должно отображаться:" Wave поддерживает "," Wave robot"и" wave can".

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

Ответы [ 5 ]

1 голос
/ 22 марта 2011

Я сделал это с помощью автозаполнения jQuery.

Я вернул (из своей базы данных) несколько возможных ответов.

Исходя из того, что было напечатано, у меня были группы приоритетов в возвращаемом списке, отсортированные по альфа в этом подразделе списка. Группы были:

  • Точное совпадение - строки с точным совпадением
  • Начинается с - строки, начинающиеся с введенных слов
  • Содержит - разбить список слов, затем вернуть этот список.

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

Вы можете легко использовать свой подход "слово плюс", чтобы сопоставить строки со словом, плюс следующее слово для каждого из списка слов, который вы описываете - вероятно, это будет применяться между "Begins" и "Contains". группы в моей стратегии, но ваши могут отличаться.

С точки зрения производительности, я использовал только около 10000 строк (до 255 символов каждая) в качестве возможного набора результатов и возвратил только ограниченный набор (скажем, 50 "наилучших совпадений" из исходного образца строк.

1 голос
/ 22 марта 2011

Некоторые указатели для начала работы.

  1. Разделить строку на список слов, используя, например, List<string> words = new List<string>(sData.Split(' '));
  2. Итерируйте слова, используя обычный цикл for (int i = 0; i < words.Count..., и когдатекущий элемент в цикле равен заданному входу, добавьте words[i] + words[i + 1] к списку, который изначально пуст, давайте назовем его matches.
  3. Отправить matches в браузер, например, разделенный |символ: Response.Write(string.Join("|"), matches);
  4. В вызывающем JS проанализируйте результат в методе AJAX success, и для каждого возможного построения соответствия может выбрать одну строку пользователь.
0 голосов
/ 16 апреля 2013

Создание дерева с расширяющимися буквенными комбинациями

"Извините, я никогда не читал весь его вопрос ... Полагаю, он может быть адаптирован к словам"

function wordTree(){
var WT = this;

WT.tree = {};

    WT.word = function(word){
        var current = WT.tree;
        for(var i = 0;i < word.length; i ++){
            var check = current[word[i ]];
            if(!check){ 
                current = current[word[i]] = {value: word.substr(0,i +1), words: [word]};
            }else{
                current = check;
                current.words_ahead.push(word);
            }
        }

    }
    WT.getWords = function(base){
        var current = WT.tree;
        for(var i = 0;i < base.length; i ++){
            var check = current[base[i]];
            if(check){
                current = check;
            } else {
                break;
            }
        }
        return current.words;

    }
}

Теперь создайте базовое дерево

var tt = new wordTree();

Добавьте все свои слова

tt.word("word");
tt.word("about");
tt.word("after");
tt.word("again");
tt.word("air");
tt.word("all");
tt.word("along");
tt.word("also");
tt.word("an");
tt.word("and");
tt.word("another");
tt.word("any");
tt.word("are");
tt.word("around");
tt.word("as");
tt.word("at");
tt.word("away");
tt.word("back");
tt.word("be");
tt.word("because");
tt.word("been");
tt.word("before");
tt.word("below");
tt.word("between");
tt.word("both");
tt.word("but");
tt.word("by");
tt.word("came");
tt.word("can");
tt.word("come");
tt.word("could");
tt.word("day");
tt.word("did");
tt.word("different");
tt.word("do");
tt.word("does");
tt.word("don");
tt.word("t");
tt.word("down");
tt.word("each");
tt.word("end");
tt.word("even");
tt.word("every");
tt.word("few");
tt.word("find");
tt.word("first");
tt.word("for");
tt.word("found");
tt.word("from");
tt.word("get");
tt.word("give");
tt.word("go");
tt.word("good");
tt.word("great");
tt.word("had");
tt.word("has");
tt.word("have");
tt.word("he");
tt.word("help");
tt.word("her");
tt.word("here");
tt.word("him");
tt.word("his");
tt.word("home");
tt.word("house");
tt.word("how");
tt.word("I");
tt.word("if");
tt.word("in");
tt.word("into");
tt.word("is");
tt.word("it");
tt.word("its");
tt.word("just");
tt.word("know");
tt.word("large");
tt.word("last");
tt.word("left");
tt.word("like");
tt.word("line");
tt.word("little");
tt.word("long");
tt.word("look");
tt.word("made");
tt.word("make");
tt.word("man");
tt.word("many");
tt.word("may");
tt.word("me");
tt.word("men");
tt.word("might");
tt.word("more");
tt.word("most");
tt.word("Mr");
tt.word("must");
tt.word("my");
tt.word("name");
tt.word("never");
tt.word("new");
tt.word("next");
tt.word("no");
tt.word("not");
tt.word("now");
tt.word("number");
tt.word("of");
tt.word("off");
tt.word("old");
tt.word("on");
tt.word("one");
tt.word("only");
tt.word("or");
tt.word("other");
tt.word("our");
tt.word("out");
tt.word("over");
tt.word("own");
tt.word("part");
tt.word("people");
tt.word("place");
tt.word("put");
tt.word("read");
tt.word("right");
tt.word("said");
tt.word("same");
tt.word("saw");
tt.word("say");
tt.word("see");
tt.word("she");
tt.word("should");
tt.word("show");
tt.word("small");
tt.word("so");
tt.word("some");
tt.word("something");
tt.word("sound");
tt.word("still");
tt.word("such");
tt.word("take");
tt.word("tell");
tt.word("than");
tt.word("that");
tt.word("the");
tt.word("them");
tt.word("then");
tt.word("there");
tt.word("these");
tt.word("they");
tt.word("thing");
tt.word("think");
tt.word("this");
tt.word("those");
tt.word("thought");
tt.word("three");
tt.word("through");
tt.word("time");
tt.word("to");
tt.word("together");
tt.word("too");
tt.word("two");
tt.word("under");
tt.word("up");
tt.word("us");
tt.word("use");
tt.word("very");
tt.word("want");
tt.word("water");
tt.word("way");
tt.word("we");
tt.word("well");
tt.word("went");
tt.word("were");
tt.word("what");
tt.word("when");
tt.word("where");
tt.word("which");
tt.word("while");
tt.word("who");
tt.word("why");
tt.word("will");
tt.word("with");
tt.word("word");
tt.word("work");
tt.word("world");
tt.word("would");
tt.word("write");
tt.word("year");
tt.word("you");
tt.word("your");

искать что-либо, используя "wo"

tt.getWords("wo");

Chrome консоль выводит что-то вроде этого

Object {item_value: "wo", words: Array[5], r: Object, u: Object}
    item_value: "wo"
    r: Object
    u: Object
    words_ahead: Array[5]
        0: "word"
        1: "word"
        2: "work"
        3: "world"
        4: "would"
        length: 5
__proto__: Array[0]
__proto__: Object
0 голосов
/ 22 марта 2011

Это возможно, если у вас есть целое слово, хранящееся где-то в источнике данных [база данных и т. Д.].Проверьте автозаполнение jQuery или просто найдите автозаполнение плагина javascript.

0 голосов
/ 22 марта 2011

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

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