2016-11-21 71 views
3

我在嘗試將文本發送到某些拼寫API時遇到了一些問題。將空格分割爲空格混淆了我的索引

的API返回基於關鍵詞索引的修正,例如:

一句:

「你好hoow是youu」

所以API指數的話用數字然後根據該索引返回更正:

0  1 2 3 
hello hoow are youu 

API響應,告訴我糾正哪些詞:

1: how 
3: you 

使用split命令打破一句成單詞數組所以我將能夠通過他們的指數,以取代拼錯的單詞我的代碼。

string.split(" "); 

我的問題是,API修剪字與字之間的多個空格成一個空格,這樣做的話API指數不符合我的索引。 (我想保留對最終輸出的空格)問題的

例,句子與詞之間的4個空格:

你好        howw是youu?

 0 1 2 3 4 5 6 7 
    hello   hoow are youu 

我想過循環的話陣列並確定元素是字或空格,然後創造一些新的數組這樣的:

indexed_words[0] = hello 
indexed_words[0_1] = space 
indexed_words[0_2] = space 
indexed_words[0_3] = space 
indexed_words[0_4] = space 
indexed_words[0_5] = space 
indexed_words[0_6] = space 
indexed_words[0_7] = space 
indexed_words[1] = how 
indexed_words[2] = are 
indexed_words[3] = you? 

這樣,我可以很容易地替換拼寫錯誤的單詞而不是使用連接命令重建句子,但問題,但我不能使用非數字索引(它混合了數組的順序)的問題

任何想法如何保持格式化(空格),但仍然糾正的話?

感謝

+0

有人給你正確的答案,但他刪除了:)) 使用正則表達式:!string.split(/ +/G) –

+0

沒了,有一個解決方案belove,使用** **的比賽,我可以看到它。 – GiuServ

+0

查看該答案http://stackoverflow.com/a/40718423/1556386 – Baig

回答

0

更新

var str = "Hello  howw are youu?"; 
 

 
var words = str.split(" "); 
 

 
// Getting an array without spaces/empty values 
 
// send it to your API call 
 
var requestArray = words.filter(function(word){ 
 
    if (word) { 
 
     return word; 
 
    } 
 
}); 
 

 

 
console.log("\nAPI Response that tell me which words to correct:"); 
 
console.log("6: how\n8: you"); 
 

 
var response = { 
 
    "1": "how", 
 
    "3": "you" 
 
} 
 

 
//As you have corrected words index, Replace those words in your "requestArray" 
 
for (var key in response) { 
 
    requestArray[key] = response[key]; 
 
} 
 

 
//now we have array of non-empty & correct spelled words. we need to put back empty (space's) value back in between this array 
 
var count = 0; 
 
words.forEach(function(word, index){ 
 
    if (word) { 
 
     words[index] = requestArray[count]; 
 
     count++; 
 
    } 
 
}) 
 

 
console.log(words);

糾正我,如果我錯了。

希望這有助於:)

+0

問題是API不計算空間作爲一個單詞,所以在你的例子中的API響應將是var response = { 「1」:「how 「, 」3「:」you「 } – Shai

+0

我希望在最終結果中保留多個空格,所以我的問題是將API響應詞索引與包含空格的詞索引相匹配 – Shai

+0

好吧,現在我找到了你。我會盡力解決這個問題。謝謝。 –

0

請仔細閱讀這一個: 字符串處理這個樣子,我會強烈建議您使用Regex 更快的嘗試和錯誤,如在這裏使用https://regex101.com/在線正則表達式編輯器。 這裏我使用/ \ w +/g到match每個單詞如果你想忽略1或2個單詞我們可以用/\w{2,}/g或類似的東西。

var str = "Hello  howw are youu?"; 
 
var re = /\w+/g 
 
var words = str.match(re); 
 
console.log("Returning valus") 
 
words.forEach(function(word, index) { 
 
    console.log(index + " -> " + word); 
 
})

修正

只要知道你需要保持距離,因爲它是,請試試這個: 我用你的方法來改變所有space。爲其修改後的版本創建數組然後發送到您的API(我不知道那部分)。然後從API獲取返回的數據,將其重新恢復爲原始格式化字符串。

var ori = `asdkhaskd asdkjaskdjaksjd  askdjaksdjalsd a ksjdhaksjdhasd asdjkhaskdas`; 
 

 
function replaceMeArr(str, match, replace) { 
 
    var s = str, 
 
    reg = match || /\s/g, 
 
    rep = replace || ` space `; 
 
    return s.replace(reg, rep).split(/\s/g); 
 
} 
 

 
function replaceMeStr(arr, match, replace) { 
 
    var a = arr.join(" "), 
 
    reg = match || /\sspace\s/g, 
 
    rep = replace || " "; 
 
    return a.replace(reg, rep); 
 
} 
 

 
console.log(`ori1: ${ori}`); 
 
//can use it like this 
 
var modified = replaceMeArr(ori); 
 
console.log(`modi: ${modified.join(' ')}`); 
 

 
//put it back 
 
var original = replaceMeStr(modified); 
 
console.log(`ori2: ${original}`);

+0

這是一個很好的解決方案,但您應該解釋您的解決方案的功能。不要簡單地寫下一些代碼。 – GiuServ

+0

好的,我會試試 – RizkiDPrast

+0

該解決方案並不能解決我的問題,因爲在最終結果中,我想更正拼寫錯誤的單詞,但也要保留多個空格。 – Shai

0
在這種情況下

你有非常簡單的解決方案:L

$(document).ready(function(){ 
     var OriginalSentence="howw  are you?" 
     var ModifiedSentence=""; 
     var splitstring=OriginalSentence.split(' ') 
     $.each(splitstring,function(i,v){ 

      if(v!="") 
      { 
       //pass this word to your api and appedn it to sentance 
       ModifiedSentence+=APIRETURNVALUE//api return corrected value; 


       } 
      else{ 

         ModifiedSentence+=v; 
       } 

     }); 
     alert(ModifiedSentence); 


    }); 
+0

我不控制API代碼,所以我只能修改客戶端代碼。在最終結果中,我想更正拼寫錯誤的單詞並保留多個空格(我想保留用戶文本格式) – Shai

+0

檢查我編輯過的答案。 –

0

​​的jsfiddle ,快樂編碼:)

// 
 
// ReplaceMisspelledWords 
 
// 
 
// Created by Hilal Baig on 21/11/16. 
 
// Copyright © 2016 Baigapps. All rights reserved. 
 
// 
 

 
var preservedArray = new Array(); 
 
var splitArray = new Array(); 
 

 
/*Word Object to preserve my misspeled words indexes*/ 
 
function preservedObject(pIndex, nIndex, title) { 
 
    this.originalIndex = pIndex; 
 
    this.apiIndex = nIndex; 
 
    this.title = title; 
 
} 
 

 
/*Preserving misspeled words indexes in preservedArray*/ 
 
function savePreserveIndexes(str) { 
 
    splitArray = str.split(" "); 
 
    //console.log(splitArray); 
 
    var x = 0; 
 
    for (var i = 0; i < splitArray.length; i++) { 
 
    if (splitArray[i].length > 0) { 
 
     var word = new preservedObject(i, x, splitArray[i]); 
 
     preservedArray.push(word); 
 
     x++; 
 
    } 
 
    } 
 
}; 
 

 

 
function replaceMisspelled(resp) { 
 
    for (var key in resp) { 
 

 
    for (var i = 0; i < preservedArray.length; i++) { 
 
     wObj = preservedArray[i]; 
 
     if (wObj.apiIndex == key) { 
 
     wObj.title = resp[key]; 
 

 
     splitArray[wObj.originalIndex] = resp[key]; 
 

 
     } 
 
    } 
 
    } 
 

 
    //console.log(preservedArray); 
 
    return correctedSentence = splitArray.join(" "); 
 
} 
 

 
/*Your input string to be corrected*/ 
 
str = "Hello  howw are youu"; 
 
console.log(str); 
 
savePreserveIndexes(str); 
 
/*API Response in json of corrected words*/ 
 
var apiResponse = '{"1":"how","3":"you" }'; 
 
resp = JSON.parse(apiResponse); 
 

 
//console.log(resp); 
 
/*Replace misspelled words by corrected*/ 
 
console.log(replaceMisspelled(resp)); //Your solution