JavaScriptをがんばるブログ

React,OSS,ソフトウェア開発が中心のブログです👨‍💻

ストップワードという概念を知りました

あまりにも頻出するので検索対象から除外する言葉、という意味の単語です。

ストップワードとは - はてなキーワード

当初この概念を知らず、kuromojiで形態素解析したワードのリストから「だから」「でも」などの慣用句を除外する方法としてTF-IDFという手法を活用しようと考えましたが、ランキング集計したい単語と除外したい単語の判別を頻出度による重み付けで行うのは難しそうだったため断念しました。

qiita.com

今の僕の知識では結局辞書ファイルを用いる方法しか心当たりが無かったのでkuromojiで無視する単語一覧の辞書ファイルを作成して辞書に無ければ集計対象とするという方向に転換。

// tokenizer作成時にユーザー定義辞書を渡す
val tokenizer: Tokenizer = Tokenizer.builder().userDictionary("./dictionary/ignore.csv").build()


tokens: java.util.List[Token] = tokenizer.tokenize("テスト文章だよー")

for (index <- 0 to tokens.size() - 1) {
    token.isUser() // ユーザー定義辞書に存在すればtrueを、無ければfalseを返す
}

このようにtoken.isUser()メソッドでユーザー辞書に存在するかどうかの判定は行えます。

しかし辞書ファイルの形式を以下のようなCSVで定義する必要があるようで、
単純に無視したい単語を登録したいだけなのに読みや品詞も登録するのはだるい...

# 単語,形態素解析後の単語(単語を分ける場合は、スペースで区切る),読み,品詞
かずひら,かずひら,カズヒラ,カスタム名詞

引用: LuceneのKuromoji(JapaneseAnalyzer)に、ユーザ定義辞書を適用してみる - CLOVER

どうしようかなぁと思っていたら引用元の記事で紹介されていたkuromojiにストップワードを設定する方法が良さそうだったので試してみたいと思います。

デフォルトのストップワードを任意に拡張出来れば文句無しだなぁ。