一直在谷歌的表格上工作,其中包含了大约一千条文本。在从一列衍生而来的列中,包含原始“书面”形式的文本的列,是从它们中提取的ngram(单词等),并按字母顺序列出与每个文本对应的ngram列表。我一直试图从这些这样的ngram列表中派生出第二列,但没有成功,我想从这些列中删除某些ngram的实例,其中我有一个列表(很长的列表,数百个ngram,以及一个以后我可以添加的列表)。换句话说,在文本挖掘词汇表中,我希望从标记列表中删除停止单词。

我尝试过使用SPLIT和REGEXREPLACE函数,或者两者结合使用,但没有成功。
=JOIN(",";SORT(TRANSPOSE(SPLIT(REGEXREPLACE(AL3;"\bau\b;\baux\b;\bavec\b;\bce\b;\bces\b;\bdans\b;\bde\b;\bdes\b;\bdu\b;\belle\b;\ben\b;\bet\b;\beux\b;\bil\b;\bje\b;\bla\b;\ble\b;\bleur\b;\blui\b;\bma\b;\bmais\b;\bme\b;\bmême\b;\bmes\b;\bmoi\b;\bmon\b;\bne\b;\bnos\b;\bnotre\b;\bnous\b;\bon\b;\bou\b;\bpar\b;\bpas\b;\bpour\b;\bqu\b;\bque\b;\bqui\b;\bsa\b;\bse\b;\bses\b;\bson\b;\bsur\b;\bta\b;\bte\b;\btes\b;\btoi\b;\bton\b;\btu\b;\bun\b;\bune\b;\bvos\b;\bvotre\b;\bvous\b;\bc\b;\bd\b;\bj\b;\bl\b;\bà\b;\bm\b;\bn\b;\bs\b;\bt\b;\by\b;\bété\b;\bétée\b;\bétées\b;\bétés\b;\bétant\b;\bsuis\b;\bes\b;\best\b;\bsommes\b;\bêtes\b;\bsont\b;\bserai\b;\bseras\b;\bsera\b;\bserons\b;\bserez\b;\bseront\b;\bserais\b;\bserait\b;\bserions\b;\bseriez\b;\bseraient\b;\bétais\b;\bétait\b;\bétions\b;\bétiez\b;\bétaient\b;\bfus\b;\bfut\b;\bfûmes\b;\bfûtes\b;\bfurent\b;\bsois\b;\bsoit\b;\bsoyons\b;\bsoyez\b;\bsoient\b;\bfusse\b;\bfusses\b;\bfût\b;\bfussions\b;\bfussiez\b;\bfussent\b;\bayant\b;\beu\b;\beue\b;\beues\b;\beus\b;\bai\b;\bas\b;\bavons\b;\bavez\b;\bont\b;\baurai\b;\bauras\b;\baura\b;\baurons\b;\baurez\b;\bauront\b;\baurais\b;\baurait\b;\baurions\b;\bauriez\b;\bauraient\b;\bavais\b;\bavait\b;\bavions\b;\baviez\b;\bavaient\b;\beut\b;\beûmes\b;\beûtes\b;\beurent\b;\baie\b;\baies\b;\bait\b;\bayons\b;\bayez\b;\baient\b;\beusse\b;\beusses\b;\beût\b;\beussions\b;\beussiez\b;\beussent\b;\bceci\b;\bcela\b;\bcelà\b;\bcet\b;\bcette\b;\bici\b;\bils\b;\bles\b;\bleurs\b;\bquel\b;\bquels\b;\bquelle\b;\bquelles\b;\bsans\b;\bsoi\b";"");" ")));"")Dumky 这里做了一些很好的工作,编写了一个具有自定义函数的脚本,该脚本可以完成几项任务,其中包括从辅助表中调用列表,以清除这些符号列表--单词--标记,但他所做的事情超出了我想要做的事情,也超出了我自己在谷歌页中可以做的事情。
停止词清单(要删除的符号):à、ai、aie、aient、aies、ait、as、au、aura、aurai、auraient、aurais、aurait、auras、aurez、auriez、aurion、aurons、auront、aux、avaient、avais、avait、avec、avez、aviez、avions、avons、ayant、ayez、ayons、c、ce、ceci、cela、ces、cet、cette、d、dans、de、des、du、elle、en、es、est、et、étaient、étais、etétais、etétéeététes、tésététiez;欧洲联盟、欧洲安全理事会、欧洲安全理事会、欧洲安全组织、欧洲安全理事会、欧洲安全法院、欧洲安全委员会、欧洲安全法院、欧洲安全委员会、欧洲安全法院、欧洲安全委员会、欧洲安全法院、欧洲安全理事会、欧洲安全理事会、欧洲安全委员会、欧洲安全组织、欧洲安全理事会、欧洲安全组织、欧洲安全理事会、欧洲安全理事会、欧洲安全组织、欧洲安全组织、东帝汶、欧洲、sa,sans,se,serez,serai,seraient,serais,serait,seras,serez,seriez,序列化,serons,seront,se,soi,soient,sois,soit,sommes,son,sont,soyez,soyons,suis,sur,t,ta,te,tes,toi,ton,tu,un,une,vos,votre,vous,y
我想要的输出的一个例子-
从一个简短的文本中衍生出的名词清单:10、11、21、à、ami、ami、amour、aux、baiser、布鲁塞尔、布鲁塞尔、car、ce、comme、comme、compagnon、de、de、déclare、déclare、déteste、électricité、elle、en、est、et、et、étudiant、fluide、gare、germes、heures、idéalistes、il、传染性te、je、l、l、la、la、le、lumière、médecine、meilleur、moi、moi、mon、montréal、pée、pensez、poèque、rancune、science、rancune、rérépondez、ses、ses、联合国,vébicule,V tre,vous
产出: ami、ami、amour、baiser、brusko、brusko、car、comme、comme、compagnon、déclare、déclare、déteste、électricité、étudiant、fluide、gare、germes、heures、idéalistes、infectueux、lumière、médecine、meilleur、montréal、pée、pensez、poète、rancune、répondez、science、sic、vébicule、vétre

发布于 2021-09-01 13:51:57
我不确定我是否正确地理解了你。如果您想从字符串中删除一些单词,那么基本上可以这样做:
var txt = "a,b,c,d,aa,bb,cc,dd";
var to_remove = "a,bb,d,dd".split(',');
results = txt.split(',').filter(word => !to_remove.includes(word)).join();
console.log(results); //output: 'b,c,aa,cc'
当然,要使它与电子表格数据一起工作,还需要额外的步骤。
更新
与测试数据相同的代码:
var txt = "10,11,21,à,à,ami,ami,amour,aux,baiser,brusko,brusko,car,ce,comme,comme,compagnon,de,de,déclare,déclare,déteste,électricité,elle,en,est,est,est,et,étudiant,fluide,gare,germes,heures,idéalistes,il,infectueux,je,l,l,la,la,le,lumière,médecine,meilleur,moi,moi,mon,montréal,pée,pensez,poète,que,que,qui,rancune,répondez,sans,science,ses,sic,un,un,vébicule,vôtre,vous";
var to_remove = "à,ai,aie,aient,aies,ait,as,au,aura,aurai,auraient,aurais,aurait,auras,aurez,auriez,aurions,aurons,auront,aux,avaient,avais,avait,avec,avez,aviez,avions,avons,ayant,ayez,ayons,c,ce,ceci,cela,celà,ces,cet,cette,d,dans,de,des,du,elle,en,es,est,et,étaient,étais,était,étant,été,étée,étées,êtes,étés,étiez,étions,eu,eue,eues,eûmes,eurent,eus,eusse,eussent,eusses,eussiez,eussions,eut,eût,eûtes,eux,fûmes,furent,fus,fusse,fussent,fusses,fussiez,fussions,fut,fût,fûtes,ici,il,ils,j,je,l,la,le,les,leur,leurs,lui,m,ma,mais,me,même,mes,moi,mon,n,ne,nos,notre,nous,on,ont,ou,par,pas,pour,qu,que,quel,quelle,quelles,quels,qui,s,sa,sans,se,sera,serai,seraient,serais,serait,seras,serez,seriez,serions,serons,seront,ses,soi,soient,sois,soit,sommes,son,sont,soyez,soyons,suis,sur,t,ta,te,tes,toi,ton,tu,un,une,vos,votre,vous,y".split(',');
results = txt.split(',').filter(word => !to_remove.includes(word)).join();
console.log(results);
下面是一个简单的脚本,它遍历所有行(从第二行开始),从B列获取停止词,从C列获取文本,并将结果放入D列:
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var last_row = sheet.getLastRow();
var range = sheet.getRange('B2:C' + last_row);
var data = range.getValues();
var output = [];
for (row of data) {
var stop_words = row[0].split(',');
var txt = row[1].split(',');
var result = txt.filter(word => !stop_words.includes(word)).join();
output.push([result]);
}
sheet.getRange('D2:D'+last_row).setValues(output);
}如果每一行的停止词相同,那么脚本可能会更简单、更短、更快:
function myFunction2() {
var sheet = SpreadsheetApp.getActiveSheet();
var last_row = sheet.getLastRow();
var stop_words = sheet.getRange('B2').getValue().split(','); // get stop words from B2
var data = sheet.getRange('C2:C' + last_row).getValues().flat();
var output = data.map(row =>
[row.split(',').filter(word => !stop_words.includes(word)).join()]
);
sheet.getRange('D2:D'+last_row).setValues(output);
}更新2
如果您想要一个自定义函数,它就在这里:
function NGRAMSFILTER(stop_words, ngrams) {
var stop_words = stop_words.split(',');
return ngrams.split(',').filter(word => !stop_words.includes(word)).join();
}它使用带有停止词的单元格和带有“ngram”的单元格,并返回不在停止词中的“ngram”。
更新3
以下是收集B列中所有“停止词”的自定义函数:
function NGRAMSFILTER_ALL(ngrams) {
var sheet = SpreadsheetApp.getActiveSheet();
var last_row = sheet.getLastRow();
var stop_words = sheet.getRange('B2:B' + last_row).getValues().flat().join(',').split(',');
return ngrams.split(',').filter(word => !stop_words.includes(word)).join();
}从技术上讲是可行的。但实际上,如果有太多的文字和行,它可能会经常结冰。我看不出有什么办法能加快速度。我建议使用静态脚本来完成这样的任务。
https://stackoverflow.com/questions/69013437
复制相似问题