JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでテキスト内の出現回数上位3つの単語を抽出する方法

課題

英語のアルファベット文字列を引数として受け取るJavaScript関数を作成します。この関数は、文字列内に含まれる単語のうち、出現回数が多い上位3つの単語を返す必要があります。

解決のアプローチ

実装の手順は以下の通りです。

1. 正規表現を使って記号やアンダースコアなどの不要な文字を除去し、連続する空白を1つにまとめます。
2. 文字列をすべて小文字に変換してから、スペース区切りで配列に分割します。
3. オブジェクト(マップ)を使って各単語の出現回数をカウントします。
4. 出現回数の降順にソートし、上位3つの単語を返します。

コード例

以下が実際のコードです。

const str = 'Python was developed by Guido van Rossum in the late eighties and early nineties at the National Research Institute for Mathematics and Computer Science in the Netherlands. Python is derived from many other languages, including ABC, Modula-3, C, C++, Algol-68, SmallTalk, and Unix shell and other scripting languages. Python is copyrighted. Python source code is now available under the GNU General Public License (GPL)';

const findTopThree = (str = '') => {
  str = str
    .replace(/[^\w\s]|_/g, "")
    .replace(/\s+/g, " ")
    .toLowerCase();
  const arr = str.split(' ');
  const map = {};
  arr.forEach(word => {
    map[word] = (map[word] || 0) + 1;
  });
  const res = Array.from(Object.keys(map), key => [key, map[key]]);
  res.sort((a, b) => b[1] - a[1]);
  return [res[0][0], res[1][0], res[2][0]];
};

console.log(findTopThree(str));

コードの解説

まず、replace()メソッドと正規表現/[^\w\s]|_/gにより、英数字・空白以外の文字(句読点など)を削除しています。続いて/\s+/gで連続する空白を1つのスペースに置き換え、toLowerCase()で大文字小文字の違いを吸収します。

その後、split(' ')で単語ごとの配列を作成し、forEachループ内でオブジェクトmapに各単語の出現回数を記録していきます。最後にObject.keys()Array.from()で「単語と出現回数」のペア配列を作り、出現回数の降順(b[1] - a[1])にソートして、先頭の3要素を返しています。

出力結果

コンソールには次のように表示されます。

["python","the","and"]

この例文では「python」が4回、「the」が複数回、「and」も複数回出現しているため、これらの3つの単語が上位として検出されました。

  1. JavaScriptで文字列の最小削除回数を求める方法

    問題の概要例えば、次のようなバイナリ文字列(「0」と「1」だけで構成された文字列)があるとします。const str = 001001;私たちの課題は、このような文字列を唯一の引数として受け取るJavaScript関数を作成することです。関数の役割は、入力された文字列に対して隣り合う2つの文字が同じにならないようにするために必要な最小削除回数を計算し、その結果を返すことです。例えば、上記の文字列の場合、出力は次のようになります。const output = 2;これは、インデックス0と3にある「0」を削除すると、新しい文字列が「0101」となり、隣接する文字がすべて異なる最長の文字列になるため

  2. JavaScriptで文中の最頻出単語を上位n個抽出する方法

    本記事では、JavaScriptを使って、与えられた文章(sentence)の中から最も出現頻度の高い単語を、指定した個数だけ抽出して返す方法を解説します。ここでの定義は以下の通りです。「文」とは英字アルファベットおよび句読点を含む文字列であり、「単語」とはその文の中で空白文字によって区切られる部分文字列を指します。求められている処理作成するJavaScript関数は、第一引数として文章の文字列 str を、第二引数として数値 num を受け取ります。この関数は、まず文内の各単語の出現回数をカウントし、次に出現頻度の高い順(降順)に並べた上位 num 個の単語を配列として返す必要があります。入