如何在一个大型网页上获取独特的单词(至少是一个独特单词的样本)

How to get the unique words on a large webpage (at least a sample of unique words)?

本文关键字:单词 一个 样本 网页 大型 获取      更新时间:2023-09-26

我正在尝试处理非常大的页面的可见文本,例如,这个页面上的整个Orwell的"1984",但当我尝试以下操作时,我的Chrome控制台似乎崩溃了。

var script = document.createElement('script');
script.src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(script);
var allWords = $(document.body).children(":visible").text().split(' ');
var uniqueWords = allWords.filter(function(elem, i, array){ return array.indexOf(elem) === i });

以上情况使我的Chrome选项卡在最后一次操作时变得没有响应(我输入的新命令的输出至少会停止一分钟)。注意:代码片段的第一部分只是将JQuery附加到页面上。

你会如何更快地处理这样的大字符串?你认为我应该从allWords中随机采样,只对这个较小的字符串应用filter函数吗。

chrome选项卡在最后一行执行后挂起的原因是算法的复杂性。不需要对每个单词调用.indexOf,只需将每个单词添加到Set 中即可

var uniqueWords = new Set();
allWords.forEach(function (word) { 
    uniqueWords.add(word) 
});

如果您需要ES5版本的相同代码,您可以使用helper对象作为数据存储。对象键本质上是唯一的,所以你可以用单词作为键填充空对象,用值填充你想要的任何东西,然后用Object.keys方法提取单词

var uniqueWordsHash = {};
allWords.reduce(function (hash, word) {
    hash[word] = null;
    return hash;
}, uniqueWordsHash);
var uniqueWordsArray = Object.keys(uniqueWordsHash);
相关文章: