Upgrade to Pro — share decks privately, control downloads, hide ads and more …

英和辞書付きGo言語仕様書 / Word Wise Go Spec

DQNEO
July 19, 2021

英和辞書付きGo言語仕様書 / Word Wise Go Spec

英和辞書付きGo言語仕様書(Word Wise Go Spec)というのを作りました。
https://dqneo.github.io/gospec/spec.html

開発した動機や仕組みについての解説です。

DQNEO

July 19, 2021
Tweet

More Decks by DQNEO

Other Decks in Programming

Transcript

  1. 英和辞書付きGo言語仕様書
    Word Wise Go Spec
    @DQNEO
    mercari.go 2021-07-19

    View full-size slide

  2. 自己紹介
    ● DQNEO (ドキュネオ)
    ● アメリカ版メルカリのバックエンドを開発
    ● Goコンパイラを2つ自作
    ○ minigo, babygo
    ○ アメリカGopherConで発表
    ● 最近の趣味は英語学習

    View full-size slide

  3. こんな悩みありませんか?
    ● Go言語もっと上達したい。英語も勉強したい。
    ● 時間がない
    ○ そうだ、両方同時にやろう!
    ● 言語仕様書を原文で読んでみる → 挫折

    View full-size slide

  4. 英和辞書付きGo言語仕様書
    https://dqneo.github.io/gospec/spec.html

    View full-size slide

  5. 「辞書引けるツール既にあるじゃん」
    「MacOSに辞書ついてるし」

    View full-size slide

  6. 特徴
    ● インストール不要
    ○ 単なるWebページ
    ● 専用辞書が組み込まれている
    ○ 専門用語に強い (例: operator, expression)
    ○ 余分な情報がゼロ (例: room)
    ○ Go言語に詳しい人間が作った
    ■ Goコンパイラ2回作った経験
    ■ Go言語仕様輪読会での利用実績 /メンバーからのコントリビュート
    ● masterの最新版仕様(v1.17)に対応済み
    ○ https://tip.golang.org/ref/spec へのパッチとして実装されている

    View full-size slide

  7. なぜ翻訳ではなく
    辞書なのか?

    View full-size slide

  8. 翻訳を作るのは大変
    ● 作業量が膨大
    ○ 文書が2万語あったら、2万語全部翻訳する必要
    ● 複数人で分業しづらい (品質のバラツキ、用語や文体のバラツキ)
    ● オリジナルに追従しつづけるのが大変
    ● モチベーションが続かない
    ○ 少なくとも、自分が欲していない
    ※翻訳にも価値はあると思うし、
    翻訳にたずさわっている方には敬意を表します

    View full-size slide

  9. 辞書付き仕様書の利点 (作り手視点)
    ● てこの原理が効く
    ○ 20,000語の文書でも、単語をユニークカウントすると 1400語ほど
    ○ 多くの単語は和訳不要
    ■ a, the, of, because などの基本語
    ■ package, pointer などカタカナ語として定着してる単語
    ○ 500語分の辞書を作れば、大半の文章はカバーできる
    ● 複数人分担しやすい
    ○ 単語単位の翻訳なので、品質のバラツキは生じにくい
    ● オリジナルの変更に追従するのが簡単
    ○ 仕様変更で文章が変わっても、辞書はそのまま適用できる
    ○ 陳腐化しにくい
    ● 作ってる本人にも恩恵がある
    ○ 自分が欲しかったやつや〜

    View full-size slide

  10. 辞書付き仕様書の利点 (ユーザ視点)
    ● 英文を読む際に、文法にだけ集中すればよくなる
    ● 仕様書を英語で読んでおくと、標準ライブラリのコード読解に役立つ
    ○ 変数名、関数名、型名は英語
    ○ コメントもドキュメントも英語

    View full-size slide

  11. 開発の裏側

    View full-size slide

  12. きっかけ
    ● 「言語仕様書を自然言語解析したら、何か面白いことができないか?」
    ○ 単語の頻度分析とか
    ○ 仕様書の不備や矛盾を検知するとか

    View full-size slide

  13. 単語の頻度分析をやってみた
    特に「頻度」の利用方法は思いつかず...
    → 辞書を作ったら面白いかも?

    View full-size slide

  14. Kindleで洋書を読むときのアレ

    View full-size slide

  15. 問題点
    ● 辞書の英単語リストをどうやって作るか
    ○ 文書全体は2万語もあるので、人力では無理
    ● 単語の語形変化の扱い
    ○ 名詞: variables, variable
    ○ 動詞: specify, specifies, specifying, specified
    → Go言語による自然言語処理で解決

    View full-size slide

  16. 開発の流れ
    ● 原文(HTML)からテキストのみを抽出
    ● トークン分割・品詞分類
    ● 単語の正規化
    ● 各単語の和訳を作成 (人力)
    ● UI実装 (ツールチップ)
    ● ビルド

    View full-size slide

  17. 仕様書原文(HTML)からテキストのみを抽出
    html txt
    github.com/PuerkitoBio/goquery を利用

    View full-size slide

  18. 文章をトークン分割&品詞分類
    txt
    github.com/jdkato/prose/v2 を利用

    View full-size slide

  19. 生トークンの問題
    ● 重複しまくり
    ○ “the” が 1283回登場
    ● 句読点がトークン扱い
    ○ , : . “
    ● 単語の変異が、全て別トークン扱い
    ○ variables, variable
    ○ specify, specifies, specifying, specified

    View full-size slide

  20. 生トークンに対する前処理
    ● 句読点を除去
    ● 小文字化
    ● 機能語を除去
    ○ the, a, of, because, ...
    → Go言語で自作のフィルタを書いた

    View full-size slide

  21. 名詞の正規化 (複数形を単数形に)
    ● variables -> variable
    ● properties -> property
    github.com/jinzhu/inflection を利用

    View full-size slide

  22. 動詞の正規化
    ● Porter2 アルゴリズムというのがあるらしい
    ○ Stem(語幹)を抽出してくれる
    ● [compare, compared, comparing, compares] -> compar
    github.com/surgebase/porter2 を利用

    View full-size slide

  23. 訳語制作
    ● ここは人力
    ● GoogleSpreadSheetで管理
    ● Stem(語幹)に対する訳語を登録
    ● @syumai さん、@nobishiii さんが協

    View full-size slide

  24. 辞書引きは2ステップ
    ● comparing -> compar -> “比較する”

    View full-size slide

  25. UI実装
    ● @syumai さんが開発
    ● OSSバンザイ

    View full-size slide

  26. ビルド (Makefile)
    https://github.com/DQNEO/gospec-analyzer/blob/main/Makefile
    辞書ファイルをダウンロード
    仕様書原文をダウンロード
    html を txt に変換
    トークン分割

    View full-size slide

  27. ビルドのデモ

    View full-size slide

  28. レポジトリ
    ● https://github.com/DQNEO/gospec-analyzer
    ○ 自然言語処理
    ● https://github.com/DQNEO/gospec
    ○ 生成物を GitHub Web Pages で配信

    View full-size slide

  29. 発展課題
    ● 多言語対応
    ○ 中国語、韓国語、スペイン語 etc
    ○ 辞書さえ用意すれば実装は簡単
    ● 英文を構文解析して視覚化
    ○ どれが主語でどれが述語か
    ○ どの形容詞/副詞がどの名詞/動詞を修飾してるか

    View full-size slide

  30. おまけ
    お気に入り単語の紹介

    View full-size slide

  31. ご清聴ありがとう
    ございました
    Q&A タイム

    View full-size slide