Save 37% off PRO during our Black Friday Sale! »

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

7b606c5039f083d13e2d2320ce6ddcfa?s=47 DQNEO
July 19, 2021

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

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

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

7b606c5039f083d13e2d2320ce6ddcfa?s=128

DQNEO

July 19, 2021
Tweet

Transcript

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

  2. 自己紹介 • DQNEO (ドキュネオ) • アメリカ版メルカリのバックエンドを開発 • Goコンパイラを2つ自作 ◦ minigo,

    babygo ◦ アメリカGopherConで発表 • 最近の趣味は英語学習
  3. こんな悩みありませんか? • Go言語もっと上達したい。英語も勉強したい。 • 時間がない ◦ そうだ、両方同時にやろう! • 言語仕様書を原文で読んでみる → 挫折

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

  5. デモ

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

  7. 特徴 • インストール不要 ◦ 単なるWebページ • 専用辞書が組み込まれている ◦ 専門用語に強い (例:

    operator, expression) ◦ 余分な情報がゼロ (例: room) ◦ Go言語に詳しい人間が作った ▪ Goコンパイラ2回作った経験 ▪ Go言語仕様輪読会での利用実績 /メンバーからのコントリビュート • masterの最新版仕様(v1.17)に対応済み ◦ https://tip.golang.org/ref/spec へのパッチとして実装されている
  8. なぜ翻訳ではなく 辞書なのか?

  9. 翻訳を作るのは大変 • 作業量が膨大 ◦ 文書が2万語あったら、2万語全部翻訳する必要 • 複数人で分業しづらい (品質のバラツキ、用語や文体のバラツキ) • オリジナルに追従しつづけるのが大変

    • モチベーションが続かない ◦ 少なくとも、自分が欲していない ※翻訳にも価値はあると思うし、 翻訳にたずさわっている方には敬意を表します
  10. 辞書付き仕様書の利点 (作り手視点) • てこの原理が効く ◦ 20,000語の文書でも、単語をユニークカウントすると 1400語ほど ◦ 多くの単語は和訳不要 ▪

    a, the, of, because などの基本語 ▪ package, pointer などカタカナ語として定着してる単語 ◦ 500語分の辞書を作れば、大半の文章はカバーできる • 複数人分担しやすい ◦ 単語単位の翻訳なので、品質のバラツキは生じにくい • オリジナルの変更に追従するのが簡単 ◦ 仕様変更で文章が変わっても、辞書はそのまま適用できる ◦ 陳腐化しにくい • 作ってる本人にも恩恵がある ◦ 自分が欲しかったやつや〜
  11. 辞書付き仕様書の利点 (ユーザ視点) • 英文を読む際に、文法にだけ集中すればよくなる • 仕様書を英語で読んでおくと、標準ライブラリのコード読解に役立つ ◦ 変数名、関数名、型名は英語 ◦ コメントもドキュメントも英語

  12. 開発の裏側

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

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

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

  16. 問題点 • 辞書の英単語リストをどうやって作るか ◦ 文書全体は2万語もあるので、人力では無理 • 単語の語形変化の扱い ◦ 名詞: variables,

    variable ◦ 動詞: specify, specifies, specifying, specified → Go言語による自然言語処理で解決
  17. 開発の流れ • 原文(HTML)からテキストのみを抽出 • トークン分割・品詞分類 • 単語の正規化 • 各単語の和訳を作成 (人力)

    • UI実装 (ツールチップ) • ビルド
  18. 仕様書原文(HTML)からテキストのみを抽出 html txt github.com/PuerkitoBio/goquery を利用

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

  20. 生トークンの問題 • 重複しまくり ◦ “the” が 1283回登場 • 句読点がトークン扱い ◦

    , : . “ • 単語の変異が、全て別トークン扱い ◦ variables, variable ◦ specify, specifies, specifying, specified
  21. 生トークンに対する前処理 • 句読点を除去 • 小文字化 • 機能語を除去 ◦ the, a,

    of, because, ... → Go言語で自作のフィルタを書いた
  22. 名詞の正規化 (複数形を単数形に) • variables -> variable • properties -> property

    github.com/jinzhu/inflection を利用
  23. 動詞の正規化 • Porter2 アルゴリズムというのがあるらしい ◦ Stem(語幹)を抽出してくれる • [compare, compared, comparing,

    compares] -> compar github.com/surgebase/porter2 を利用
  24. 訳語制作 • ここは人力 • GoogleSpreadSheetで管理 • Stem(語幹)に対する訳語を登録 • @syumai さん、@nobishiii

    さんが協 力
  25. 辞書引きは2ステップ • comparing -> compar -> “比較する”

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

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

  28. ビルドのデモ

  29. レポジトリ • https://github.com/DQNEO/gospec-analyzer ◦ 自然言語処理 • https://github.com/DQNEO/gospec ◦ 生成物を GitHub

    Web Pages で配信
  30. 発展課題 • 多言語対応 ◦ 中国語、韓国語、スペイン語 etc ◦ 辞書さえ用意すれば実装は簡単 • 英文を構文解析して視覚化

    ◦ どれが主語でどれが述語か ◦ どの形容詞/副詞がどの名詞/動詞を修飾してるか
  31. おまけ お気に入り単語の紹介

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