頻出ワードランキング関数 for Google スプレッドシート
- 背景
ウェブの記事やRSSをスクレーピングしてキーワードを引っ張ってランキングをつけたいことは、SEO 対策などで欲しくなることがよくありますね。スクレーピングしたものを引っ張ってきて、マニュアルでコピペして邪魔くさい作業を繰り返すのが辛くなることってままあります。関数で作れれば便利だろうな、という発想で作ってみました。
WordRanking 関数
A 列に RSS で取得した Summary が入っているとします。この中から頻出ワードを取得するとします。対象列(今回は A列)の範囲を指定して、何位まで順位を表示するかを第二パラメーターで指定すると、ワードランクが出現回数付きで一覧させる関数です。
=WordRanking(セル範囲,表示する順位) と入力すると、A 列に入っている文字列全体からの頻出数が取得できます。
例) Engadget 日本語サイトの RSS の Summary を使って出現回数を取得しています。
Special Thanks to Engadget!! 残念ながら Engadget は、2022年3月31日をもって日本での活動を終わりました。好きなサイトだったので寂しい限りです。
コードとスプレッドシート(2024/7/30 カタカナの正規表現に誤りがあったため変更しました)
コードを含んだスプレッドシートはこちらです。読み込み専用なのでコピーして使ってください。
var stringarg=""
var stringarg=JSON.stringify(targetRange) // 配列を連続した文字化
var ret=[] // 仮配列
var namedArray={} // Unique 集計
var res=[ /([\u30A1-\u30FAーー]){2,}/g, // 2文字以上連続したカタカナ
/([々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]){2,}/g, //2文字以上連続した漢字
/([-a-zA-Z]{3,})+/g] // 3文字以上連続した英数字
// namedArray を利用して、出現回数の計測
for (i=0;i<res.length;i++){
var re=res[i]
var ms=stringarg.match(re)
for (m in ms){
if (namedArray[ms[m]]==undefined){
namedArray[ms[m]]=1
} else {
namedArray[ms[m]]=namedArray[ms[m]]+1
}
}
}
// 配列に格納
for (key in namedArray){
ret.push([key,namedArray[key]])
}
// 出現数によって降順ソート
ret=ret.sort(function(a,b){if(a[1]>b[1]){return(-1)}else{if (a[1]==b[1]){return(0)} else return 1}})
// ヘッダー追加
ret.unshift(['Word','Frequency'])
var topN=[]
for (i=0;i<Math.min(ret.length,numOfList+1 );i++){
topN.push(ret[i])
}
return(topN)
}