[{"data":1,"prerenderedAt":1132},["ShallowReactive",2],{"content-\u002Fcontents\u002Fginza-docker":3,"surroundPost-\u002Fcontents\u002Fginza-docker":1123},{"id":4,"title":5,"body":6,"createdAt":1110,"description":1111,"draft":1112,"extension":1113,"meta":1114,"navigation":983,"path":1115,"seo":1116,"stem":1117,"tags":1118,"thumbnail":1121,"updatedAt":1110,"__hash__":1122},"contents\u002Fcontents\u002Fginza-docker.md","DockerでGiNZAの環境構築をしてみた|SudachPyのユーザー辞書登録方法も紹介",{"type":7,"value":8,"toc":1102},"minimark",[9,13,16,19,36,41,51,72,75,105,112,297,301,304,307,315,318,433,436,439,448,455,461,487,497,500,682,688,693,704,707,710,714,717,720,723,726,735,738,750,753,756,762,765,768,790,797,803,861,868,871,874,877,881,884,893,902,953,960,963,966,969,1070,1080,1083,1086,1089,1092,1095,1098],[10,11,12],"p",{},"本記事は、自然言語処理で用いられる GiNZA の環境構築を Docker で作成したまとめです。以前書いた記事で Twitter のツイート収集について書いきました。この記事はその続編で自然言語処理を行うための環境構築に関する記事です。",[10,14,15],{},"さらに今回の環境構築では新しく vscode の remote container を使ってみました。",[10,17,18],{},"以下はこれまで Twitter 解析を行うためにについて書いた記事です。",[20,21,22,30],"ul",{},[23,24,25],"li",{},[26,27,29],"a",{"href":28},"about-twitter-api","Python と Twitter API を利用したツイート収集方法",[23,31,32],{},[26,33,35],{"href":34},"aws-lambda-upload-docker","AWS Lambda を使ったツイート収集システム",[37,38,40],"h2",{"id":39},"ginza-で自然言語処理","GiNZA で自然言語処理",[10,42,43,44,50],{},"いろいろやり方はあるのですが、この記事では自然言語処理のライブラリである",[26,45,49],{"href":46,"rel":47},"https:\u002F\u002Fmegagonlabs.github.io\u002Fginza\u002F#ginza-311",[48],"nofollow","GiNZA","を利用します。日本語の形態素解析器は MeCab や Janome がありますが、新しいものを使いたかったので GiNZA を使ってみます。",[10,52,53,54,59,60,65,66,71],{},"GiNZA についての概要は",[26,55,58],{"href":56,"rel":57},"https:\u002F\u002Fwww.recruit.co.jp\u002Fnewsroom\u002F2019\u002F0402_18331.html",[48],"こちら","に記載されています。自然言語処理のフレームワークである",[26,61,64],{"href":62,"rel":63},"https:\u002F\u002Fspacy.io\u002F",[48],"spaCy","と形態素解析器の",[26,67,70],{"href":68,"rel":69},"https:\u002F\u002Fgithub.com\u002FWorksApplications\u002FSudachiPy",[48],"SudachiPy","が取り入れられています。",[10,73,74],{},"GiNZA は pip で簡単にインストールできます。",[76,77,82],"pre",{"className":78,"code":79,"language":80,"meta":81,"style":81},"language-bash shiki shiki-themes github-dark","pip install -U ginza\n","bash","",[83,84,85],"code",{"__ignoreMap":81},[86,87,90,94,98,102],"span",{"class":88,"line":89},"line",1,[86,91,93],{"class":92},"svObZ","pip",[86,95,97],{"class":96},"sU2Wk"," install",[86,99,101],{"class":100},"sDLfK"," -U",[86,103,104],{"class":96}," ginza\n",[10,106,107,108,111],{},"インストールするとコマンドラインで",[83,109,110],{},"ginza","コマンドが使えるようになります。試しにやってみるとこんな感じになります。",[76,113,115],{"className":78,"code":114,"language":80,"meta":81,"style":81},"ginza\n自然言語処理\n# text = 自然言語処理\n1       自然    自然    NOUN    名詞-普通名詞-一般      _       3       compound        _       BunsetuBILabel=B|BunsetuPositionType=CONT|SpaceAfter=No|NP_B\n2       言語    言語    NOUN    名詞-普通名詞-一般      _       3       compound        _       BunsetuBILabel=I|BunsetuPositionType=CONT|SpaceAfter=No|NP_I\n3       処理    処理    NOUN    名詞-普通名詞-サ変可能  _       0       root    _       BunsetuBILabel=I|BunsetuPositionType=ROOT|SpaceAfter=No|NP_I\n",[83,116,117,122,128,135,197,245],{"__ignoreMap":81},[86,118,119],{"class":88,"line":89},[86,120,121],{"class":92},"ginza\n",[86,123,125],{"class":88,"line":124},2,[86,126,127],{"class":92},"自然言語処理\n",[86,129,131],{"class":88,"line":130},3,[86,132,134],{"class":133},"sAwPA","# text = 自然言語処理\n",[86,136,138,141,144,147,150,153,156,159,162,165,168,172,176,179,182,184,187,189,192,194],{"class":88,"line":137},4,[86,139,140],{"class":92},"1",[86,142,143],{"class":96},"       自然",[86,145,146],{"class":96},"    自然",[86,148,149],{"class":96},"    NOUN",[86,151,152],{"class":96},"    名詞-普通名詞-一般",[86,154,155],{"class":96},"      _",[86,157,158],{"class":100},"       3",[86,160,161],{"class":96},"       compound",[86,163,164],{"class":96},"        _",[86,166,167],{"class":96},"       BunsetuBILabel=B",[86,169,171],{"class":170},"snl16","|",[86,173,175],{"class":174},"s95oV","BunsetuPositionType",[86,177,178],{"class":170},"=",[86,180,181],{"class":96},"CONT",[86,183,171],{"class":170},[86,185,186],{"class":174},"SpaceAfter",[86,188,178],{"class":170},[86,190,191],{"class":96},"No",[86,193,171],{"class":170},[86,195,196],{"class":92},"NP_B\n",[86,198,200,203,206,209,211,213,215,217,219,221,224,226,228,230,232,234,236,238,240,242],{"class":88,"line":199},5,[86,201,202],{"class":92},"2",[86,204,205],{"class":96},"       言語",[86,207,208],{"class":96},"    言語",[86,210,149],{"class":96},[86,212,152],{"class":96},[86,214,155],{"class":96},[86,216,158],{"class":100},[86,218,161],{"class":96},[86,220,164],{"class":96},[86,222,223],{"class":96},"       BunsetuBILabel=I",[86,225,171],{"class":170},[86,227,175],{"class":174},[86,229,178],{"class":170},[86,231,181],{"class":96},[86,233,171],{"class":170},[86,235,186],{"class":174},[86,237,178],{"class":170},[86,239,191],{"class":96},[86,241,171],{"class":170},[86,243,244],{"class":92},"NP_I\n",[86,246,248,251,254,257,259,262,265,268,271,274,276,278,280,282,285,287,289,291,293,295],{"class":88,"line":247},6,[86,249,250],{"class":92},"3",[86,252,253],{"class":96},"       処理",[86,255,256],{"class":96},"    処理",[86,258,149],{"class":96},[86,260,261],{"class":96},"    名詞-普通名詞-サ変可能",[86,263,264],{"class":96},"  _",[86,266,267],{"class":100},"       0",[86,269,270],{"class":96},"       root",[86,272,273],{"class":96},"    _",[86,275,223],{"class":96},[86,277,171],{"class":170},[86,279,175],{"class":174},[86,281,178],{"class":170},[86,283,284],{"class":96},"ROOT",[86,286,171],{"class":170},[86,288,186],{"class":174},[86,290,178],{"class":170},[86,292,191],{"class":96},[86,294,171],{"class":170},[86,296,244],{"class":92},[37,298,300],{"id":299},"docker-で-ginza-の環境構築","Docker で GiNZA の環境構築",[10,302,303],{},"今回も Docker で環境をを構築していきます。",[10,305,306],{},"以下が Dockerfile です。pip でいれてる GiNZA 以外の python パッケージは Twitter 解析用のやつです。",[76,308,313],{"className":309,"code":311,"language":312},[310],"language-text","# ベースとなるDockerイメージ指定\nFROM python:3.7.4\n\n# python package\nRUN pip install --upgrade pip\nRUN pip install jupyter requests tweepy pandas sklearn pep8 autopep8 wordcloud emoji neologdn\nRUN pip install -U ginza\n\n# コンテナログイン時のディレクトリ指定\nWORKDIR \u002Fwork\u002F\n\nCMD [\"\u002Fbin\u002Fbash\"]\n","text",[83,314,311],{"__ignoreMap":81},[10,316,317],{},"そしてこちらが docker-compose.yml です。",[76,319,323],{"className":320,"code":321,"language":322,"meta":81,"style":81},"language-yml shiki shiki-themes github-dark","version: '3' # composeファイルのバーション指定\nservices:\n  app: # service名\n    build: . # ビルドに使用するDockerfileがあるディレクトリ指定\n    tty: true # コンテナの起動永続化\n    ports:\n      - '8888:8888' # \"ホストのポート:コンテナのポート\"\n    volumes:\n      - ..:\u002Fwork\u002F # マウントディレクトリ指定\n    command: \u002Fbin\u002Fsh -c \"while sleep 1000; do :; done\"\n","yml",[83,324,325,340,348,358,371,384,391,403,411,422],{"__ignoreMap":81},[86,326,327,331,334,337],{"class":88,"line":89},[86,328,330],{"class":329},"s4JwU","version",[86,332,333],{"class":174},": ",[86,335,336],{"class":96},"'3'",[86,338,339],{"class":133}," # composeファイルのバーション指定\n",[86,341,342,345],{"class":88,"line":124},[86,343,344],{"class":329},"services",[86,346,347],{"class":174},":\n",[86,349,350,353,355],{"class":88,"line":130},[86,351,352],{"class":329},"  app",[86,354,333],{"class":174},[86,356,357],{"class":133},"# service名\n",[86,359,360,363,365,368],{"class":88,"line":137},[86,361,362],{"class":329},"    build",[86,364,333],{"class":174},[86,366,367],{"class":100},".",[86,369,370],{"class":133}," # ビルドに使用するDockerfileがあるディレクトリ指定\n",[86,372,373,376,378,381],{"class":88,"line":199},[86,374,375],{"class":329},"    tty",[86,377,333],{"class":174},[86,379,380],{"class":100},"true",[86,382,383],{"class":133}," # コンテナの起動永続化\n",[86,385,386,389],{"class":88,"line":247},[86,387,388],{"class":329},"    ports",[86,390,347],{"class":174},[86,392,394,397,400],{"class":88,"line":393},7,[86,395,396],{"class":174},"      - ",[86,398,399],{"class":96},"'8888:8888'",[86,401,402],{"class":133}," # \"ホストのポート:コンテナのポート\"\n",[86,404,406,409],{"class":88,"line":405},8,[86,407,408],{"class":329},"    volumes",[86,410,347],{"class":174},[86,412,414,416,419],{"class":88,"line":413},9,[86,415,396],{"class":174},[86,417,418],{"class":96},"..:\u002Fwork\u002F",[86,420,421],{"class":133}," # マウントディレクトリ指定\n",[86,423,425,428,430],{"class":88,"line":424},10,[86,426,427],{"class":329},"    command",[86,429,333],{"class":174},[86,431,432],{"class":96},"\u002Fbin\u002Fsh -c \"while sleep 1000; do :; done\"\n",[10,434,435],{},"いつもならここで終わりですが、今回はさらに vscode の remote container を使っていきます。",[10,437,438],{},"公式のドキュメントは以下になります。",[20,440,441],{},[23,442,443],{},[26,444,447],{"href":445,"rel":446},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fremote\u002Fremote-overview",[48],"VS Code Remote Development",[10,449,450,451,454],{},"まず作業フォルダに",[83,452,453],{},".devcontainer","フォルダを用意します。",[10,456,457,458,460],{},"この",[83,459,453],{},"の中に以下の２つを用意します。",[76,462,464],{"className":78,"code":463,"language":80,"meta":81,"style":81},".\n├── devcontainer.json\n└── settings.vscode.json\n",[83,465,466,471,479],{"__ignoreMap":81},[86,467,468],{"class":88,"line":89},[86,469,470],{"class":100},".\n",[86,472,473,476],{"class":88,"line":124},[86,474,475],{"class":92},"├──",[86,477,478],{"class":96}," devcontainer.json\n",[86,480,481,484],{"class":88,"line":130},[86,482,483],{"class":92},"└──",[86,485,486],{"class":96}," settings.vscode.json\n",[10,488,489,492,493,496],{},[83,490,491],{},"settings.vscode.json","は vscode のタブサイズやリンターの設定を書くもので必須ではありません。\n大事なのは",[83,494,495],{},"devcontainer.json","です。このファイルにいろいろ設定を書きます。",[10,498,499],{},"今回は以下のような設定を記述しました。",[76,501,505],{"className":502,"code":503,"language":504,"meta":81,"style":81},"language-js shiki shiki-themes github-dark","{\n    \"name\": \"twitter_analysis\",\n    \u002F\u002Fdocker-compose.ymlのパス\n    \"dockerComposeFile\": [\n        \"..\u002Fdocker\u002Fdocker-compose.yml\"\n    ],\n    \u002F\u002Fdocker-compose.ymlのservice名\n    \"service\": \"app\",\n    \u002F\u002F起動時のディレクトリ\n    \"workspaceFolder\": \"\u002Fwork\u002F\",\n    \u002F\u002Fデフォルトのsettings.json\n    \"settings\": {\n        \"terminal.integrated.shell.linux\": \"\u002Fbin\u002Fbash\",\n    },\n    \u002F\u002Fリモートコンテナのvscodeで使用するextension\n    \"extensions\": [\n        \"ms-python.python\",\n        \"ionutvmi.path-autocomplete\",\n        \"hiro-sun.vscode-emacs\"\n    ],\n    \u002F\u002Fコンテナ作成後に実行するコマンド\n    \"postCreateCommand\": \"apt-get update && apt-get install -y git && sh \u002Fwork\u002Fdocker\u002Finit\u002Finit.sh\",\n}\n","js",[83,506,507,512,525,530,538,543,548,553,565,570,582,588,597,610,616,622,630,638,646,652,657,663,676],{"__ignoreMap":81},[86,508,509],{"class":88,"line":89},[86,510,511],{"class":174},"{\n",[86,513,514,517,519,522],{"class":88,"line":124},[86,515,516],{"class":96},"    \"name\"",[86,518,333],{"class":174},[86,520,521],{"class":96},"\"twitter_analysis\"",[86,523,524],{"class":174},",\n",[86,526,527],{"class":88,"line":130},[86,528,529],{"class":133},"    \u002F\u002Fdocker-compose.ymlのパス\n",[86,531,532,535],{"class":88,"line":137},[86,533,534],{"class":96},"    \"dockerComposeFile\"",[86,536,537],{"class":174},": [\n",[86,539,540],{"class":88,"line":199},[86,541,542],{"class":96},"        \"..\u002Fdocker\u002Fdocker-compose.yml\"\n",[86,544,545],{"class":88,"line":247},[86,546,547],{"class":174},"    ],\n",[86,549,550],{"class":88,"line":393},[86,551,552],{"class":133},"    \u002F\u002Fdocker-compose.ymlのservice名\n",[86,554,555,558,560,563],{"class":88,"line":405},[86,556,557],{"class":96},"    \"service\"",[86,559,333],{"class":174},[86,561,562],{"class":96},"\"app\"",[86,564,524],{"class":174},[86,566,567],{"class":88,"line":413},[86,568,569],{"class":133},"    \u002F\u002F起動時のディレクトリ\n",[86,571,572,575,577,580],{"class":88,"line":424},[86,573,574],{"class":96},"    \"workspaceFolder\"",[86,576,333],{"class":174},[86,578,579],{"class":96},"\"\u002Fwork\u002F\"",[86,581,524],{"class":174},[86,583,585],{"class":88,"line":584},11,[86,586,587],{"class":133},"    \u002F\u002Fデフォルトのsettings.json\n",[86,589,591,594],{"class":88,"line":590},12,[86,592,593],{"class":96},"    \"settings\"",[86,595,596],{"class":174},": {\n",[86,598,600,603,605,608],{"class":88,"line":599},13,[86,601,602],{"class":96},"        \"terminal.integrated.shell.linux\"",[86,604,333],{"class":174},[86,606,607],{"class":96},"\"\u002Fbin\u002Fbash\"",[86,609,524],{"class":174},[86,611,613],{"class":88,"line":612},14,[86,614,615],{"class":174},"    },\n",[86,617,619],{"class":88,"line":618},15,[86,620,621],{"class":133},"    \u002F\u002Fリモートコンテナのvscodeで使用するextension\n",[86,623,625,628],{"class":88,"line":624},16,[86,626,627],{"class":96},"    \"extensions\"",[86,629,537],{"class":174},[86,631,633,636],{"class":88,"line":632},17,[86,634,635],{"class":96},"        \"ms-python.python\"",[86,637,524],{"class":174},[86,639,641,644],{"class":88,"line":640},18,[86,642,643],{"class":96},"        \"ionutvmi.path-autocomplete\"",[86,645,524],{"class":174},[86,647,649],{"class":88,"line":648},19,[86,650,651],{"class":96},"        \"hiro-sun.vscode-emacs\"\n",[86,653,655],{"class":88,"line":654},20,[86,656,547],{"class":174},[86,658,660],{"class":88,"line":659},21,[86,661,662],{"class":133},"    \u002F\u002Fコンテナ作成後に実行するコマンド\n",[86,664,666,669,671,674],{"class":88,"line":665},22,[86,667,668],{"class":96},"    \"postCreateCommand\"",[86,670,333],{"class":174},[86,672,673],{"class":96},"\"apt-get update && apt-get install -y git && sh \u002Fwork\u002Fdocker\u002Finit\u002Finit.sh\"",[86,675,524],{"class":174},[86,677,679],{"class":88,"line":678},23,[86,680,681],{"class":174},"}\n",[10,683,684,685,687],{},"上記のファイルが",[83,686,453],{},"にある状態で vscode 左下の下記のボタンを押します。",[689,690],"img",{"alt":691,"img-src":692},"vscode remote container","\u002Fimg\u002Fginza-docker\u002Fpart1.png",[10,694,695,696,699,700,703],{},"するとプルダウンが現れるので、そこから",[83,697,698],{},"Remote-Containers: Open Folder in Container...","を選択し、",[83,701,702],{},".devcontainers","がある作業フォルダを選びます。",[10,705,706],{},"Docker の起動などの処理が終了すれば、Docker で定義した環境で vscode を開いているような状態になります！",[10,708,709],{},"上記設定でうまくいくはずですが、比較的新しい機能なので自分も完全に使いこなしているわけではありません。詳しいことは公式ドキュメントを参照してください。",[37,711,713],{"id":712},"sudachipy-でユーザー辞書登録","SudachiPy でユーザー辞書登録",[10,715,716],{},"辞書にない固有名詞を形態素解析で単語として認識してもらうには、ユーザー辞書を作成する必要があります。",[10,718,719],{},"商品名や映画タイトルなどの固有名詞はユーザー辞書登録を行わないと、形態素解析で意図しない形に分割されるので SNS の解析を行う際には必須です。",[10,721,722],{},"GiNZA の場合は SudachiPy のユーザー辞書登録の方法と同じようにできます。",[10,724,725],{},"公式のドキュメントは以下です。",[20,727,728],{},[23,729,730],{},[26,731,734],{"href":732,"rel":733},"https:\u002F\u002Fgithub.com\u002FWorksApplications\u002FSudachi\u002Fblob\u002Fdevelop\u002Fdocs\u002Fuser_dict.md",[48],"Sudachi のユーザー辞書作成方法",[10,736,737],{},"手順はこんな感じです。",[739,740,741,744,747],"ol",{},[23,742,743],{},"ユーザー辞書の作成",[23,745,746],{},"ユーザー辞書のビルド実行",[23,748,749],{},"sudachi.json にビルドしたファイルパスを記述",[10,751,752],{},"まず登録したい言葉を記述した CSV(または txt)ファイルを用意します。形式が決まっているのでそれにしたがって書いていきます。",[10,754,755],{},"例えば、「Google Home」と「魔女の宅急便」を登録したい場合は以下のように書きます。",[76,757,760],{"className":758,"code":759,"language":312},[310],"google home,4786,4786,3000,Google Home,名詞,固有名詞,一般,*,*,*,グーグルホーム,Google Home,*,*,*,*,*\n魔女の宅急便,4786,4786,3000,Google Home,名詞,固有名詞,一般,*,*,*,まじょのたっきゅうびん,魔女の宅急便,*,*,*,*,*\n",[83,761,759],{"__ignoreMap":81},[10,763,764],{},"英単語の場合は一番左の見出しは必ず小文字にしないときちんと登録されないので注意です。",[10,766,767],{},"次に作成したファイルをビルドします。",[76,769,771],{"className":78,"code":770,"language":80,"meta":81,"style":81},"sudachipy ubuild -s \u002Fusr\u002Flocal\u002Flib\u002Fpython3.7\u002Fsite-packages\u002Fja_ginza_dict\u002Fsudachidict\u002Fsystem.dic .\u002Fmy_dict.txt\n",[83,772,773],{"__ignoreMap":81},[86,774,775,778,781,784,787],{"class":88,"line":89},[86,776,777],{"class":92},"sudachipy",[86,779,780],{"class":96}," ubuild",[86,782,783],{"class":100}," -s",[86,785,786],{"class":96}," \u002Fusr\u002Flocal\u002Flib\u002Fpython3.7\u002Fsite-packages\u002Fja_ginza_dict\u002Fsudachidict\u002Fsystem.dic",[86,788,789],{"class":96}," .\u002Fmy_dict.txt\n",[10,791,792,793,796],{},"実行すると",[83,794,795],{},"user.dic","というファイルがカレントディレクトリに生成されてます。",[10,798,799,800,802],{},"最後に作成した",[83,801,795],{},"のパスを sudachi.json に書きます。",[76,804,806],{"className":502,"code":805,"language":504,"meta":81,"style":81},"{\n    \"systemDict\": \"system.dic\",\n    \"userDict\": [\n        \".\u002Fuser.dic\"\n    ],\n    \"characterDefinitionFile\": \"char.def\",\n    \u002F\u002F以下省略\n}\n",[83,807,808,812,824,831,836,840,852,857],{"__ignoreMap":81},[86,809,810],{"class":88,"line":89},[86,811,511],{"class":174},[86,813,814,817,819,822],{"class":88,"line":124},[86,815,816],{"class":96},"    \"systemDict\"",[86,818,333],{"class":174},[86,820,821],{"class":96},"\"system.dic\"",[86,823,524],{"class":174},[86,825,826,829],{"class":88,"line":130},[86,827,828],{"class":96},"    \"userDict\"",[86,830,537],{"class":174},[86,832,833],{"class":88,"line":137},[86,834,835],{"class":96},"        \".\u002Fuser.dic\"\n",[86,837,838],{"class":88,"line":199},[86,839,547],{"class":174},[86,841,842,845,847,850],{"class":88,"line":247},[86,843,844],{"class":96},"    \"characterDefinitionFile\"",[86,846,333],{"class":174},[86,848,849],{"class":96},"\"char.def\"",[86,851,524],{"class":174},[86,853,854],{"class":88,"line":393},[86,855,856],{"class":133},"    \u002F\u002F以下省略\n",[86,858,859],{"class":88,"line":405},[86,860,681],{"class":174},[10,862,863,864,867],{},"ちなみに sudachi.json は",[83,865,866],{},"\u002Fusr\u002Flocal\u002Flib\u002Fpython3.7\u002Fsite-packages\u002Fja_ginza_dict\u002Fsudachidict\u002F","にあります。",[10,869,870],{},"以上でユーザー辞書登録は完了です。",[10,872,873],{},"私の場合は毎回この作業を行う面倒なので Remote Container 起動時にスクリプトで実行するようにしてます。",[10,875,876],{},"ここまでで環境構築完了です。",[37,878,880],{"id":879},"wordcloud-用の日本語フォント導入","WordCloud 用の日本語フォント導入",[10,882,883],{},"WordCloud を使いたかったので今回の環境に日本語フォントを入れます。",[10,885,886,887,892],{},"作業フォルダに",[26,888,891],{"href":889,"rel":890},"https:\u002F\u002Fwww.google.com\u002Fget\u002Fnoto\u002F#sans-jpan",[48],"Noto Sans CJK JP","をダウンロードしておきます。",[10,894,895,896,901],{},"ダウンロードできたら",[26,897,900],{"href":898,"rel":899},"https:\u002F\u002Fwww.google.com\u002Fget\u002Fnoto\u002Fhelp\u002Finstall\u002F",[48],"公式の手順","の Linux のやり方を参考に以下のコマンドを順次実行します。",[76,903,905],{"className":78,"code":904,"language":80,"meta":81,"style":81},"unzip NotoSansCJKjp-hinted.zip -y\nmkdir -p ~\u002F.fonts\ncp *otf ~\u002F.fonts\nfc-cache -f -v\n",[83,906,907,918,929,942],{"__ignoreMap":81},[86,908,909,912,915],{"class":88,"line":89},[86,910,911],{"class":92},"unzip",[86,913,914],{"class":96}," NotoSansCJKjp-hinted.zip",[86,916,917],{"class":100}," -y\n",[86,919,920,923,926],{"class":88,"line":124},[86,921,922],{"class":92},"mkdir",[86,924,925],{"class":100}," -p",[86,927,928],{"class":96}," ~\u002F.fonts\n",[86,930,931,934,937,940],{"class":88,"line":130},[86,932,933],{"class":92},"cp",[86,935,936],{"class":100}," *",[86,938,939],{"class":96},"otf",[86,941,928],{"class":96},[86,943,944,947,950],{"class":88,"line":137},[86,945,946],{"class":92},"fc-cache",[86,948,949],{"class":100}," -f",[86,951,952],{"class":100}," -v\n",[10,954,955,956,959],{},"これで WordCloud を使用するときののフォントパスを",[83,957,958],{},"font_path=\"\u002Froot\u002F.fonts\u002FNotoSansCJKjp-Regular.otf\"","とすれば日本語でも文字化けせずに使用できます。",[37,961,962],{"id":962},"起動スクリプト作成",[10,964,965],{},"Docker 立ち上げ後に行いたい処理がいろいろあるのでスクリプトにまとめました。",[10,967,968],{},"非常に簡単なものですが、こちらが書いたスクリプトです。",[76,970,972],{"className":78,"code":971,"language":80,"meta":81,"style":81},"#!\u002Fbin\u002Fbash\n\ncd \u002Fwork\u002Fdocker\u002Finit\ncp sudachi.json \u002Fusr\u002Flocal\u002Flib\u002Fpython3.7\u002Fsite-packages\u002Fja_ginza_dict\u002Fsudachidict\u002F\nsudachipy ubuild -s \u002Fusr\u002Flocal\u002Flib\u002Fpython3.7\u002Fsite-packages\u002Fja_ginza_dict\u002Fsudachidict\u002Fsystem.dic .\u002Fmy_dict.txt\nmv user.dic \u002Fusr\u002Flocal\u002Flib\u002Fpython3.7\u002Fsite-packages\u002Fja_ginza_dict\u002Fsudachidict\u002F\n\ncd fonts\nunzip NotoSansCJKjp-hinted.zip -y\nmkdir -p ~\u002F.fonts\ncp *otf ~\u002F.fonts\nfc-cache -f -v\n",[83,973,974,979,985,993,1003,1015,1025,1029,1036,1044,1052,1062],{"__ignoreMap":81},[86,975,976],{"class":88,"line":89},[86,977,978],{"class":133},"#!\u002Fbin\u002Fbash\n",[86,980,981],{"class":88,"line":124},[86,982,984],{"emptyLinePlaceholder":983},true,"\n",[86,986,987,990],{"class":88,"line":130},[86,988,989],{"class":100},"cd",[86,991,992],{"class":96}," \u002Fwork\u002Fdocker\u002Finit\n",[86,994,995,997,1000],{"class":88,"line":137},[86,996,933],{"class":92},[86,998,999],{"class":96}," sudachi.json",[86,1001,1002],{"class":96}," \u002Fusr\u002Flocal\u002Flib\u002Fpython3.7\u002Fsite-packages\u002Fja_ginza_dict\u002Fsudachidict\u002F\n",[86,1004,1005,1007,1009,1011,1013],{"class":88,"line":199},[86,1006,777],{"class":92},[86,1008,780],{"class":96},[86,1010,783],{"class":100},[86,1012,786],{"class":96},[86,1014,789],{"class":96},[86,1016,1017,1020,1023],{"class":88,"line":247},[86,1018,1019],{"class":92},"mv",[86,1021,1022],{"class":96}," user.dic",[86,1024,1002],{"class":96},[86,1026,1027],{"class":88,"line":393},[86,1028,984],{"emptyLinePlaceholder":983},[86,1030,1031,1033],{"class":88,"line":405},[86,1032,989],{"class":100},[86,1034,1035],{"class":96}," fonts\n",[86,1037,1038,1040,1042],{"class":88,"line":413},[86,1039,911],{"class":92},[86,1041,914],{"class":96},[86,1043,917],{"class":100},[86,1045,1046,1048,1050],{"class":88,"line":424},[86,1047,922],{"class":92},[86,1049,925],{"class":100},[86,1051,928],{"class":96},[86,1053,1054,1056,1058,1060],{"class":88,"line":584},[86,1055,933],{"class":92},[86,1057,936],{"class":100},[86,1059,939],{"class":96},[86,1061,928],{"class":96},[86,1063,1064,1066,1068],{"class":88,"line":590},[86,1065,946],{"class":92},[86,1067,949],{"class":100},[86,1069,952],{"class":100},[10,1071,1072,1073,1075,1076,1079],{},"Docker 起動時に実行するには",[83,1074,495],{},"の",[83,1077,1078],{},"\"postCreateCommand\"","にコマンドを書けばオッケーです。",[37,1081,1082],{"id":1082},"まとめ",[10,1084,1085],{},"本記事では GiNZA を使用する Docker 環境構築方法を紹介しました。",[10,1087,1088],{},"Docker でなくてもいいのですが、手順がいろいろあるものは Docker のほうが再現性があって覚えやすいです。ローカルでやっていたらユーザー辞書登録のやり方は覚えられなかったです。",[10,1090,1091],{},"Docker だとコンパクトに作業環境に関する情報がまとまるので頭の整理にもなります。",[10,1093,1094],{},"あと、今回は以前から試したかった vscode の remote container を使ってみました。vscode 上でコマンドを打たずに環境を選択できるのは便利です。vscode の環境設定もできるので、環境が統一されて非常に快適です。",[10,1096,1097],{},"次回は今度こそ前処理について書きます！",[1099,1100,1101],"style",{},"html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .s4JwU, html code.shiki .s4JwU{--shiki-default:#85E89D}",{"title":81,"searchDepth":124,"depth":124,"links":1103},[1104,1105,1106,1107,1108,1109],{"id":39,"depth":124,"text":40},{"id":299,"depth":124,"text":300},{"id":712,"depth":124,"text":713},{"id":879,"depth":124,"text":880},{"id":962,"depth":124,"text":962},{"id":1082,"depth":124,"text":1082},"2020-03-28","Twitter解析を行うための環境構築をDockerで行いました。自然言語処理ライブラリとして比較的新しいGiNZAを利用します。GiNZAで使用されているSudachiPyのユーザー辞書登録の方法についても書きました。",false,"md",{},"\u002Fcontents\u002Fginza-docker",{"title":5,"description":1111},"contents\u002Fginza-docker",[1119,1120],"Python","Docker","\u002Fimg\u002Ftwitter-card.png","mx7tVJikmDfXJeXIvdyVq9FobrP806MiTUe45-3WtL0",[1124,1128],{"title":1125,"path":1126,"stem":1127,"children":-1},"Two-Level Meta-Rubrics for Evaluating Open-Ended Generation: GAMUT, a Benchmark for Factual Completeness","\u002Fcontents\u002Fgamut-factual-completeness","contents\u002Fgamut-factual-completeness",{"title":1129,"path":1130,"stem":1131,"children":-1},"GPT-5.6とFable 5のプロンプトガイド比較","\u002Fcontents\u002Fgpt-5-6-fable-5-prompt-guide-comparison","contents\u002Fgpt-5-6-fable-5-prompt-guide-comparison",1785555954527]