形態素解析を使ってみる


# 考えていること

処方箋を解析
医学用語を意味情報で区別できるといいけどな

# 大別

## 一般

Python による日本語自然言語処理
https://github.com/nltk/nltk_book/blob/master/book-jp/ch12jp.rst

## Natural Language

エンティティ判別をしてみたけど、詳しい意味情報まではわからなかった。
人名とかはある程度わかりそう。
もしかすると、日本語だからかもな。
一度翻訳すればいけるのかも？

## mecab

MeCabでオリジナル辞書を作成する - Qiita
https://qiita.com/nnahito/items/16c8e214d71fbc23ed8e

コストについて

日本テレビ東京で学ぶMeCabのコスト計算 | mwSoft
http://www.mwsoft.jp/programming/munou/mecab_nitteretou.html

素性	フィールドの比較

MeCab辞書について | Yuta Hayashibe
https://hayashibe.jp/tr/mecab/dictionary/

## Juman

公式

KNP - KUROHASHI-KAWAHARA LAB
http://nlp.ist.i.kyoto-u.ac.jp/index.php?KNP

公式ドキュメント
http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-manual-1.01.pdf

	ドメインとかカテゴリとか分類の仕方自体が既に意味のある知識だな

最初に見た記事

MeCabより高精度？RNNLMの形態素解析器JUMAN++ - DeepAge
https://deepage.net/machine_learning/2017/01/16/juman++.html

	大規模コーパス

https://qiita.com/riverwell/items/438e88427363511e9f28

	概要がわかる

> 自動獲得というのはJUMANの頃から行われていることで、Wikipediaなどをベースに語彙を獲得していることです。
> 現在は X は テキスト (ウェブテキストのこと)、Wikipedia、Wiktionary の3種類だと思います。

	なるほど、便利

インストールで詰まるところをフォローできた記事
若干時間がかかるけど割とスマート

Juman++を試そうと思ったら詰まったので解決方法を模索した話 - EnsekiTT Blog
http://ensekitt.hatenablog.com/entry/tree3

自分で辞書にするかもしれないしメモ

Juman のユーザ辞書の作り方 - Solr, Python, MacBook Air in Shinagawa Seaside
http://d.hatena.ne.jp/knaka20blue/20110320/1300627864


neologd辞書をJumanで使うスクリプト、試してみた

https://qiita.com/Kensuke-Mitsuzawa/items/403256129e812b09c461
https://github.com/fumankaitori/neologd2juman

	brewで入れているとjumanpp（じゅーまんぷらぷら）で辞書追加がよくわからなかった
	ちゃんと使うならビルドしたほうがいいかも

半角スペースは全角に変換してjumanにかけるべし

JUMAN++で遊んでる時にValueErrorが出ちゃう原因と対策の話 - EnsekiTT Blog
http://ensekitt.hatenablog.com/entry/juman

JUMAN++の形態素解析辞書についてのメモ | 北白川日記
https://www.shirayu.net/diary/2016/09/30

> JUMAN++辞書の動詞
> さて，「意味情報」が充実しているのがJuman辞書の特徴です．

### ツール

FUMI
http://www.nysol.sakura.ne.jp/fumi/jp/index.html

FUMI: mjumandic.rb CSVからJUMAN辞書への変換
http://www.nysol.sakura.ne.jp/fumi/jp/sect-mjumandic.html

FUMI: テキストマイニングコマンド
http://www.nysol.sakura.ne.jp/fumi/jp/sect0003.html

インストール - NYSOL
http://www.nysol.jp/install

## neologd辞書

有名なやつ、とりあえずREADMEに従って見た
薬品名の意味情報までは取れないな

https://github.com/neologd/mecab-ipadic-neologd

## クラウド

irbを使ってインタラクティブシェルで試せる

https://qiita.com/ynakayama/items/388c82cbe14c65827769

	ネットから取ってくる

https://qiita.com/ysk_1031/items/7f0cfb7e9e4c4b9129c9

	wikipediaのタイトルからとる

## 薬品の辞書

薬品名を3文字入力できる辞書を作ったから公開するよ【DL可】
https://yakkyokujimu.com/2016/07/yakuhin-zisho.html

	ファイルはリンク切れっぽい

医療機関コードから住所や医療機関名称を入力できるようにする方法
https://yakkyokujimu.com/2016/06/iryokikan-code.html

	厚生労働省の資料からデータを取ってくるのか
	だいぶフォローできそうだな

## ComeJisyo

薬名とかはいまいち取れないな

ComeJisyo プロジェクト日本語トップページ - OSDN
https://ja.osdn.net/projects/comedic/

	良さそう。2013年が最終更新か。

MeCabでComeJisyoを使おう | DATUM STUDIO株式会社
https://datumstudio.jp/blog/mecab%E3%81%A7comejisyo%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86

> ComeJisyoとは、医療単語を3万語ほど登録しているMeCab用の辞書です。ここではMacにインストールする場合を示します。

Word２Vec, MeCab, ComeJisyo で病気の症状類似語を出してみた - Qiita
https://qiita.com/quvo/items/9ef250d58971eadf6e1a

> 全体的に見て、Wikipediaの方が類似度が高くなっている。これはWikipediaの方が圧倒的に登録語数が多いからだろうか

## 政府情報

薬価基準収載品目リスト及び後発医薬品に関する情報について（平成28年3月31日まで）｜厚生労働省
http://www.mhlw.go.jp/topics/2014/03/tp0305-01.html

## ほか

MEDNLP 医療言語処理グループ
http://mednlp.jp/resource.html

# 色々やって見た結果

ディスク容量が10Gほど減っていた。
Jumanが意味情報という意味ではよさげなので、政府情報をもとに辞書にするか。
意外と量は少なそうだし。
Jumanの辞書を作って見た。コストの設定がよくわからなくて、
単語が被ったらwikipedia辞書がヒットしてしまう。
Makefileの順番を変えればいいのか、juman.dicを書き換えるのか。。
Makefileでの順番を変えたりwikipedia.mdicを空っぽにしたりすると`invalid posid`が出てしまった。。
jumanpp.mdicへperlを使って集約する時点でwikipediaが勝ってユーザー辞書の単語が無視されてるな。
mecabでいっか。sudachiかな。。

# 適当なコマンドメモ

```bash
alias python3=~/.anyenv/envs/pyenv/versions/3.6.1/bin/python3
pyenv global 3.6.1
sudo bash neologd2juman.sh mecab-user-dict-seed.csv
sudo bash install-dictionary.sh


git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

curl -L http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv | iconv -f euc-jp -t utf-8 > keywordlist_furigana.csv
curl -L http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz | gunzip > jawiki-latest-all-titles-in-ns0
ls
ruby make.rb
/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index  -d /usr/local/lib/mecab/dic/ipadic -u custom.dic -f utf-8 -t utf-8 custom.csv


nkf -Lw ComeJisyoV5-0993/ComeJisyoV5.csv > ComeJisyoV5-0993/ComeJisyoV5-utf8.csv
/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index  -d /usr/local/lib/mecab/dic/ipadic  -u comejisyo.dic -f utf-8 -t utf-8 ComeJisyoV5-0993/ComeJisyoV5-utf8.csv
```

# 辞書作り

一旦、手作業で読みは適当

```
^.*$
(名詞 (普通名詞 ((読み $0)(見出し語 ($0))(意味情報 "自動獲得:厚生労働省のエクセル エンティティ:医薬品メーカー"))))

^.*$
(名詞 (普通名詞 ((読み $0)(見出し語 ($0))(意味情報 "自動獲得:厚生労働省のエクセル エンティティ:医薬品;商品名;短縮"))))
```

```
([Ａ-Ｚ]|[々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])+?\)\(見出し語
)(見出し語

[0-9０-９．，]+(μｇ|カプセル|カリウム|シート|セット|万単位|丸|個|包|単位|本|瓶|筒|管|袋|鉄|錠|％|ＩＲ|ＪＡＵ|ＭＢｑ|ｇ|ｍＥｑ|ｍＬ|ｍｇ)

((シロップ|カプセル)|「.*?」|（.*?）|〈.*?〉|〔.*?〕)

[0-9０-９．，]*?／.+$

　.+$

^.{1,2}$

([\u30A1-\u30FA])([々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])+$
$1

([々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]+[０-９．，Ａ-Ｚ]+[々〇〻\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])+$

```

漢字、ひらがな、カタカナにマッチさせる方法 | 正規表現
https://so-zou.jp/software/tech/programming/tech/regular-expression/meta-character/variable-width-encoding.htm

# jumanからmecabへの適当変換めも

```
# Makefile変更
SCRIPT_DIR=scripts
JUMANPM_DIR=scripts/lib/

DIC_DIRS=userdic
MDIC_LIST=$(addsuffix .mdic,$(DIC_DIRS))
BASIC_DICTS=$(shell find dic -name "*.dic"|grep -v "Rengo.dic"|grep -v "ContentW.dic")

.PHONY: jumanpp 
all: jumanpp

scripts/lib/Grammar.pm: grammar/JUMAN.katuyou grammar/JUMAN.grammar grammar/JUMAN.kankei
	rm -f scripts/lib/Grammar.pm
	perl -I scripts/lib/ scripts/mkgrammarpm grammar -o scripts/lib/Grammar.pm 

jumanpp: $(MDIC_LIST) scripts/lib/Grammar.pm
	mkdir -p jumanpp_dic &&\
	cat $(MDIC_LIST) | perl -I$(SCRIPT_DIR) -I$(JUMANPM_DIR) $(SCRIPT_DIR)/jumandic2morphdic.perl --nominalize --okurigana > my.csv

#grep エンティティ jumanpp.mdic | sed -e 's/名詞,普通名詞,/名詞,普通名詞,\*,\*,/g' > my.csv

#mecabモデルファイル
bzip2 -d mecab-ipadic-2.7.0-20070801.model.bz2
nkf --overwrite -Ew mecab-ipadic-2.7.0-20070801.model

#convert
/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -m mecab-ipadic-2.7.0-20070801.model -d /usr/local/lib/mecab/dic/ipadic  -u my.dic -f utf-8 -t utf-8 my.csv
mecab -u my.dic
```

# 作った辞書

[日本の厚生労働省の公開しているデータを元にした辞書](https://github.com/bonk/dictionaries)