AWS関係の固有名詞が入力しやすくなるように辞書ファイルを作成するスクリプトを作成してみた

AWSの固有名詞を補完する用途の辞書を、AWSドキュメント内の記述を元に生成してみました。
2018.11.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

あまり入力しなれていないAWSの固有名詞を略せずに入力しようとすると、度々のTypoが発生あり、色々と悩みのタネとなっていました。

AWSドキュメントにはリファレンスとしてAWS用語集が存在しています。これを元に辞書を作成して使う事で、タイピングミスの防止につながるのではないかと思い至りました。

作り方

以下のスクリプトを実行します。出力結果をtxtにリダイレクトすることで作成します。

スクリプトでは以下の手順を順番に行っています。

  1. 用語集をスクレイピング
  2. 固有名詞と説明を拾い出す
  3. 固有名詞の漢字をひらがなに、カタカナをひらがなにして、よみデータにする
  4. 辞書データとして構成する

実行方法

% python converter.py > dictinary.txt

converter.py

# -*- coding: utf-8 -*
import requests
import re
import jaconv
from pykakasi import kakasi
from lxml import etree, html

URL = "https://docs.aws.amazon.com/ja_jp/general/latest/gr/glos-chap.html"

def _get_url():
    return URL

def _get_html():
    return html.fromstring(requests.get(_get_url()).content)

def _get_words():
    m1 = re.compile("参照")
    m2 = re.compile("\.")
    awsdict = dict()
    keys = list()
    descs = list()
    dic_count = 0
    for dl in _get_html().xpath("//div[@class='glossdiv']/dl"):
        for keyword in dl.xpath("./dt/text()"):
            keys.append(keyword.strip().replace(" ",""))

        for descriptions in dl.xpath("./dd"):
            _descs = list()
            for p in descriptions.xpath("./p"):
                for text in p.xpath("text()"):
                    if m1.match(text) is None and m2.match(text) is None:
                        text = text.replace('\n', "")
                        text = re.sub(r' +', "", text)
                        _descs.append(text.strip())
            descs.append(_descs)
    
    awsdict = dict(zip(keys, descs))
    fix_awsdict = dict()
    k = kakasi()
    k.setMode("J", "H")
    conv = k.getConverter()
    count = 0
    for row in awsdict.keys():
        if len(awsdict[row]) != 0:
            fix_awsdict["{}".format(count)] = [jaconv.kata2hira(conv.do(row)), row, "固有名詞", "".join(awsdict[row])]
            count=count+1
    for line in fix_awsdict.values():
        print("{}\t{}\t{}\t{}".format(line[0], line[1], line[2], line[3]))

def exec():
    _get_words()

if __name__ == '__main__':
    exec()

課題

固有名詞の入力に手間掛けない点を重要視したため、説明部分のテキストが中々読み難い状態になっています。

まとめ

入力慣れている方には効果が薄いかもしれませんが、ひらがな入力時のタイピング数が少なくなる効果もあります。
実行する度にドキュメントを元にして作成するので、AWSの新しいサービス辞書に登録していない場合等にお使いください。