从句子中删除停用词

Remove stop words from sentence

我有一个句子,但是这个句子被拆分为每个 space。

我的数据输出是这样的

const escapeRE = new RegExp(/([/\?""])/g);
const myDatas = data.map(des => des.Sentence.toLowerCase().replace(escapeRE, '').split(' '));

[ [ 'yes',
'keep',
'go',
'apple',
'tabacco',
'javascript',
'no',
'uhh',
'omg',
'hi.' ],
['say',
'hello',
'me',
'allright',
'maybe',
'mi',
'say.' 
....] ]

而且我有一个停用词 JSON 文件。

停用词的内容JSON文件

['yes',
'hi',
'so',
'say',
'me',
'uhh',
'omg',
'go',
'hello',
'hi' 
 ...]

所以我想从数组句子中删除停用词。 我想要纯句,没有停用词。 stopwords定义;

const stopwords = require('./stop_words.json');

那我该怎么办?我不知道。我尝试了 myDatas.replace('stopwords', '' ) 功能,但没用

您可以使用 jQuery grep 函数实现您的目标。您可以像下面这样使用。

    var withoutStopWords = jQuery.grep(myDatas, function(element, index){
  return stopwords.indexOf(element)<0;
                  });

Javascript 例子

var filtered=myDatas.filter(function(e){return this.indexOf(e)<0;},stopwords);

您可以像这样使用数组原型:

Array.prototype.diff = function(stopwords) {
    return this.filter(function(word) {
        var punctuationlessWord = word.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, "");
        return stopwords.indexOf(punctuationlessWord) < 0;
    });
};

和用法:

myDatas.forEach(function(part, index, theArray) {
  theArray[index] = theArray[index].diff( stopwords );
});

var myDatas = [ [ 'yes',
'keep',
'go',
'apple',
'tabacco',
'javascript',
'no',
'uhh',
'omg',
'hi.' ],
['say',
'hello',
'me',
'allright',
'maybe',
'mi',
'say.'] ];

var stopwords = ['yes',
'hi',
'so',
'say',
'me',
'uhh',
'omg',
'go',
'hello',
'hi'];

Array.prototype.diff = function(stopwords) {
    return this.filter(function(word) {
  var punctuationlessWord = word.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"");
  return stopwords.indexOf(punctuationlessWord) < 0;
 });
};

myDatas.forEach(function(part, index, theArray) {
  theArray[index] = theArray[index].diff( stopwords );
});

console.log(myDatas);

我想到的第一个问题是,您可以创建递归函数来遍历句子数组,然后检查句子单词是否在 stopWords 数组中,如下所示:

function removeStopWords(sentenceArray, stopWords, result = []) {
    sentenceArray.forEach((sentence) => {
        if (Array.isArray(sentence)) {
            result = removeStopWords(sentence, stopWords, result);
        } else if (!stopWords.includes(sentence)) {
            result = result.concat(sentence)
        }
    });

    return result;
}

这是 ES6 解决方案

  myDatas.map(des => des.filter(word => stopWords.indexOf(word) < 0));