形態素分析で重要ワードに重みを付ける
形態素分析で重要ワードに重みを付ける
ネットショップ運営の重要な要素に【検索対策】があります。検索対策は大きく分けて3つの要素があります。
- Word調整
- モールディレクトリ調整
- キーワード広告設定
この中で最も簡単なものが『キーワード広告設定』、ジャンル毎に対応可能なものが『モールディレクトリ調整』、最も面倒なものが『Word調整』です。
ワード調整はなぜ大変か
ワード調整が大変な理由は明白です。
モール側はテクニックで上位表示されないようアルゴリズムを変え、出品者側はルール解析しテクニックで検索順位を補おうとします。このイタチごっこが頻繁に行われるルール改正の原因です。
形態素分析の知識の重要性
形態素分析はGoogleなどの検索エンジンでも利用されています。
文章の中にどんなワードが入っているかを解析しマッチング率の高いものからソート表示したものが検索結果です。
精度の違いはありますが、当然モール内の検索でも同じ単語解析が利用されています。形態素分析を知っている事はSEO対策を進めるうえで重要な知識のよりどころとなります。
そもそも形態素分析って?
簡単に形態素分析を解説すると『文章を構成する単語に分ける』事です。
この分解された単語が検索時に利用されるワードとして評価されます。
ゼロからの構築は難しい。だからあるものを使う。
形態素分析は学問として成立出来る程度に難しいものなのだそうです。ビジネスの世界でそんなものを追求するなんて事はできません。だからあるものを使います。
MeCabは京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース形態素解析エンジン。日本語解析ではほとんどがこのツールを利用しているのではないかと思うくらいメジャーなツールです。
UNIX系でもWindowsでも利用できるので是非ダウンロードし設置してみてください。
MeCabをSEO対策に使う
あくまでも私の所感ではありますが、SEO対策でのMeCabの使いどころは検索ワード評価との連動です。
現状の私のシステムでは次の様の動作させています。
- 来店ワードや収集したサジェスト、人気店舗の説明文などを形態素分析にかけ一般語に変換
- 名詞、形容詞、動詞だけを取り出し変数に格納
- SQL上のSEOワードリストと比較
- SEOワードリストに無い場合は新規追加
- SEOワードリストにあった場合は、其々の掛け率を掛けた値をワード評価カラムに加算
このアルゴリズムで評価カラム値降順ソートで重要なワード順に並ぶといった仕組みです。
形態素分析実装のスクリプト
現在作り変えの最中ですが、旧バージョン(自社運用バージョン)で書いたスクリプトを公開します。
//言語:PHP
//形態素分析
$options = array('-d', 'MeCabの保存先');
$mecab = new \MeCab\Tagger(); // php7
foreach ($TEX as $word) {
$nodes = $mecab->parseToNode($word);
$words=array();
foreach ($nodes as $n){
$sept = array();
$sept = explode(',',$n->getFeature());
//======================================================================
//改行コードを\nに統一
$text = str_replace(array("\r\n", "\r","\n"), "", $n->getSurface());
//======================================================================
$words[] =array(
"Word" => $text,
"Typ" => $sept[0],
"SEP1" => $sept[1],
"SEP2" => $sept[2],
"SEP3" => $sept[3],
"SEP4" => $sept[4],
"SEP5" => $sept[5],
"ORIGIN" => $sept[6],
"YOMI" => $sept[7],
"OTO" => $sept[8]
) ;
}
//単語要素 Null と "" を排除
$filtered = array_filter($words, function($item) {
return (isset($item['Word']) && ($item['Word'] <> "") && ($item['Word'] <> "\n"));
});
$items = array_merge($filtered);
//==============================================================================
//重複データを外す
unset($item,$tmp);
foreach ($items as $row){
if (!in_array($row['Word'], $tmp)) {
$tmp[] = $row['Word'];
$item[] = $row;
}
}
//==============================================================================
//以降は保存のスクリプト
MeCab分析の課題
形態素分析とSEOワード評価を連動させる仕組みを構築し運用した結果、課題が2点見つかりました。
- 合成ワードの扱い
- ワード位置関係の評価
合成ワードの扱いはその名の通り『くっつかない』などのワードをどう扱うかです。
『くっつかない』を形態素分析すると【くっつか(原型:くっつく)】【ない】の2単語に分かれます。
そのまま利用してしまうと『くっつかない』と言うワードの評価は低いままです(【くっつく】と【ない】の評価が上がります)
これを補完するのがワードの位置関係の評価となります。位置関係評価の場合、原型である【くっつく】ではなく活用形の【くっつか】を記憶しておく必要がありますし、助詞などの品詞の保存も必要となります。
DBは同じ言葉で溢れかえりますし、助詞は様々な箇所で登場しますので、単語評価が上がってしまいます。
例として『くっつく』で表記してみます。
【くっつかない/くっ付かない/くっつき難い/くっ付き難い】で形態素分析
| 単語 | 品詞 | 細分類1 | 細分類2 | 細分類3 | 活用型 | 活用形 | 原型 | 読み | 発音 |
|---|---|---|---|---|---|---|---|---|---|
| くっ | 動詞 | 自立 | * | * | 五段・ラ行 | 連用タ接続 | くる | クッ | クッ |
| 付き | 動詞 | 自立 | * | * | 五段・カ行イ音便 | 連用形 | 付く | ツキ | ツキ |
| 難い | 形容詞 | 非自立 | * | * | 形容詞・アウオ段 | 基本形 | 難い | ガタイ | ガタイ |
| 付か | 動詞 | 自立 | * | * | 五段・カ行イ音便 | 未然形 | 付く | ツカ | ツカ |
| ない | 助動詞 | * | * | * | 特殊・ナイ | 基本形 | ない | ナイ | ナイ |
| くっつか | 動詞 | 自立 | * | * | 五段・カ行イ音便 | 未然形 | くっつく | クッツカ | クッツカ |
| くっつき | 動詞 | 自立 | * | * | 五段・カ行イ音便 | 連用形 | くっつく | クッツキ | クッツキ |
さぁではどう評価しよう。
これが形態素分析とSEOを結び付けた時に最も悩むアルゴリズムです。
ちなみに、自作システムでは類義語辞典を用意する事でこの問題の解決を図りました。
まとめ
形態素分析の考え方はネットショップを運営するうえでとても大切です。
自分なりのアルゴリズムを考え突き詰めていくと、ワードの自動挿入システムへの道が開けます。


