{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/how-to-improve-proofreading-of-sentence-in-japanese/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"5970256f-2d9c-528a-beda-9d46a31be410","excerpt":"こんにちは。 ブログを書く際に、 自分の日本語が怪しい と思うことが多々あるため、日本語の文書の自動補正がほしいなと思いました。 思い立ったが吉日ということでYahooの日本語解析APIを使用して実装してみました。 完成物 Githubに公開しています。 ざっくり作ったものなのでPR…","html":"<p>こんにちは。<br>\nブログを書く際に、 <strong>自分の日本語が怪しい</strong> と思うことが多々あるため、日本語の文書の自動補正がほしいなと思いました。<br>\n思い立ったが吉日ということでYahooの日本語解析APIを使用して実装してみました。</p>\n<!--more-->\n<h2 id=\"完成物\" style=\"position:relative;\"><a href=\"#%E5%AE%8C%E6%88%90%E7%89%A9\" aria-label=\"完成物 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>完成物</h2>\n<p>Githubに公開しています。<br>\nざっくり作ったものなのでPRや機能追加などお待ちしております。</p>\n<p><a href=\"https://github.com/Leko/jp-validate\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Leko/jp-validate</a></p>\n<h2 id=\"yahooのアプリケーションを作成\" style=\"position:relative;\"><a href=\"#yahoo%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E6%88%90\" aria-label=\"yahooのアプリケーションを作成 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Yahooのアプリケーションを作成</h2>\n<p><a href=\"https://e.developer.yahoo.co.jp/register\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">こちら</a>からYahooのアプリケーションを作成してください。<br>\nAPIを利用するためにYahooのアプリケーションIDが必要です。</p>\n<p>アプリケーションを登録したら、<code>.env</code>に<code>YAHOO_APP_ID</code>という名前でキーを登録しておきます。</p>\n<ul>\n<li><a href=\"http://developer.yahoo.co.jp/webapi/jlp/kousei/v1/kousei.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">テキスト解析:校正支援 – Yahoo!デベロッパーネットワーク</a></li>\n<li><a href=\"http://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">テキスト解析:ルビ振り – Yahoo!デベロッパーネットワーク</a></li>\n</ul>\n<p>の２APIに対して共通のキーとして使用できます。</p>\n<h2 id=\"実装する\" style=\"position:relative;\"><a href=\"#%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B\" aria-label=\"実装する permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>実装する</h2>\n<p>実装に関してはリポジトリを御覧ください。<br>\nGoで作ろうと思ったのですが、ローカルの環境を整えるのが面倒だったのでちゃちゃっとRubyで済ませてしまいました。<br>\nCLIツール化については<a href=\"http://whatisthor.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Thor</a>を使用しました。</p>\n<h2 id=\"表外漢字を常用漢字に変換する\" style=\"position:relative;\"><a href=\"#%E8%A1%A8%E5%A4%96%E6%BC%A2%E5%AD%97%E3%82%92%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B\" aria-label=\"表外漢字を常用漢字に変換する permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>表外漢字を常用漢字に変換する</h2>\n<p>まず表外漢字とは、ざっくり言うと「常用漢字でないもの」だそうです。</p>\n<blockquote>\n<p>表外漢字字体表によって、印刷文字における印刷標準字体及び簡易慣用字体を定めたことは、表外漢字使用における字体の混乱を軽減し、常用漢字とともに表外漢字を使用していく場合の字体選択のよりどころとなるものである。<br>\n— <a href=\"http://www.mext.go.jp/b_menu/shingi/old_bunka/kokugo_index/toushin/1325296.htm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">表外漢字字体表：文部科学省</a></p>\n</blockquote>\n<p>Yahooの校正支援APIだけでは、表外漢字が含まれていた場合に指摘はしてくれますが、変換候補が出てきません。<br>\nサンプルの「遙か」は「●か」と変換されてしまいます。なんでやねん。</p>\n<p>できれば「遙か」などの表外漢字は「遥か」と常用漢字に変換する<a href=\"http://homepage3.nifty.com/jgrammar/ja/tools/tradkan0.htm\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">こちら</a>のようなWeb APIを探したのですが、見つかりませんでした。<br>\nAPIは見つかりませんでしたが、代わりに素敵なgemが見つかりました。</p>\n<blockquote>\n<p>Convert japanese from itaiji(異体字) to seijitai(正字体) and also reverse convert.<br>\n<a href=\"https://github.com/camelmasa/itaiji\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">camelmasa/itaiji</a></p>\n</blockquote>\n<p>今回の目的そのままなgemだったので、有りがたく使用させていただきました。</p>\n<h2 id=\"使い方\" style=\"position:relative;\"><a href=\"#%E4%BD%BF%E3%81%84%E6%96%B9\" aria-label=\"使い方 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>使い方</h2>\n<p>導入については同じくリポジトリの情報を御覧ください。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ echo '遙か彼方に小形飛行機が見える。' | bundle exec ruby jp-validate.rb list\n2 errors\nline:1, column:1: '遙か' to '遥か'(表外漢字あり)\nline:1, column:5: '小形飛行機' to '小型飛行機'(誤変換)\n\n$ echo '遙か彼方に小形飛行機が見える。' | bundle exec ruby jp-validate.rb fix\n遥か彼方に小型飛行機が見える。\n\n$ echo '遙か彼方に小形飛行機が見える。' | bundle exec ruby jp-validate.rb fix --diff\n-遙か彼方に小形飛行機が見える。\n+遥か彼方に小型飛行機が見える。</code></pre></div>\n<h2 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まとめ</h2>\n<p>公開されているAPIを組み合わせるだけで、簡単に自然言語解析を使用したツールを作れるもんだなぁと思いました。<br>\nAPIを公開して頂いているYahooと依存ライブラリの作者さまに感謝感激雨あられです。</p>\n<p>本格的に解析するなら形態素解析、係り受け解析やら助詞落ち補完（現状だと指摘はするものの補完はしていない）に伴う機械学習 etcetc…と色々と知識が必要ですが、ごく簡素な校正くらいならこんなもんかな、と思います。</p>\n<p>ちなみにこの記事を書いて校正ツールに食わせてみた結果以下のようになりました。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">$ bundle exec ruby jp-validate.rb list /var/folders/b3/ghssxbs57rzb1gt02wk6mfxr0000gn/T/ODBEditor-com.red-sweater.marsedit.macappstore-0000004.md\n20 errors\nline:33, column:11: 'ルビ振り' to ''(助詞不足の可能性あり)\nline:39, column:1: 'Goで' to ''(助詞不足の可能性あり)\nline:39, column:42: 'Rubyで' to ''(助詞不足の可能性あり)\nline:44, column:7: '遙か' to '遥か'(表外漢字あり)\nline:46, column:6: '遙か' to '遥か'(表外漢字あり)\nline:46, column:11: '遥か' to '遥か'(表外漢字あり)\nline:46, column:55: 'nifty' to '@nifty（サイト名の場合）'(固有名詞)\nline:59, column:9: '遙か' to '遥か'(表外漢字あり)\nline:59, column:14: '小形飛行機' to '小型飛行機'(誤変換)\nline:61, column:20: '遙か' to '遥か'(表外漢字あり)\nline:61, column:28: '遥か' to '遥か'(表外漢字あり)\nline:62, column:20: '小形飛行機' to '小型飛行機'(誤変換)\nline:64, column:9: '遙か' to '遥か'(表外漢字あり)\nline:64, column:14: '小形飛行機' to '小型飛行機'(誤変換)\nline:65, column:1: '遥か' to '遥か'(表外漢字あり)\nline:67, column:9: '遙か' to '遥か'(表外漢字あり)\nline:67, column:14: '小形飛行機' to '小型飛行機'(誤変換)\nline:68, column:2: '遙か' to '遥か'(表外漢字あり)\nline:68, column:7: '小形飛行機' to '小型飛行機'(誤変換)\nline:69, column:2: '遥か' to '遥か'(表外漢字あり)</code></pre></div>\n<p>これらを全部直されてしまうと記事内で意図的に書いている「遙か」まで置換されてしまいます。<br>\n今回の場合はサンプルに意図的に表外漢字や誤変換を使用しているため、そこの指摘が多いですね。</p>\n<p>日本語の校正についてすべてを委ねることは難しそうですが、いちいち目grepしなくて良くなったので捗りそうです。 次回以降のブログの内容を食わせつつ、どう調整していくか検討してみます。</p>","timeToRead":5,"frontmatter":{"title":"Rubyで日本語解析API(+α)を使用して日本語の文書校正を効率化してみる","tags":["API","Ruby","Thor","Yahoo Developer Network"],"date":"September 07, 2015","featuredImage":null}}},"pageContext":{"slug":"/how-to-improve-proofreading-of-sentence-in-japanese/","previous":{"fields":{"slug":"/event-report-of-yapc-asia-2015/"},"frontmatter":{"title":"YAPC 2015行ってきました","tags":["Go","ISUCON","Nginx","YAPC","カンファレンス"]}},"next":{"fields":{"slug":"/setup-alone-developing-environment-with-github-slack-circleci-codeclimate-and-ci-bundle-update/"},"frontmatter":{"title":"GithubとSlackとCircleCIとCodeClimateとci-bundle-updateでぼっち開発環境を作ってみた","tags":["CI","CircleCI","Code Climate","Git","Github","Ruby","Slack"]}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}