2011-03-22 2 views
1

문자열을 기반으로 해당 문자열의 모든 단어에 대한 자동 완성을 만들 수 있습니까? 예를 들어문자열의 모든 단어에 대해 자동 완성

: STR이 = 문자열 ". 웨이브는 로봇과 가젯을 지원 흔들기 로봇 개발은 자바 1.6이 필요 파도가 웨이블릿가 들어있는 봉투로 볼 수 있습니다."사용자가에서 웨이브를 입력하면 이제

을 입력란에 "웨이브는", "웨이브 로봇"및 "웨이브 캔은"을 표시해야합니다.

간단히 말해서 입력 된 단어 외에 다음 단어가 표시되어야합니다.

+0

예 가능합니다. 너 스스로 이것을 쓰고 싶니? 이미 다른 누군가를 찾고 있습니까? 그냥지도 요? –

+0

MS SQL Server를 사용하는 경우 FullText 카탈로그 검색 옵션을 살펴보십시오. –

+0

시작하는 방법에 대한 몇 가지 지침 – dazzle

답변

0

원하는 것은 trie-like 데이터 구조입니다. 트라이는 나무와 같은 이진 트리이며 사전을 매우 빠르고 간단하게 검색합니다. 대부분의 트라이는 단어를 저장하는 데 사용되지만 두 단어가 아닌 트라이를 사용하여 작업을 완료 할 수 있습니다. 예를 들어 문장의 단어만으로 첫 번째 trie를 만들 수 있습니다. 그런 다음 문장 2 단어로 두 번째 트라이를 만듭니다. 이제 사용자의 입력을 자동 완료하기 위해 각 trie에서 조회해야합니다.

+0

예, 트라이입니다! http://en.wikipedia.org/wiki/Trie – bnieland

0

전체 단어가 데이터 소스 [데이터베이스 등]에 저장되어있을 수 있습니다. jQuery 자동 완성을 확인하거나 자동 완성 javascript 플러그인을 검색하십시오.

1

시작하기위한 몇 가지 지침.

  1. 분할 일반 for (int i = 0; i < words.Count... 루프를 사용하여 루프의 현재 항목이 주어진 입력 같을 때, 처음에 비어있는 목록에 words[i] + words[i + 1]를 추가 예를 들어 List<string> words = new List<string>(sData.Split(' '));
  2. 으로 반복 단어를 사용하여 단어의 목록에 문자열 matches이라고 부르 자. 상기 호출 JS에서 Response.Write(string.Join("|"), matches);
  3. AJAX와의 success 방법의 결과를 분석하고 각각의 가능한 일치 한줄 사용자가 선택할 수있는 빌드 :
  4. | 문자 delimeted 예를 들어, 브라우저 matches 보내기.
+0

또는 그가 jquery를 사용하고 있다면 그냥'array'로'source :'옵션에 넘겨 주면됩니다. ;) +1 –

+0

@aSeptik 감사합니다. 이것은 좋은 아이디어입니다. :) –

1

나는 이것을 jQuery Autocomplete와 함께했다.

저는 (내 데이터베이스에서) 여러 답변을 반환했습니다.

입력 된 내용을 기반으로, 반환 된 목록에 우선 순위 그룹이 있으며 목록의 해당 하위 섹션에서 알파가 정렬되었습니다.

  • 가 포함 입력 한 단어로 시작하는 문자열 - - 정확히 일치하는
  • 와 문자열로 시작 -

    • 정확히 일치는 그 목록을 반환, 단어 목록을 아래로 돌파 : 그룹이었다. 입력 설정 내에서 반환 목록에서 단어 이 반환 결과 목록에 강조했다 있도록

  • 나는 그것을했다. 내 반환 결과는 일치하는 단어를 굵게 표시하여 전체 문자열을 나열했습니다.

    "단어가 더하기"접근법을 사용하여 문자열을 단어와 일치시키고 단어 목록 각각에 대한 다음 단어를 설명대로 쉽게 사용할 수 있습니다. 이는 아마도 "시작"과 "포함"사이에 적용됩니다 "내 전략의 그룹은 당신과 다를 수 있습니다. 성능의 관점에서

    , 나는에만 설정 가능한 결과 (최대 255 자까지 각) 약 10,000 문자열을 사용하고있었습니다 만 문자열의 원래 샘플에서 말 (50 "가장 일치하는"제한된 집합을 반환했습니다.

    0

    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; 
    
        } 
    } 
    
    "나는 단어를 적용 할 수도있을 것 같군요 ... 미안 내가 그의 온 질문을 읽어 본 적이 ERR"확장 문자 조합으로

    을 나무 만들기

    지금이

    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 
    
    처럼 "우와"

    tt.getWords("wo"); 
    

    크롬 콘솔 출력 뭔가 statring 아무것도에 대한 모든 단어를

    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"); 
    

    검색을 추가 기본 트리를

    var tt = new wordTree(); 
    

    를 만들

    관련 문제