1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.js + Express + PostgreSQLによる英単語検索APIの開発 ~01. データ用意編~

Posted at

はじめに

Node.js + Express + PostgreSQLで英単語検索APIを開発しています。
この記事では「01. データ用意編」と称して、API開発に必要なデータ(英和辞書)の用意の仕方について記載しています。

パブリックドメインの英和辞書に対して、TreeTaggerのPython wrapperを使用して品詞のタグ付けを行いました。

やったこと

必要なデータ(英和辞書)とは?

最低でも下記の3つは必要であろうと考えました。

  • 英単語
  • 日本語訳
  • 品詞情報

データの取得

英単語と日本語訳については、下記のパブリックドメインの英和辞書を使用させて頂きました。
https://kujirahand.com/web-tools/EJDictFreeDL.php

品詞情報の付与

今回使用させて頂いた上記パブリックドメインの英和辞書データ (ejdic-hand)には品詞情報がありませんでした。
英単語APIの作成にあたり、やはり品詞情報は必要でしょう。
そこで、英語(+様々な言語)に対して品詞タグ付けをすることができるTreeTaggerを使用し、品詞のタグ付けを行いました。

TreeTaggerとは?

TreeTaggerは品詞タグ付け器です。英語をはじめ、多くの自然言語に対応しています。
Python、Ruby、Javaなどの、様々なの言語に対してwrapperが提供されています。
今回はPythonのwrapperを使用してタグ付けを行いました。
TreeTagger公式ドキュメント

TreeTaggerのインストール

開発環境はUbuntu16.04です。
公式ドキュメント通りに進めて、問題なくインストールすることができました。

品詞タグ付けのソースコード

#!/usr/bin/env python
#! -*- coding:utf-8 -*-

""" 英単語の品詞情報を取得する。
"""

import re
import treetaggerwrapper as ttw

def main():
    # TAGDIRを指定する必要がある。
    tagger = ttw.TreeTagger(TAGLANG='en',TAGDIR='/usr/local/src/treetagger')
    lines = read_file()
    result = []
    dict_def = load_def()
    for line in lines:
        try:
            english, japanese = line.split('\t')
            japanese = japanese.rstrip('\n')
            # 複数語は取り込み対象外とする。
            if re.match('.+[\s ].+', english):
                continue
            tags = tagger.TagText(english)
            tags2 = ttw.make_tags(tags)
            word_type = tags2[0][1]
            result.append(english + '\t' + japanese + '\t' + dict_def[word_type])
        except:
            continue
    write_file(result)

def read_file():
    """
    パブリックドメインの英語辞書データ
    https://kujirahand.com/web-tools/EJDictFreeDL.php
    """
    with open('./ejdic-hand-utf8.tsv') as f:
        return f.readlines()

def write_file(ary):
    with open('./ejdic-hand-utf8-with-word-type.tsv', 'w') as f:
        return f.write('\n'.join(ary))

def load_def():
    """
    TreeTaggerの付与する品詞タグを、実際の品詞表記に変換するための定義ファイル
    http://computer-technology.hateblo.jp/entry/20150824/p1
    """
    result = {}
    with open('./def_word_type.tsv') as f:
        for line in f.readlines():
            list_line = line.split('\t')
            result[list_line[0]] = list_line[3].rstrip('\n')
    return result

if __name__ == '__main__':
    main()

リポジトリへのリンク

結果

下記の通り、各英単語について品詞を割り当てることができました。
ejdic-hand-utf8-with-word-type.tsv より一部抜粋

afflict  (肉体的に,精神的に)(…で)…'を'『苦しめる』,悩ます(distress)《+『名』+『with』+『名』 (a person's do『ing』)》   動詞
affliction       (心身の)苦悩,難儀 / 苦悩(悩み)を引き起こすもの 名詞
affluence        (物質的な)裕福 / (思考・言葉などの)豊かさ      名詞
affluent         (物質的に)裕福な / (思考・言葉などが)豊富な,たくさんの;(…が)豊富な《+『in』+『名』》 / (川の)支流      形容詞

次回以降、こちらのデータを使用して英単語検索APIを開発していきます。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?