2016-11-21 4 views
3

Ich habe ein Problem beim Versuch, Text an eine Rechtschreib-API zu senden.Split-Satz durch Leerzeichen durcheinander mein Index

Die API, die Korrekturen auf der Grundlage der Wörter Index zurückkehren, zum Beispiel:

Satz:

"Hallo Hoow sind youu"

So ist die API-Index die Wörter durch Zahlen so und die Korrektur basierend auf diesem Index zurück:

0  1 2 3 
hello hoow are youu 

API-Antwort, die mir sagen, welche Worte zu korrigieren:

1: how 
3: you 

Auf der Code, den ich Split mit dem Befehl Satz in Worte Array zu brechen, so ich in der Lage sein wird, die falsch geschriebene Wörter durch ihren Index zu ersetzen.

string.split(" "); 

Mein Problem ist, dass die API mehrere Leerzeichen zwischen den Wörtern in einem Raum schneiden, und indem, dass die API Wörter Index mein Index nicht überein. (Ich möchte die Räume auf die endgültige Ausgabe erhalten) mit 4 Leerzeichen zwischen den Wörtern

Beispiel des Problems Satz:

Hallo         howw youu sind?

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

Ich dachte über die Worte Array Looping und festzustellen, ob das Element Wort oder Raum ist und dann so etwas neues Array erstellen:

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? 

So kann ich leicht die falsch geschriebene Wörter ersetzen könnte und dann den Satz wieder mit Join-Befehl neu erstellen, aber das Problem, aber das Problem, dass ich nicht numerische Indizes verwenden kann (es durcheinander die Reihenfolge des Arrays)

Jede Idee, wie ich das Format halten kann ing (Leerzeichen), aber korrigieren Sie immer noch die Wörter?

Dank

+0

jemand hat Ihnen die richtige Antwort, aber er es gelöscht :)) Verwendung regex:. String.split (/ +/g) –

+0

Nö, gibt es eine Lösung belove, mit ** ** Spiel, kann ich sehen, es. – GiuServ

+0

Diese Antwort finden http://stackoverflow.com/a/40718423/1556386 – Baig

Antwort

0

Aktualisiert

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

mich korrigieren, wenn ich falsch war.

this helps :)

+0

Das Problem ist die API nicht zählen Raum als ein Wort, so dass die API-Antwort in Ihrem Beispiel wird var response = { "1": "wie ", " 3 ":" Sie " } – Shai

+0

Und ich möchte im Endergebnis, die mehrere Leerzeichen zu behalten, so ist mein Problem, den API-Response-Wortindex zu meinem Wortindex, die auch die Leerzeichen enthalten – Shai

+0

in Ordnung, Jetzt hab ich dich. Ich werde versuchen, das zu lösen. Danke. –

0

Bitte lesen Sie diese: Für String-Manipulation wie diese, würde ich empfehlen Ihnen die Verwendung Regex Im Online-regex-Editor für eine schnellere versuchen und Fehler wie hier https://regex101.com/. hier verwende ich/\ w +/g zu match jedes Wort, wenn Sie ein oder zwei Wörter ignorieren möchten, können wir /\w{2,}/g oder etwas ähnliches verwenden.

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

Korrektur

einfach erkennen, dass Sie Abstand halten müssen, wie es ist, versuchen Sie dieses: ich Ihren Ansatz verwendet, um alle -space zu ändern. Erstellen Sie ein Array für seine modifizierte Version und senden Sie es an Ihre API (ich weiß diesen Teil nicht). Holen Sie dann zurückgegebene Daten aus der API zurück und stellen Sie sie wieder auf die ursprüngliche Formatierungszeichenfolge um.

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

Das ist eine gute Lösung, aber Sie sollten erklären, was Ihre Lösungen tun. Nicht einfach einen Code schreiben. – GiuServ

+0

ok, ich werde es versuchen – RizkiDPrast

+0

Diese Lösung ist nicht mein Problem zu lösen, denn im Endergebnis möchte ich korrigieren Sie die falsch geschriebenen Wörter, sondern auch die multiplen Leerzeichen zu halten. – Shai

0

in diesem Fall haben Sie sehr einfache Lösung: 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

Ich kontrolliere nicht den API-Code, also kann ich nur den clientseitigen Code ändern. Im Endergebnis möchte ich die falsch geschriebenen Wörter korrigieren und auch die multiplen Leerzeichen behalten (ich möchte die Benutzertextformatierung behalten) – Shai

+0

überprüfe meine bearbeitete Antwort. Hoffe es hilft –

0

Try this JSFiddle , Glücklich Codierung :)

// 
 
// 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

Verwandte Themen