kuromoji.jsで得られる品詞
## 求めてるキーワードをつくる
kuromoji.jsに限らず形態素解析は形態素という最小の単位に文章を分けるため、人が1つのキーワードとして認識しているものを、2つ以上に分けてしまう事がある。
例えばスマートスピーカーという言葉が近年生まれたが、形態素では|スマート|スピーカー|と2つに分解してしまい、結果的にタグとして登録するものはスマートとスピーカーという異なるものになってしまう。
これを解決するために、ある程度形態素をまとまりとして認識できるようなルールを作る必要が求められる。そこで一番分かりやすく、形態素解析で得られた品詞でまとめると上手くいくような気がした。
## kuromoji.jsで得られる品詞
kuromoji.jsは日本語対応のためオブジェクト型に日本人が分かりやすい文字列として結果を返してくれる。2000以上の形態素に分けられたものを目grepして一覧としてまとめてみた。
* 名詞
* 一般
* 非自立
* 一般
* 副詞可能
* 助動詞語幹
* 固有名詞
* 地域
* 一般
* 国
* 組織
* 人名
* 姓
* 名
* 接尾
* 一般
* 地域
* 人名
* 副詞可能
* 特殊
* 助数詞
* 形容動詞語幹
* サ変接続
* 数
* 副詞可能
* 特殊
* 助動詞語幹
* 動詞
* 自立
* 非自立
* 接尾
* 助詞
* 格助詞
* 一般
* 引用
* 接続助詞
* 連体化
* 係助詞
* 並立助詞
* 副助詞
* 副助詞/並立助詞/終助詞
* 副詞化
* 形容詞
* 自立
* 非自立
* 助動詞
* 接頭詞
* 名詞接続
* 記号
* 一般
* 読点
* 句点
* 括弧開
* 括弧閉
調べるために利用した文章にない形態素や目grepなので取りこぼしがあるかもしれないが、大体この中に収まると思う。
kuromoji.jsやMeCabの辞書では半角の記号はunknownとして扱われ、機械的に名詞-サ変接続に分類されてしまうため、設定を変更しないと記号が名詞扱いになってしまい抽出が難しい。
1つのまとまりのあるキーワードとして得るならば、名詞と名詞が続く場合は結合したり、動詞や助詞であっても体言として扱えるのならば結合の対象に含めるべきであると考えた。しかし、ここで思わぬ伏兵が現れた。
## ライトノベルタイトルの抽出
数年ほど前からライトノベルのタイトルにおいて、とても長いものが出てきた。もちろん短いものもあるが長いものでは30文字を越えるものもあるため、省略形が用いられることが多い。
省略形であれば問題ないのだが、実際のタイトルを形態素解析して、そのタイトルそのままにタグを自動生成しようとするととても難しいことがわかった。
基本方針としては名詞や体言のような1つで意味を為せるものが連続していた場合、それは特定のキーワードであることがありえるため形態素に分解されたとしても結合をするというものだったが、ライトノベルのタイトルでは動詞や助詞を頻繁に用いるため1つのキーワードとして拾い上げるためには多くの品詞を結合することを求められる。
多くの品詞を結合することはライトノベルのタイトル以外のキーワードを生成するのを阻害するため、文章の中からライトノベルのタイトルだけを拾い上げるというのはとても難しいのではないだろうか。
const content = document.getElementById('content');
content.innerHTML = marked(content.innerHTML.replace(/>/g, '>').replace(/</g, '
関連記事