从句子中删除停用词
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));
我有一个句子,但是这个句子被拆分为每个 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));