Kuromojiと辞書ファイルを利用して形態素解析を行う

SOLDOUT2市場情報を開発しているのですが、ある日作業名から商品名を探したくなる事がありました。

商品名→作業名を探し出すのは簡単なのですが、

作業名→商品名を探し出すのは難しいです。

例えば『革の盾』から『革の盾を作成する』を探すのならcontainsを使えば済みますが、

『革の盾を作成する』から『革の盾』を見つける事は出来ません。

そこで形態素解析を利用して『革の盾を作成する』から『革の盾』という単語を抽出してきます。

利用環境

Spring boot 2.0.0

Kuromoji 0.9.0

事前準備(Gradle)

// https://mvnrepository.com/artifact/com.atilika.kuromoji/kuromoji-ipadic
compile group: 'com.atilika.kuromoji', name: 'kuromoji-ipadic', version: '0.9.0'

利用方法

とりあえずサンプル通りに動かしてみます。

Tokenizer.Builder builder = new Tokenizer.Builder();
builder.mode(TokenizerBase.Mode.SEARCH);
Tokenizer tokenizer = builder.build();
for (Token token : tokenizer.tokenize("革の盾を作成する")) {
    System.out.println(token.getSurface() + "\t" + token.getAllFeatures());
}

と、まぁ、『革の盾』まで綺麗に分割されてしまいます。

これでは使うことが出来ませんので、辞書を使って解決したいと思います。

辞書ファイルの作成

CSVファイルで対応します。

単語,解析後の単語,フリガナ,品詞

なので、

革の盾,革の盾,カワノタテ,商品名

と保存して、プログラムから読み込ませます。

今回は『item_dic.csv』として保存しました。

辞書ファイルをKuromojiに読ませる

辞書ファイルは事前にプロジェクト直下にでも置いてあげて下さい。

以下で読み込ませる事が出来ます。

builder.userDictionary(ClassLoader.getSystemResourceAsStream("item_dic.csv"));

builderで辞書を噛ませた後、先程と同じ様に結果を出力させます。

これで『革の盾を作成する』から『革の盾』を抽出することが出来ました。

ちなみにSpringFrameworkで辞書ファイルを読み込む場合、

上記方法では読み込むことが出来ませんのでこちらを参照して下さい。

SpringFrameworkにて外部ファイルを読み込む

利用環境

  • Spring boot 2.0.0

Google検索で外部ファイルの読み方を調べたところ、Propertiesの読み方が多く

事前にCSVやその他ファイルを読み込む方法が無かったので記事にしました。

 

ファイルの設置個所

今回は src/main/resources に以下にファイルを事前に置いておきます。

方法

ResourceLoaderを使用します。

下記をController内にて使用してください。

@Autowired
protected ResourceLoader resourceLoader;

次にresourceLoaderからファイルを読み込みます。

この時に”classpath:”+file名をしてあげてください。

resourceLoader.getResource("classpath:" + "item_dic.csv")

getResourceした際にResourceが返ってくるので、これを操作することでファイルを取得することが出来ます。

ResourceのAPIはこちらのドキュメントで確認できます。

getFile()やgetInputStream()がありますので、後は適宜操作してあげて下さい。

Barcode Generatorリリース

Barcode Generatorをリリースしました。

https://barcode.kagamikarasu.net/

使い方

オプションは適宜設定してください。

  • CSVの場合

CSVファイルをアップロードし、変換したいカラム列番号を指定します。

3列目のデータを変換したい場合、3と数値を入力してください。

その後、生成ボタンを押すことでzipファイルのダウンロードが始まります。

  • フォーム入力の場合

入力エリアに数値(EANの場合)ないし文字列(QRCode)を入力します。

その後、生成ボタンを押すことで zipファイルのダウンロードが始まります。

エラーなど

  • Invalid dataと表示された場合
  1. 桁数があっていない
  2. チェックデジットが間違っている

対応コード

  • EAN(JAN)13
  • QRCode