2011-03-22 15 views
1

基於字符串是否可以爲該字符串中的所有單詞創建自動完成功能?自動完成字符串中的所有單詞

例如:字符串str =「波支持機器人和小工具波機器人發展需要Java 1.6 A波可以被看作是其中包含的子波包絡線」。

現在,如果用戶在進入輸入文本框,在下拉框中應該顯示:「Wave supports」,「Wave robot」和「wave can」。

總之,它應該顯示除了鍵入的單詞之外的下一個單詞。

+0

是的,這是可能的。你想自己寫這個嗎?尋找其他人已經做了什麼?只是指導? – 2011-03-22 09:53:31

+0

如果您使用MS SQL Server您可以查看FullText目錄搜索選項。 – 2011-03-22 10:09:18

+0

只有一些關於如何開始的指針 – dazzle 2011-03-22 10:35:16

回答

0

你想要的是一個類似於trie的數據結構。一個特里特樹是一個樹狀二叉樹,使得在字典中搜索非常快速和簡單。最有可能的是一個trie用於存儲單詞而不是幾個字,但我想你仍然可以使用trie來完成你的任務。例如,你可以用你的句子的單詞做出第一個句號。然後你用你的句子的2個單詞做第二個句子,等等。現在您必須在每個特里查找來自動完成用戶的輸入。

+0

是的,這是特里! http://en.wikipedia.org/wiki/Trie – bnieland 2011-03-22 11:47:01

0

如果您將整個單詞存儲在某個數據源[數據庫等]中,則這是可能的。檢查jQuery自動完成或只是搜索自動完成JavaScript插件。

1

一些指針讓你開始。

  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給瀏覽器,例如由|字符delimeted:Response.Write(string.Join("|"), matches);
  4. 在主叫JS,解析結果在AJAX的success方法以及對於每個可能的匹配建立一條線,用戶可以選擇。
+0

或者如果他正在使用jquery ui只是將'array'傳遞給'source:'選項。 ;)+1 – 2011-03-22 11:45:11

+0

@aSeptik謝謝,這確實是個好主意! :) – 2011-03-22 11:54:14

1

我是用jQuery Autocomplete完成的。

我從我的數據庫中返回了多組可能的答案。

根據輸入的內容,我在返回的列表中列出了優先級組,並在該列表的該子部分中對排序的alpha進行排序。組爲:

  • 精確匹配 - 這與輸入的單詞
  • 包含開頭的字符串 - - 字符串與精確匹配
  • 與開始打破了名單的話,然後返回該列表。

我把它使內進入設置在返回列表中的話返回結果列表中突出顯示。我的返回結果用匹配列出整個字符串,在匹配的單詞上用粗體顯示。

您可以很容易地使用您的「單詞加」方法來匹配字符串與單詞,再加上單詞列表中的每個單詞的下一個單詞,如您所描述的 - 可能這將應用於「開始」和「包含「我的戰略中的團隊可能會有所不同。

從性能的角度來看,我只使用約10,000字符串(每個最多255個字符)作爲一個可能的結果集,並只從字符串的原始樣品返回的一組有限的(比方說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; 

    } 
} 

現在創建基地樹

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

搜索任何與 「沃」

tt.getWords("wo"); 

鉻控制檯輸出這樣的事情

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 
statring
相關問題