2016-04-04 6 views
1

Ich suche eine große externe Datei von N-Gramm (ca. 1 Million Zeilen) für Instanzen einer bestimmten Zeichenfolge und möchte in der Lage sein, die gesamte Zeile aus der Datei zurückzugeben, in der diese Zeichenfolge angezeigt wird. Ich frage mich, ob und wie das möglich sein könnte. Hier ist mein Code im Moment:Verwenden Sie Node.js 'fs.readFile(), um die Zeile zurückzugeben, in der eine Zeichenfolge angezeigt wird

composeLines = function(importantWords, cb) { 
    var word = importantWords.shift(); 

    fs.readFile("./w5_.txt", function(err, cont) { 
     if (err) throw err; 
     console.log("String"+(cont.indexOf(word)>-1 ? " " : " not ")+"found"); 

     cb(importantWords); 
    }); 

    }; 

Mit diesem Code ich in der Lage bin, um zu bestimmen, ob die Datei w5_.txt eine Zeichenfolge enthält, die groß ist, aber ich brauche die n-Gramm in der Lage sein, es zu betrifft zu bekommen. Z.B. Suche nach "Design" würde das N-Gramm "einen Teil des Designs" aus der Datei zurückgeben.

Jede Hilfe mit diesem würde sehr geschätzt werden.

Antwort

2

Eine Möglichkeit ist, einen regulären Ausdruck zu verwenden:

// Make sure `word` is properly escaped first 

// 'm' allows '^' and '$' to match line boundaries or 
// start and beginning of the input (respectively) 
var re = new RegExp('^.*' + word + '.*$', 'm'); 
var m = re.exec(cont); 
if (m) 
    console.log('Word %j found on line: %j', word, m[0]); 
else 
    console.log('Word %j not found', word); 
+0

Vielen Dank, das perfekt funktioniert in meinem Fall! – papahummle

0

Da es Millionen von Zeilen sind Sie Zeile für Zeile wie das irgendwie sollte lauten:

var word = importantWords.shift(); 

var matchCount = 0; 
var lineCount = 0; 

var lineReader = require('readline').createInterface({ 
    input: require('fs').createReadStream('file.in') 
}); 

lineReader.on('line', function (line) { 
    lineCount++; 
    if(-1 < line.indexOf(word)){ 
    console.log(line); 
    matchCount++; 
    } 
});