如何计算每个单词出现在文本文件中的次数

时间:2017-11-25 22:15:54

标签: javascript

我遇到了一个挑战,我需要找到每个个人字出现在此文本文件中的次数。您可以忽略标点符号和大小写。

我实现这一目标的目的是:

  • 找到一种方法来读取文件并将其保存到变量< --- done
  • 删除一些不必要的空白区域(不是单词之间的空格)
  • 找到一种方法来编写一些可以忽略标点和大写字母的正则表达式
  • 将新重构的故事存储在新变量中
  • 以某种方式调用(拆分)并将单词存储在有序数组中

到目前为止,我已经知道了多远。我显然不能在这里编写代码来按字母长度分组。

然而,我发现这段代码我相信会对我有所帮助,但我无法理解它,我认为这正是我所寻求的。有人可以带我走过吗?

这是我希望工作的一个例子:http://textuploader.com/dq68g

CountUniqueWords.prototype.countWords = function(line) {
  var self = this;
  var uniqueWords = self._uniqueWords || {};
  var words = line.match(/(?!\d)(\w+\b)/g, '');
  var word;
  var i;
  for (i = 0; words ? i < words.length : 0; i++) {
    word = words[i].toLowerCase();

    uniqueWords[word] = uniqueWords[word] ?
      uniqueWords[word] += 1 : 1;
  }

  return uniqueWords;
};

1 个答案:

答案 0 :(得分:2)

这样做:

fileContent
    // lowercase
    .toLowerCase()
    // remove non-words
    .replace(/\W/g, " ")
    // split by space, tab and newline
    .split(/\s+/)
    // remove empty entries
    .filter(v => !!v)
    // count all terms
    .reduce((dict, v) => {dict[v] = v in dict ? dict[v] + 1 : 1; return dict}, {});

var content = `"The quick brown fox jumps over the lazy dog" is an English-language pangram—a sentence that contains all of the letters of the alphabet. It is commonly used for touch-typing practice, testing typewriters and computer keyboards, displaying examples of fonts, and other applications involving text where the use of all letters in the alphabet is desired. Owing to its brevity and coherence, it has become widely known.`;

console.log(get_terms(content));

function get_terms(corpus){
    return corpus
        .toLowerCase()
        .replace(/\W/g, " ")
        .split(/\s+/)
        .filter(v => !!v)
        .reduce((dict, v) => {dict[v] = v in dict ? dict[v] + 1 : 1; return dict}, {});
}

不幸的是,ES不支持任何有序字典。您可能必须为此目的实现自己的数据结构。