Closed3

sudachiでユーザー辞書を作る

kun432kun432

colaboratoryでやってみる。

sudachiと辞書のインストール

!pip install sudachipy
!pip install sudachidict-core sudachidict-small sudachidict-full

なるべく辞書になさそうな、独自の単語が含まれているものということで以下を利用。

https://ja.wikipedia.org/wiki/侍戦隊シンケンジャー

https://ja.wikipedia.org/wiki/侍戦隊シンケンジャーの登場人物

ざっとどんな感じでトークン化されているかを見てみる。

text = """
# 侍戦隊シンケンジャー

## あらすじ

この世とあの世の狭間を流れる三途の川に棲む妖怪外道衆。外道衆は遥かな昔から人間たちを襲い苦しめてきたが、300年前(1709年)より外道衆と戦い続けてきた者たちがいた。

彼らの名は侍戦隊シンケンジャー。志葉家の当主とその家臣で構成された“侍”たちである。彼らはモヂカラと呼ばれる不思議な力を操りながら戦い、先代当主の時代には、外道衆の大将血祭ドウコクの封印に成功した。

時は流れ2009年。志葉家の現当主を務める志葉丈瑠は、当初はシンケンレッドとして一人で外道衆と戦っていたが、外道衆の本格的な攻勢が始まることを察知した後見役の日下部彦馬は、いずれ一人での戦いに限界が来ることを危惧し、家臣の子孫である4人の若者を招集した。

## 登場人物

### 侍戦隊シンケンジャー

書かれた文字が司る力を具現化させるモヂカラという術を代々受け継ぎ、300年の昔から外道衆と戦ってきた侍たちの末裔。

筆頭の志葉家が赤(火)、その家臣である池波・白石・谷・花織の4家が順に青(水)・桃(天)・緑(木)・黄(土)と各家ごとに受け継ぐ「色」と「モヂカラ」が決まっており、それぞれの家から1人ずつ侍に選ばれた者によって構成されている。

その戦闘能力はメンバーひとりで陸軍三個師団以上に相当するとされ、さらに侍巨人を用いれば「街のひとつやふたつ数分で破壊できる」と言われる。

名乗りの際は、各々の変身後のコードネームと本名を1人目が「シンケン●●(色名。おもにレッド)、××(本名)」、2人目以降は「同じく●●(色名のみ)、××(本名)」と名乗る。

メンバーは日常生活の変身前から、変身後もコードネームではなく本名、もしくは普段の呼び方で呼び合っている。

口上は集合時は「天下御免の侍戦隊、シンケンジャー参る!」、勝利後は「これにて一件落着」。シンケンゴールド加入後は、一件落着の前に「勝利の一本締め」が挿入されるようになった(省略されることもある)。

長距離の出張などの場合は黒子のかつぐ駕籠やモヂカラで召喚した馬を利用する。

### 志葉 丈瑠(しば たける) / シンケンレッド

本作品の主人公。
火のモヂカラを操る侍で、シンケンジャーのリーダー。流ノ介と彦馬は「殿」、茉子と千明は「丈瑠」、ことはは「殿様」、源太は「丈ちゃん」と呼んでいる。ドウコクやシタリは「志葉の当主」、十臓は「シンケンレッド」と呼ぶ。
志葉家十八代目当主として侍たちを率いるが、現代において「殿様」「家臣」などが時代錯誤な存在だということは認識しており、赤の他人を戦いに巻き込むことを嫌って彦馬が仲間を集めることに反対していた。ゆえに、流ノ介たちが集結した際に「家臣とか忠義で決めず覚悟で決めろ」と言い渡している。また、あまりにも「殿様」の意向を意識しすぎることはを気にかけ、諭したこともある。当初は侍たちの命を預かることへの強い責任感などから、時として厳しい言葉を吐いて家臣たちを突き放すような態度を取っていたことから、彼らの反感を買うこともあり、特に千明から反発を招くことが多かったが、中盤以降はふとしたはずみで蔑ろにされたり共にトランプに興じるなど、他のメンバーとは幾分打ち解けていく。戦いに巻き込まないようにあまり他人と関わらずに生きてきており、戦いが終わって去っていく際にまで茉子から指摘されるほどの人見知りである。
実は、真の十八代目当主・薫が封印の文字を会得するまで外道衆から護るために作られた影武者であった。彼がモヂカラの才能に長けていたため影武者となっていたが、彼の家は侍の家系ですらなく、先代レッドと思われていた彼の父もまた、侍ではなかった。火のモヂカラも家系的に受け継いだものではなく自身の修行により後天的に身につけたものであったため、本来の志葉家のものとは挙動や効力が少し違っていた。
影武者として周囲を欺いていた負い目から、自分を軽視している節があり、意図的に侍たちとは距離を置くようにしていた。特に物語前半では、家臣たちが不安を抱かないよう努めるためもあって、彼らに自分の弱みを見せない。薫が表に出たために影武者としての役目が終わってしまい、殿でない自分には(剣以外に)何もないとの虚無感から十臓との外道の如き戦いにのめりこみ、危うく十臓と同じように外道への道を歩みかけそうになるも、流ノ介たちの叱咤を受けて寸前のところで考えを改め、家臣たちとのたしかな絆を再認識する。
その後、薫の封印の文字が薄皮太夫を取り込んだドウコクには通用しないことが判明したため、薫に呼び戻され、彼女の発案で薫の養子になって志葉家十九代目当主として改めてシンケンジャーを率いることとなり、ドウコクを力尽くで倒すことに成功する。
幼少時は非常に怖がり・泣き虫で、現在でも遊園地の絶叫マシーンやお化け屋敷(作り物の化け物)が苦手で、お化け屋敷に入った途端に絶叫し、出てきた途端に気絶してしまうほど。源太曰く腹が弱いとのこと。
殿として話をする時には常に胡坐で座っていたために、他のメンバーからは「丈瑠のイメージ=胡坐」というふうに認識されているらしく『帰ってきた侍戦隊シンケンジャー 特別幕』の皆の夢の中の丈瑠はどんな状況でも胡坐座りばかりで、本人は自分のイメージに納得がいかないようである。

## 池波 流ノ介(いけなみ りゅうのすけ) / シンケンブルー

水のモヂカラを受け継いだ侍。シンケンジャーのサブリーダーのような存在を自任する。
歌舞伎役者の家系出身。4人の家臣のうちで最も武士道と志葉家への忠誠心を教え込まれた侍で、丈瑠を「殿」と呼ぶ。知識が豊富かつ実力も高いことから、丈瑠不在の時にはスーパーシンケンブルーへ変身したり、巨大戦の指揮をとることも多い。
戦闘スタイルも基本に忠実であり、稽古であれば丈瑠と同等以上の実力を発揮できるが、常に状況の変化する実戦においては一歩劣る。礼儀を重んじ、黒子たちにも敬意を払うことを忘れない真面目で律儀な性格。日常の生活も非常に規則正しく、自ら決めたタイムスケジュールで毎日武術と体力錬成、歌舞伎の自主練習を行っている。そのため、仲間からもかなりの信頼を寄せられている。
生真面目で使命感が強いが、その一方で落ち込みやすかったり、ハイテンションにもなりやすいなど良くも悪くも感情の起伏が激しく、ムードメーカー的な一面もある。ノリのいい行動から機転が効くこともあり、サムライハオーへの初合体もハイテンションになった彼が「勢い」で発動させたことがもとである。テンクウシンケンオーへの合体や「サムライハオー」のネーミング、『侍戦隊シンケンジャーVSゴーオンジャー 銀幕BANG!!』での「サムライフォーメーション23」なども彼の発案であり、この点においては丈瑠も一目置いている。
時代錯誤な思考ゆえに天然ボケな一面もあり無闇に先走ってしまうことがある。特に巨大化戦においてはシンケンオーの合体方法手順を誤る、ナキナキテにダイテンクウを合体させてしまうなど自身だけでなく仲間までもピンチに追いやってしまうこともある。小さいころ尻餅をついて以来、サボテンが苦手。
役者時代には歌舞伎界を盛り上げるべく同年輩の役者と組んでの公演も企画していたが、そのさなかに侍として招集されたゆえに歌舞伎への未練を覗かせることもある。歌舞伎では女形も経験しており、女装による囮作戦を実行したこともある。
初期は千明を落ちこぼれと見たり、源太を侍と認めなかったりとよく衝突していたが、その後彼らをよく理解して打ち解ける。ことはからは「流さん」と呼ばれ慕われている。
良くも悪くも侍として忠実なため、薫が現れた時には丈瑠と薫との間での感情の揺れ動き方が一番激しかったが、朔太郎に諭され丈瑠との絆を優先する。
最終幕において、丈瑠の信頼を受けてドウコクの一の目に止めを刺すことを任され、見事仕留めることに成功する。戦いの後は再び歌舞伎の世界に戻ってチケットをメンバーに送ることを約束する。実家へ戻る前に丈瑠の前で別れの舞を披露する。
『帰ってきた』では、アヤカシが作りだした幻想世界において、丈瑠を差し置いて「殿」を名乗り、「森の動物戦隊シンケンジャー」を率いている。

### 白石 茉子(しらいし まこ) / シンケンピンク

天のモヂカラを受け継いだ女侍。
招集前は幼稚園でアルバイトをしていた。冷静な性格で鋭い洞察力と観察眼を持ち、物事の本質や相手の真意をついて話す。自分のことはあまり他人に話さないために弱い部分もなかなか表に出せないが、面倒見が良く心優しい一面もある。5歳のころから両親と離れて暮らし、侍としての稽古も祖母につけられている。招集の際は、一人だけ黒子が担ぐ駕籠で連れて来られたため、流ノ介から殿様と勘違いされた。
普通の生活が許されずに両親ともすれ違ってきた反動から、「普通のお嫁さん」「普通のお母さん」になることを夢見ており、落ち込んだり弱っている人を放っておけずに抱擁したくなってしまう癖がある。しかし両親との間にあったわだかまりが解けた後は、より落ち着いて他者を支えられるようになる。
モヂカラを操るセンスが高く、丈瑠からも一目置かれており、兜折神のディスクも当初は彼女に授けられる。
千明やことは、ダイゴヨウからは姉貴分として慕われており、「姐さん」や「茉子ちゃん」と呼ばれる。丈瑠に対しては名前で呼ぶなど対等に振る舞いながらも殿としては認めている。物語も終盤になるにつれ、丈瑠が秘密を抱え悩んでいることもいち早く察知して気にかけていたが、薫の登場まで影武者であることを明かしようのなかった丈瑠からは逆に避けられることになってしまう。
自己流だという料理の腕は、「包丁の代わりにシンケンマルを使う」「切った野菜を下処理すらせず鍋に放りこむ」など非常に悪く、ことは以外の仲間には恐れられており、彼女が夕食を作ると言いだした際、丈瑠は「最大の危機だ…」と呟いている。ただし、茉子を姉のように慕うことはからは「おいしい」と言われており、茉子が夕食を作るといった際には喜んでいた。当初は自覚もなかったが、のちに自分の料理に対する男性陣の正直な感想を聞いてしまったことで自身の料理の味を自覚し、その後は料理本などを参考にするようになる。小さいころ喉に詰まらせて以来、粉吹き芋が大の苦手。
薄皮太夫が人間界に現れた際には初戦時から直接戦うことが多く、ユメバクラの術により薄皮太夫の過去を目の当たりにして外道に堕ちる人間の怒りや悲しみを痛感している。そういった経緯から互いに敵の中では特に意識しており、ちょうど丈瑠と十臓を思わせる関係になっている。そのため太夫に自分の最後の相手に選ばれる。
最後の戦いの後は、しばらくの間両親と暮らすために二人の待つハワイへ旅立つ。

### 谷 千明(たに ちあき) / シンケングリーン

木のモヂカラを受け継いだ侍。
シンケンジャーとして招集される前は普通の高校生で、物語開始時は卒業間近であったがシンケンジャーとしての責務のために卒業式には出られておらず、シンケンジャーに入った直後に卒業している。メンバーの中で特に現代っ子気質で、ゲームと買い食いを好む。裏表のない陽気な性格で、短気によりトラブルを起こすことも多いが、自分の非は素直に認めることができる[出典 5]。
父の蔵人からは志葉家への忠義や侍の心得は最低限しか教わっていなかったため「殿様と家臣」という主従関係を汲み取ることができず、修行にも不真面目で年長のメンバーや彦馬からはあきれられたり、叱責されたりすることが多い。また、結成当初は殿様として丈瑠を受け入れられなかったが、自身と丈瑠の気持ちと実力の差を目の当たりにし「いつか丈瑠を超える」という目標と認めるようになる。その後一人で特訓を重ね、彦馬のアドバイスによって自分らしい戦い方に目覚める。
考え方を改めてからも丈瑠の名を呼び捨てにする姿勢は崩していないが、丈瑠に対する仲間意識は強く「家臣になってもいいと思ったのは丈瑠だけ」と丈瑠以外の当主を認める気はなく、薫との共闘にも真っ先に異議を申し立てた。考えの異なる流ノ介と対立していた時期もあったがともに戦っていく中で互いに認め合うようになり、強い信頼を築いた。
母親とは幼いころに死に別れているが、彼の名は「“千”の“明り”」で「明るい子になるよう」との母の願いによりつけられたものである。
モヂカラ500枚書き取りの課題に「五百枚」と書いて提出したり、戦いにおいて敵の能力を逆手に取った攻撃をするなど、良くも悪くも発想の柔軟さはメンバーから一目置かれている。また、父親譲りの鋭い勘も持っており、第二十七幕ではアベコンベの行動を察して丈瑠を守り、『帰ってきた』では自分たちの世界の異変をいち早く察知する。
戦いの後、再び大学を受験し直すことになったようであり、丈瑠には「追い越すのは次に会った時だ」と言い残して去る。

### 花織 ことは(はなおり ことは) / シンケンイエロー

土のモヂカラを受け継いだ女侍。
京都の山村で育ち、京都弁を話す。以前は地元で家業の竹細工作りをしていたが、体の弱い姉のみつばの代わりにシンケンイエローになる。招集前は全く田舎から出ていない。
純粋で優しい性格の持ち主で、侍の使命に一生懸命。丈瑠のことを「殿様」と呼び慕うほか、流ノ介を「流さん」と、源太を「源さん」と呼ぶなど、年代の近い千明を除く他の仲間を呼ぶ際にも敬称を用いている。その反面、度を超えた天然ボケで良くも悪くも空気が読めないところがあり、同様の気質を持つ流ノ介とは馬が合う。姉から教わった笛と剣術が得意。特に剣術は当初は千明を圧倒し、太刀筋を彦馬から絶賛されるほどだが、それ以外のことは極めて不器用で、他人のことを思ってしたことでも返って迷惑をかけてしまうことも。しかし、幼少時にいじめられていた経験と姉を思う気持ちにより強い忍耐力を持っている。
茉子に憧れているが、彼女の料理の下手さ加減には気付いていない。メンバーからは妹のようにかわいがられている。その一方で、自分は他のメンバーより年下で頼りないため、自分より姉がシンケンイエローになった方がメンバーの役に立てたのではないかと思い悩んでいた時もあったが、彦馬がかけた励ましの言葉により、姉の代わりではなく、自分にしかなれないシンケンイエローを目指すと心に決める。
茉子の反省前の料理を「茉子が作ってくれたものだからおいしいに決まっている」と認識していたり、源太の寿司も普段は曖昧な評価だったが、源太がカレーをやめ寿司屋として精進すると決めた際には笑顔を見せるなど、味覚は鈍い。苦手なものは納豆のにおい。
戦いを終えた後は、姉の待つ京都の実家へ帰る。

### 梅盛 源太(うめもり げんた) / シンケンゴールド

第十七幕から登場。光の電子モヂカラを用いる侍で、6人目のシンケンジャー。
本業はゴールド寿司という屋台寿司屋を営む寿司職人[出典 8]。
元々は志葉家の近所にあった寿司屋の息子で、丈瑠とは幼馴染。幼い時から侍になるのが夢であったが、十数年前に家業が傾いて実家の店が潰れ、家族全員で夜逃げをして以来音信不通となる。小さいころに丈瑠からもらった烏賊折神や彼から教えられたことだけを元にモヂカラを解析し、電子メールの文字による電子モヂカラとして発展させスシチェンジャーを始めとした武装も独力で開発したほか、折神を「文字のプログラムのようなもの」と解釈して活用するなど、モヂカラの扱いに於いては他の侍とは別の方向で異色の才能を見せ、インロウマルやダイゴヨウの開発なども彼の功績によるものが大きい。
かなりのお調子者かつ目立ちたがり屋で、流ノ介とともにシンケンジャーの良きムードメーカーとなっている。
握る寿司はまずくはないが取り立ててうまくもない至って普通の味であり、作中にてまともにそれを気に入ったのは十臓とことは、ガイアークのヨゴシュタイン、キタネイダス、ケガレシアのみ。しかし、第三十六幕にて本人曰く、生まれて初めて作ったというカレーはなぜか抜群においしく、テレビ番組で取り上げられるほどの好評を得て(本意ではないが)専門店を出しかけるまでに至る。
性格は豪快で江戸っ子口調でありながら、その実は文武ともに天賦の才を持っており、変身前でも重い屋台を引きながら高速で長距離を走るなど体力も並外れている。変身前には、牽制としてわりばしの形状の手裏剣(刀子)や、頭突きも使用する。
6人目のシンケンジャーとして仲間たちに認められてはいるが、梅盛家は侍の家系ではなく志葉家の家臣でもないため、正式に侍としての教育を受けてはおらず、他の侍たちが読める志葉家に伝わる古文書を読むことはできない。また、他の侍たちが志葉家に住み込んでいるのに対し、普段は屋台を引きながら別行動をとっている。こういった経緯を持つため、丹波には当初は特に軽蔑された。本人はあくまで丈瑠個人との幼いころからの約束である友情に基づいて戦っているため、薫登場後の丈瑠が参加していない集団戦闘には参加しなかったが、薫の気持ちを知ってからは彼女と協力して戦う。戦闘に参加しなかったのは、本人の薫と丹波への反発もあるが、丹波が源太のことを侍と認めておらず、シンケンジャーの一員であることを拒んだためでもあった。
千明からは「源ちゃん」、ことはからは「源さん」、ダイゴヨウからは「親分」、十臓からは「寿司屋」と呼ばれている。また、丈瑠との再会後も彼のことは子供時代と変わらずに「タケちゃん」と呼ぶ。
外道衆との戦いの後、修行のためにダイゴヨウを連れてフランスへと旅立つ。
"""
from sudachipy import tokenizer
from sudachipy import dictionary
from pprint import pprint

tokenizer_obj = dictionary.Dictionary(dict="full").create()
mode = tokenizer.Tokenizer.SplitMode.A

tokens = tokenizer_obj.tokenize(text, mode)
tokens_array = []

for t in tokens:
    if (t.surface(), t.part_of_speech(), t.normalized_form(), t.dictionary_form(), t.reading_form())  in tokens_array:
        next
    else:
        tokens_array.append((t.surface(), t.part_of_speech(), t.normalized_form(), t.dictionary_form(), t.reading_form()))
    
pprint(tokens_array)

結果

[
 ('\n', ('空白', '*', '*', '*', '*', '*'), '\n', '\n', '\n'),
 ('#', ('補助記号', '一般', '*', '*', '*', '*'), '#', '#', 'キゴウ'),
 (' ', ('空白', '*', '*', '*', '*', '*'), ' ', ' ', 'キゴウ'),
 ('侍', ('名詞', '普通名詞', '一般', '*', '*', '*'), '侍', '侍', 'サムライ'),
 ('戦隊', ('名詞', '普通名詞', '一般', '*', '*', '*'), '戦隊', '戦隊', 'センタイ'),
 ('シンケン', ('名詞', '普通名詞', '形状詞可能', '*', '*', '*'), '真剣', 'シンケン', 'シンケン'),
 ('ジャー', ('名詞', '普通名詞', '一般', '*', '*', '*'), 'ジャー', 'ジャー', 'ジャー'),
 ('\n\n', ('空白', '*', '*', '*', '*', '*'), '\n\n', '\n\n', '\n\n'),
 ('あらすじ', ('名詞', '普通名詞', '一般', '*', '*', '*'), '粗筋', 'あらすじ', 'アラスジ'),
 ('この世', ('名詞', '普通名詞', '一般', '*', '*', '*'), '此の世', 'この世', 'コノヨ'),
 ('と', ('助詞', '格助詞', '*', '*', '*', '*'), 'と', 'と', 'ト'),
 ('あの世', ('名詞', '普通名詞', '一般', '*', '*', '*'), '彼の世', 'あの世', 'アノヨ'),
 ('の', ('助詞', '格助詞', '*', '*', '*', '*'), 'の', 'の', 'ノ'),
 ('狭間', ('名詞', '普通名詞', '一般', '*', '*', '*'), '狭間', '狭間', 'ハザマ'),
 ('を', ('助詞', '格助詞', '*', '*', '*', '*'), 'を', 'を', 'ヲ'),
 ('流れる', ('動詞', '一般', '*', '*', '下一段-ラ行', '連体形-一般'), '流れる', '流れる', 'ナガレル'),
 ('三途', ('名詞', '普通名詞', '一般', '*', '*', '*'), '三途', '三途', 'サンズ'),
 ('川', ('名詞', '普通名詞', '一般', '*', '*', '*'), '川', '川', 'カワ'),
 ('に', ('助詞', '格助詞', '*', '*', '*', '*'), 'に', 'に', 'ニ'),
 ('棲む', ('動詞', '一般', '*', '*', '五段-マ行', '連体形-一般'), '住む', '棲む', 'スム'),
 ('妖怪', ('名詞', '普通名詞', '一般', '*', '*', '*'), '妖怪', '妖怪', 'ヨウカイ'),
 ('外道', ('名詞', '普通名詞', '一般', '*', '*', '*'), '外道', '外道', 'ゲドウ'),
 ('衆', ('接尾辞', '名詞的', '一般', '*', '*', '*'), '衆', '衆', 'シュウ'),
 ('。', ('補助記号', '句点', '*', '*', '*', '*'), '。', '。', '。'),
 ('は', ('助詞', '係助詞', '*', '*', '*', '*'), 'は', 'は', 'ハ'),
 ('遥か', ('形状詞', '一般', '*', '*', '*', '*'), '遥か', '遥か', 'ハルカ'),
 ('な', ('助動詞', '*', '*', '*', '助動詞-ダ', '連体形-一般'), 'だ', 'だ', 'ナ'),
 ('昔', ('名詞', '普通名詞', '副詞可能', '*', '*', '*'), '昔', '昔', 'ムカシ'),
 ('から', ('助詞', '格助詞', '*', '*', '*', '*'), 'から', 'から', 'カラ'),
 ('人間', ('名詞', '普通名詞', '一般', '*', '*', '*'), '人間', '人間', 'ニンゲン'),
 ('たち', ('接尾辞', '名詞的', '一般', '*', '*', '*'), '達', 'たち', 'タチ'),
 ('襲い', ('動詞', '一般', '*', '*', '五段-ワア行', '連用形-一般'), '襲う', '襲う', 'オソイ'),
 ('苦しめ', ('動詞', '一般', '*', '*', '下一段-マ行', '連用形-一般'), '苦しめる', '苦しめる', 'クルシメ'),
 ('て', ('助詞', '接続助詞', '*', '*', '*', '*'), 'て', 'て', 'テ'),
 ('き', ('動詞', '非自立可能', '*', '*', 'カ行変格', '連用形-一般'), '来る', 'くる', 'キ'),
 ('た', ('助動詞', '*', '*', '*', '助動詞-タ', '終止形-一般'), 'た', 'た', 'タ'),
 ('が', ('助詞', '接続助詞', '*', '*', '*', '*'), 'が', 'が', 'ガ'),
 ('、', ('補助記号', '読点', '*', '*', '*', '*'), '、', '、', '、'),
 ('300', ('名詞', '数詞', '*', '*', '*', '*'), '300', '300', 'サンレイレイ'),
 ('年', ('名詞', '普通名詞', '助数詞可能', '*', '*', '*'), '年', '年', 'ネン'),
 ('前', ('名詞', '普通名詞', '副詞可能', '*', '*', '*'), '前', '前', 'マエ'),
 ('(', ('補助記号', '括弧開', '*', '*', '*', '*'), '(', '(', 'キゴウ'),
...
]

ということで固有の表現を辞書化する。

kun432kun432

この辺は固有名詞が登録されていると良さそう。

  • シンケンレッド
  • シンケンブルー
  • シンケンピンク
  • シンケングリーン
  • シンケンイエロー
  • シンケンゴールド
  • 外道衆
  • 侍戦隊
  • シンケンジャー
  • 折神

ユーザー辞書ソースのフォーマットにあわせてCSVを作成する。フォーマットは以下。

https://github.com/WorksApplications/Sudachi/blob/develop/docs/user_dict.md

0 見出し (TRIE 用)
1 左連接ID
2 右連接ID
3 コスト
4 見出し (解析結果表示用)
5 品詞1
6 品詞2
7 品詞3
8 品詞4
9 品詞 (活用型)
10 品詞 (活用形)
11 読み
12 正規化表記
13 辞書形ID
14 分割タイプ
15 A単位分割情報
16 B単位分割情報
17 ※未使用
  • "0 見出し (TRIE 用)"は小文字化+NFKC Unicode正規化。Unicode正規化はこのあたりを参照。
  • "1 左連接ID"、"2 右連接ID"、"5 品詞1"、"6 品詞2"、"7 品詞3"、"8 品詞4"、"9 品詞 (活用形)"、"10 品詞
    (活用形)"については、unidic-mecabが置いてあるOSDNが不安定な状態なので以下からアーカイブを取得して確認した。
  • "3 コスト"は肌感がわからないけど、とりあえずドキュメントにしたがって、あと固有名詞なので優先度高くてもいいだろう、ということで"5000"でやってみる。
  • "13 辞書形ID"は固有名詞は活用系がないのでやらない
  • "14 分割タイプ"、"15 A単位分割情報"、"16 B単位分割情報"については今回はやらない。

こんな感じで。

import pandas as pd
import unicodedata

def normalize_text(text):
    return unicodedata.normalize("NFKC", text.lower())

# 辞書登録したい単語と読みのセット
nouns = [
    ["シンケンレッド", "シンケンレッド"],
    ["シンケンブルー", "シンケンブルー"],
    ["シンケンピンク","シンケンピンク"],
    ["シンケングリーン","シンケングリーン"],
    ["シンケンイエロー","シンケンイエロー"],
    ["シンケンゴールド","シンケンゴールド"],
    ["外道衆","ゲドウシュウ"],
    ["侍戦隊","サムライセンタイ"],
    ["シンケンジャー","シンケンジャー"],
    ["折神","オリガミ"],
]

rows = []
for item in nouns:
    row = {
        "見出し": normalize_text(item[0]),
        "左連接ID": 4786,
        "右連接ID": 4786,
        "コスト": 5000,
        "見出し (解析結果表示用)": normalize_text(item[0]),
        "品詞1": "名詞",
        "品詞2": "固有名詞",
        "品詞3": "一般",
        "品詞4": "*",
        "品詞5": "*",
        "品詞6": "*",
        "読み": item[1],
        "正規化表記": normalize_text(item[0]),
        "辞書形ID": "*",
        "分割タイプ": "*",
        "A単位分割情報": "*",
        "B単位分割情報": "*",
        "※未使用": "*"
    }
    rows.append(row)

df = pd.DataFrame(rows)
df

CSVに出力する

df.to_csv('user_dic.csv', index=False, header=False)

辞書を作成する

import sys
import os

dist_package = ""
for p in sys.path:
    if "dist-packages" in os.path.basename(p):
        dist_package = p
        break

print(dist_package)
 
!sudachipy ubuild -s {dist_package}/sudachidict_core/resources/system.dic -o user.dic user_dic.csv 

こんな感じで出来たっぽい

/usr/local/lib/python3.10/dist-packages
/content/user_dic.csv -> 10 in 0.00 sec
validate -> 10 in 0.00 sec
pos_table -> 2 in 0.00 sec
conn_matrix -> 6 in 0.00 sec
trie -> 1028 in 0.00 sec
word_id table -> 54 in 0.00 sec
word_params -> 64 in 0.00 sec
wordinfo_offsets -> 40 in 0.00 sec
wordinfos (copy only) -> 296 in 0.00 sec

とりあえずコマンドラインで辞書を使ってみる。

まず辞書を使わない状態

!echo "シンケンジャー" | sudachipy tokenize -m C
シンケン	名詞,普通名詞,形状詞可能,*,*,*	真剣
ジャー	名詞,普通名詞,一般,*,*,*	ジャー

辞書を使うようにJSONファイルを書き換える。関連するファイルも含めて一旦コピー。

!cp /usr/local/lib/python3.10/dist-packages/sudachipy/resources/{sudachi.json,char.def,unk.def} .

userDictを追加する。

sudachi.json
{
    "userDict": ["user.dic"],
    "systemDict" : null,
    "characterDefinitionFile" : "char.def",
    "inputTextPlugin" : [
        { "class" : "com.worksap.nlp.sudachi.DefaultInputTextPlugin" },
        { "class" : "com.worksap.nlp.sudachi.ProlongedSoundMarkPlugin",
          "prolongedSoundMarks": ["ー", "-", "⁓", "〜", "〰"],
          "replacementSymbol": "ー"},
	    { "class": "com.worksap.nlp.sudachi.IgnoreYomiganaPlugin",
          "leftBrackets": ["(", "("],
          "rightBrackets": [")", ")"],
          "maxYomiganaLength": 4}
    ],
    "oovProviderPlugin" : [
        { "class" : "com.worksap.nlp.sudachi.MeCabOovPlugin",
          "charDef" : "char.def",
          "unkDef" : "unk.def" },
        { "class" : "com.worksap.nlp.sudachi.SimpleOovPlugin",
          "oovPOS" : [ "補助記号", "一般", "*", "*", "*", "*" ],
          "leftId" : 5968,
          "rightId" : 5968,
          "cost" : 3857 }
    ],
    "pathRewritePlugin" : [
        { "class" : "com.worksap.nlp.sudachi.JoinNumericPlugin",
          "enableNormalize" : true },
        { "class" : "com.worksap.nlp.sudachi.JoinKatakanaOovPlugin",
          "oovPOS" : [ "名詞", "普通名詞", "一般", "*", "*", "*" ],
          "minLength" : 3
        }
    ]
}

辞書を使って試してみる。

!echo "シンケンジャー" | sudachipy tokenize -m C -r sudachi.json

ちゃんと認識している

シンケンジャー	名詞,固有名詞,一般,*,*,*	シンケンジャー
このスクラップは5ヶ月前にクローズされました