#!/usr/bin/env ruby
# coding: utf-8
#
#  Copyright (C) 2017 Noriaki TANAKA (dtana@startide.jp)
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License as
#  published by the Free Software Foundation; either version 2 of the
#  License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#  02111-1307, USA.
#
# $Id: userdic.rb,v 1.34 2017/01/21 08:50:09 dtana Exp $
#
require 'rexml/document'

$hinshi_f = {"generic"=>{"名詞"=>"名詞", "名詞非接尾"=>"名詞非接尾", "短縮よみ"=>"短縮よみ", "サジェストのみ"=>"サジェストのみ", "固有名詞"=>"固有名詞", "固有商品"=>"固有商品", "人名"=>"人名", "姓"=>"姓", "名"=>"名", "組織"=>"組織", "地名"=>"地名", "国"=>"国", "支庁"=>"支庁", "県"=>"県", "郡"=>"郡", "区"=>"区", "市"=>"市", "町"=>"町", "村"=>"村", "駅"=>"駅", "名詞サ変"=>"名詞サ変", "名詞サ変非接尾"=>"名詞サ変非接尾", "名詞ザ変"=>"名詞ザ変", "名詞形動"=>"名詞形動", "名サ形動"=>"名サ形動", "副詞的名詞"=>"副詞的名詞", "形容動詞"=>"形容動詞", "形容動詞サ変"=>"形容動詞サ変", "形容動詞ノ"=>"形容動詞ノ", "形容動詞タル"=>"形容動詞タル", "数詞"=>"数詞", "冠数詞"=>"冠数詞", "記号"=>"記号", "アルファベット"=>"アルファベット", "顔文字"=>"顔文字", "副詞00"=>"副詞00", "副詞01"=>"副詞01", "副詞02"=>"副詞02", "副詞03"=>"副詞03", "副詞04"=>"副詞04", "副詞06"=>"副詞06", "副詞11"=>"副詞11", "副詞12"=>"副詞12", "副詞13"=>"副詞13", "副詞14"=>"副詞14", "連体詞"=>"連体詞", "接続詞"=>"接続詞", "感動詞"=>"感動詞", "接頭語"=>"接頭語", "接頭人名"=>"接頭人名", "接頭地名"=>"接頭地名", "接頭数詞"=>"接頭数詞", "助数詞"=>"助数詞", "接尾語"=>"接尾語", "接尾人名"=>"接尾人名", "接尾地名"=>"接尾地名", "動詞ワ行五段名"=>"動詞ワ行五段名", "動詞ワ行五段"=>"動詞ワ行五段", "動詞ワう五段名"=>"動詞ワう五段名", "動詞ワう五段"=>"動詞ワう五段", "動詞カ行五段名"=>"動詞カ行五段名", "動詞カ行五段"=>"動詞カ行五段", "動詞カ促五段名"=>"動詞カ促五段名", "動詞カ促五段"=>"動詞カ促五段", "動詞サ行五段名"=>"動詞サ行五段名", "動詞サ行五段"=>"動詞サ行五段", "動詞タ行五段名"=>"動詞タ行五段名", "動詞タ行五段"=>"動詞タ行五段", "動詞ナ行五段名"=>"動詞ナ行五段名", "動詞ナ行五段"=>"動詞ナ行五段", "動詞マ行五段名"=>"動詞マ行五段名", "動詞マ行五段"=>"動詞マ行五段", "動詞ラ行五段名"=>"動詞ラ行五段名", "動詞ラ行五段"=>"動詞ラ行五段", "動詞ラい段名"=>"動詞ラい段名", "動詞ラい五段"=>"動詞ラい五段", "動詞ガ行五段名"=>"動詞ガ行五段名", "動詞ガ行五段"=>"動詞ガ行五段", "動詞バ行五段名"=>"動詞バ行五段名", "動詞バ行五段"=>"動詞バ行五段", "動詞ハ行四段"=>"動詞ハ行四段", "動詞一段"=>"動詞一段", "一段名詞"=>"一段名詞", "動詞カ変"=>"動詞カ変", "動詞サ変"=>"動詞サ変", "動詞ザ変"=>"動詞ザ変", "動詞ラ変"=>"動詞ラ変", "形容詞"=>"形容詞", "形容詞しく"=>"形容詞しく", "形容詞ガル"=>"形容詞ガル", "形容詞ュウ"=>"形容詞ュウ", "終助詞"=>"終助詞", "句読点"=>"句読点", "慣用句"=>"慣用句", "独立語"=>"独立語", "単漢字"=>"単漢字", "抑制単語"=>"抑制単語"}, "mozc"=>{"名詞"=>"名詞", "短縮よみ"=>"短縮よみ", "サジェストのみ"=>"サジェストのみ", "固有名詞"=>"固有名詞", "人名"=>"人名", "姓"=>"姓", "名"=>"名", "組織"=>"組織", "地名"=>"地名", "名詞サ変"=>"名詞サ変", "名詞形動"=>"名詞形動", "数"=>"数詞", "記号"=>"記号", "アルファベット"=>"アルファベット", "顔文字"=>"顔文字", "副詞"=>"副詞04", "連体詞"=>"連体詞", "接続詞"=>"接続詞", "感動詞"=>"感動詞", "接頭語"=>"接頭語", "助数詞"=>"助数詞", "接尾一般"=>"接尾語", "接尾人名"=>"接尾人名", "接尾地名"=>"接尾地名", "動詞ワ行五段"=>"動詞ワう五段名", "動詞カ行五段"=>"動詞カ促五段名", "動詞サ行五段"=>"動詞サ行五段名", "動詞タ行五段"=>"動詞タ行五段名", "動詞ナ行五段"=>"動詞ナ行五段名", "動詞マ行五段"=>"動詞マ行五段名", "動詞ラ行五段"=>"動詞ラい段名", "動詞ガ行五段"=>"動詞ガ行五段名", "動詞バ行五段"=>"動詞バ行五段名", "動詞ハ行四段"=>"動詞ハ行四段", "動詞一段"=>"一段名詞", "動詞カ変"=>"動詞カ変", "動詞サ変"=>"動詞サ変", "動詞ザ変"=>"動詞ザ変", "動詞ラ変"=>"動詞ラ変", "形容詞"=>"形容詞", "終助詞"=>"終助詞", "句読点"=>"句読点", "独立語"=>"独立語", "抑制単語"=>"抑制単語"}, "anthy"=>{"T35"=>"名詞", "KK"=>"固有名詞", "JN"=>"人名", "JNS"=>"姓", "JNM"=>"名", "CN"=>"地名", "T30"=>"名詞サ変", "T05"=>"形容動詞", "NN"=>"数詞", "F00"=>"副詞00", "F01"=>"副詞01", "F02"=>"副詞02", "F03"=>"副詞03", "F04"=>"副詞04", "F06"=>"副詞06", "F11"=>"副詞11", "F12"=>"副詞12", "F13"=>"副詞13", "F14"=>"副詞14", "RT"=>"連体詞", "CJ"=>"接続詞", "CK"=>"感動詞", "PRE"=>"接頭語", "CNPRE"=>"接頭地名", "NNPRE"=>"接頭数詞", "SUC"=>"接尾語", "JNSUC"=>"接尾人名", "CNSUC1"=>"接尾地名", "W5r"=>"動詞ワ行五段名", "W5"=>"動詞ワ行五段", "U5r"=>"動詞ワう五段名", "U5"=>"動詞ワう五段", "K5r"=>"動詞カ行五段名", "K5"=>"動詞カ行五段", "C5r"=>"動詞カ促五段名", "C5"=>"動詞カ促五段", "S5r"=>"動詞サ行五段名", "S5"=>"動詞サ行五段", "T5r"=>"動詞タ行五段名", "T5"=>"動詞タ行五段", "N5r"=>"動詞ナ行五段名", "N5"=>"動詞ナ行五段", "M5r"=>"動詞マ行五段名", "M5"=>"動詞マ行五段", "R5r"=>"動詞ラ行五段名", "R5"=>"動詞ラ行五段", "L5r"=>"動詞ラい段名", "L5"=>"動詞ラい五段", "G5r"=>"動詞ガ行五段名", "G5"=>"動詞ガ行五段", "B5r"=>"動詞バ行五段名", "B5"=>"動詞バ行五段", "KS"=>"一段名詞", "SX"=>"動詞サ変", "ZX"=>"動詞ザ変", "KY"=>"形容詞", "KYT"=>"形容詞しく", "KJ"=>"単漢字"}, "atok"=>{"名詞"=>"名詞", "一般名詞"=>"名詞", "固有一般"=>"固有名詞", "固有商品"=>"固有商品", "固有人他"=>"人名", "固有人姓"=>"姓", "固有人名"=>"名", "固有組織"=>"組織", "固有地名"=>"地名", "名詞サ変"=>"名詞サ変", "名詞ザ変"=>"名詞ザ変", "名詞形動"=>"名詞形動", "名サ形動"=>"名サ形動", "形容動詞"=>"形容動詞", "数詞"=>"数詞", "冠数詞"=>"冠数詞", "副詞"=>"副詞04", "連体詞"=>"連体詞", "接続詞"=>"接続詞", "感動詞"=>"感動詞", "接頭語"=>"接頭語", "助数詞"=>"助数詞", "接尾語"=>"接尾語", "接尾辞"=>"接尾語", "ワ行五段"=>"動詞ワ行五段名", "カ行五段"=>"動詞カ行五段名", "サ行五段"=>"動詞サ行五段名", "タ行五段"=>"動詞タ行五段名", "ナ行五段"=>"動詞ナ行五段名", "マ行五段"=>"動詞マ行五段名", "ラ行五段"=>"動詞ラ行五段名", "ガ行五段"=>"動詞ガ行五段名", "バ行五段"=>"動詞バ行五段名", "一段動詞"=>"一段名詞", "サ変動詞"=>"動詞サ変", "ザ変動詞"=>"動詞ザ変", "形容詞"=>"形容詞", "独立語"=>"独立語", "単漢字"=>"単漢字"}, "msime"=>{"名詞"=>"名詞", "名詞非接尾"=>"名詞非接尾", "短縮よみ"=>"短縮よみ", "固有名詞"=>"固有名詞", "姓"=>"姓", "名"=>"名", "社名"=>"組織", "地名その他"=>"地名", "国"=>"国", "支庁"=>"支庁", "県"=>"県", "郡"=>"郡", "区"=>"区", "市"=>"市", "町"=>"町", "村"=>"村", "駅"=>"駅", "さ変名詞"=>"名詞サ変", "さ変名詞非接尾"=>"名詞サ変非接尾", "ざ変名詞"=>"名詞ザ変", "形動名詞"=>"名詞形動", "さ変形動名詞"=>"名サ形動", "副詞的名詞"=>"副詞的名詞", "形容動詞"=>"形容動詞", "形容動詞ノ"=>"形容動詞ノ", "形容動詞タル"=>"形容動詞タル", "数量"=>"数詞", "冠数詞"=>"冠数詞", "顔文字"=>"顔文字", "副詞"=>"副詞04", "連体詞"=>"連体詞", "接続詞"=>"接続詞", "感動詞"=>"感動詞", "接頭語"=>"接頭語", "姓名接頭語"=>"接頭人名", "地名接頭語"=>"接頭地名", "助数詞"=>"助数詞", "接尾語"=>"接尾語", "姓名接尾語"=>"接尾人名", "地名接尾語"=>"接尾地名", "あわ行五段"=>"動詞ワ行五段名", "か行五段"=>"動詞カ行五段名", "さ行五段"=>"動詞サ行五段名", "た行五段"=>"動詞タ行五段名", "な行五段"=>"動詞ナ行五段名", "ま行五段"=>"動詞マ行五段名", "ら行五段"=>"動詞ラ行五段名", "が行五段"=>"動詞ガ行五段名", "ば行五段"=>"動詞バ行五段名", "一段動詞"=>"一段名詞", "さ変動詞"=>"動詞サ変", "ざ変動詞"=>"動詞ザ変", "形容詞"=>"形容詞", "形容詞ガル"=>"形容詞ガル", "形容詞ュウ"=>"形容詞ュウ", "慣用句"=>"慣用句", "単漢字"=>"単漢字"}, "wnn"=>{"名詞"=>"名詞", "普通名詞"=>"名詞", "固有名詞"=>"固有名詞", "人名&地名"=>"固有名詞", "人名"=>"人名", "地名"=>"地名", "サ行(する)&名詞"=>"名詞サ変", "形容動詞&名詞"=>"名詞形動", "形容動詞"=>"形容動詞", "形容動詞(たる)"=>"形容動詞タル", "数詞"=>"数詞", "接頭助数詞"=>"接頭数詞", "助数詞"=>"助数詞", "接尾語"=>"接尾語", "ワ行五段"=>"動詞ワ行五段名", "カ行五段"=>"動詞カ行五段名", "サ行五段"=>"動詞サ行五段名", "タ行五段"=>"動詞タ行五段名", "マ行五段"=>"動詞マ行五段名", "ラ行五段"=>"動詞ラ行五段名", "ガ行五段"=>"動詞ガ行五段名", "バ行五段"=>"動詞バ行五段名", "一段"=>"動詞一段", "一段&名詞"=>"一段名詞", "サ行(する)"=>"動詞サ変", "ザ行(ずる)"=>"動詞ザ変", "形容詞"=>"形容詞"}}
$hinshi_t = {"generic"=>{"名詞"=>"名詞", "名詞非接尾"=>"名詞非接尾", "短縮よみ"=>"短縮よみ", "サジェストのみ"=>"サジェストのみ", "固有名詞"=>"固有名詞", "固有商品"=>"固有商品", "人名"=>"人名", "姓"=>"姓", "名"=>"名", "組織"=>"組織", "地名"=>"地名", "国"=>"国", "支庁"=>"支庁", "県"=>"県", "郡"=>"郡", "区"=>"区", "市"=>"市", "町"=>"町", "村"=>"村", "駅"=>"駅", "名詞サ変"=>"名詞サ変", "名詞サ変非接尾"=>"名詞サ変非接尾", "名詞ザ変"=>"名詞ザ変", "名詞形動"=>"名詞形動", "名サ形動"=>"名サ形動", "副詞的名詞"=>"副詞的名詞", "形容動詞"=>"形容動詞", "形容動詞サ変"=>"形容動詞サ変", "形容動詞ノ"=>"形容動詞ノ", "形容動詞タル"=>"形容動詞タル", "数詞"=>"数詞", "冠数詞"=>"冠数詞", "記号"=>"記号", "アルファベット"=>"アルファベット", "顔文字"=>"顔文字", "副詞00"=>"副詞00", "副詞01"=>"副詞01", "副詞02"=>"副詞02", "副詞03"=>"副詞03", "副詞04"=>"副詞04", "副詞06"=>"副詞06", "副詞11"=>"副詞11", "副詞12"=>"副詞12", "副詞13"=>"副詞13", "副詞14"=>"副詞14", "連体詞"=>"連体詞", "接続詞"=>"接続詞", "感動詞"=>"感動詞", "接頭語"=>"接頭語", "接頭人名"=>"接頭人名", "接頭地名"=>"接頭地名", "接頭数詞"=>"接頭数詞", "助数詞"=>"助数詞", "接尾語"=>"接尾語", "接尾人名"=>"接尾人名", "接尾地名"=>"接尾地名", "動詞ワ行五段名"=>"動詞ワ行五段名", "動詞ワ行五段"=>"動詞ワ行五段", "動詞ワう五段名"=>"動詞ワう五段名", "動詞ワう五段"=>"動詞ワう五段", "動詞カ行五段名"=>"動詞カ行五段名", "動詞カ行五段"=>"動詞カ行五段", "動詞カ促五段名"=>"動詞カ促五段名", "動詞カ促五段"=>"動詞カ促五段", "動詞サ行五段名"=>"動詞サ行五段名", "動詞サ行五段"=>"動詞サ行五段", "動詞タ行五段名"=>"動詞タ行五段名", "動詞タ行五段"=>"動詞タ行五段", "動詞ナ行五段名"=>"動詞ナ行五段名", "動詞ナ行五段"=>"動詞ナ行五段", "動詞マ行五段名"=>"動詞マ行五段名", "動詞マ行五段"=>"動詞マ行五段", "動詞ラ行五段名"=>"動詞ラ行五段名", "動詞ラ行五段"=>"動詞ラ行五段", "動詞ラい段名"=>"動詞ラい段名", "動詞ラい五段"=>"動詞ラい五段", "動詞ガ行五段名"=>"動詞ガ行五段名", "動詞ガ行五段"=>"動詞ガ行五段", "動詞バ行五段名"=>"動詞バ行五段名", "動詞バ行五段"=>"動詞バ行五段", "動詞ハ行四段"=>"動詞ハ行四段", "動詞一段"=>"動詞一段", "一段名詞"=>"一段名詞", "動詞カ変"=>"動詞カ変", "動詞サ変"=>"動詞サ変", "動詞ザ変"=>"動詞ザ変", "動詞ラ変"=>"動詞ラ変", "形容詞"=>"形容詞", "形容詞しく"=>"形容詞しく", "形容詞ガル"=>"形容詞ガル", "形容詞ュウ"=>"形容詞ュウ", "終助詞"=>"終助詞", "句読点"=>"句読点", "慣用句"=>"慣用句", "独立語"=>"独立語", "単漢字"=>"単漢字", "抑制単語"=>"抑制単語"}, "mozc"=>{"名詞"=>"名詞", "名詞非接尾"=>"名詞", "短縮よみ"=>"短縮よみ", "サジェストのみ"=>"サジェストのみ", "固有名詞"=>"固有名詞", "固有商品"=>"固有名詞", "人名"=>"人名", "姓"=>"姓", "名"=>"名", "組織"=>"組織", "地名"=>"地名", "国"=>"地名", "支庁"=>"地名", "県"=>"地名", "郡"=>"地名", "区"=>"地名", "市"=>"地名", "町"=>"地名", "村"=>"地名", "駅"=>"地名", "名詞サ変"=>"名詞サ変", "名詞サ変非接尾"=>"名詞サ変", "名詞ザ変"=>"名詞サ変", "名詞形動"=>"名詞形動", "名サ形動"=>"名詞形動", "副詞的名詞"=>"名詞", "形容動詞"=>"名詞形動", "形容動詞サ変"=>"名詞形動", "形容動詞ノ"=>"名詞形動", "形容動詞タル"=>"名詞形動", "数詞"=>"数", "冠数詞"=>"数", "記号"=>"記号", "アルファベット"=>"アルファベット", "顔文字"=>"顔文字", "副詞00"=>"副詞", "副詞01"=>"副詞", "副詞02"=>"副詞", "副詞03"=>"副詞", "副詞04"=>"副詞", "副詞06"=>"副詞", "副詞11"=>"副詞", "副詞12"=>"副詞", "副詞13"=>"副詞", "副詞14"=>"副詞", "連体詞"=>"連体詞", "接続詞"=>"接続詞", "感動詞"=>"感動詞", "接頭語"=>"接頭語", "接頭人名"=>"接頭語", "接頭地名"=>"接頭語", "接頭数詞"=>"接頭語", "助数詞"=>"助数詞", "接尾語"=>"接尾一般", "接尾人名"=>"接尾人名", "接尾地名"=>"接尾地名", "動詞ワ行五段名"=>"動詞ワ行五段", "動詞ワ行五段"=>"動詞ワ行五段", "動詞ワう五段名"=>"動詞ワ行五段", "動詞ワう五段"=>"動詞ワ行五段", "動詞カ行五段名"=>"動詞カ行五段", "動詞カ行五段"=>"動詞カ行五段", "動詞カ促五段名"=>"動詞カ行五段", "動詞カ促五段"=>"動詞カ行五段", "動詞サ行五段名"=>"動詞サ行五段", "動詞サ行五段"=>"動詞サ行五段", "動詞タ行五段名"=>"動詞タ行五段", "動詞タ行五段"=>"動詞タ行五段", "動詞ナ行五段名"=>"動詞ナ行五段", "動詞ナ行五段"=>"動詞ナ行五段", "動詞マ行五段名"=>"動詞マ行五段", "動詞マ行五段"=>"動詞マ行五段", "動詞ラ行五段名"=>"動詞ラ行五段", "動詞ラ行五段"=>"動詞ラ行五段", "動詞ラい段名"=>"動詞ラ行五段", "動詞ラい五段"=>"動詞ラ行五段", "動詞ガ行五段名"=>"動詞ガ行五段", "動詞ガ行五段"=>"動詞ガ行五段", "動詞バ行五段名"=>"動詞バ行五段", "動詞バ行五段"=>"動詞バ行五段", "動詞ハ行四段"=>"動詞ハ行四段", "動詞一段"=>"動詞一段", "一段名詞"=>"動詞一段", "動詞カ変"=>"動詞カ変", "動詞サ変"=>"動詞サ変", "動詞ザ変"=>"動詞ザ変", "動詞ラ変"=>"動詞ラ変", "形容詞"=>"形容詞", "形容詞しく"=>"形容詞", "形容詞ガル"=>"形容詞", "形容詞ュウ"=>"形容詞", "終助詞"=>"終助詞", "句読点"=>"句読点", "慣用句"=>"独立語", "独立語"=>"独立語", "単漢字"=>"独立語", "抑制単語"=>"抑制単語"}, "anthy"=>{"名詞"=>"T35", "名詞非接尾"=>"T35", "短縮よみ"=>"T35", "サジェストのみ"=>"T35", "固有名詞"=>"KK", "固有商品"=>"CN", "人名"=>"JN", "姓"=>"JN", "名"=>"JN", "組織"=>"KK", "地名"=>"CN", "国"=>"CN", "支庁"=>"CN", "県"=>"CN", "郡"=>"CN", "区"=>"CN", "市"=>"CN", "町"=>"CN", "村"=>"CN", "駅"=>"CN", "名詞サ変"=>"T30", "名詞サ変非接尾"=>"T30", "名詞ザ変"=>"T30", "名詞形動"=>"T05", "名サ形動"=>"T05", "副詞的名詞"=>"T35", "形容動詞"=>"T05", "形容動詞サ変"=>"T05", "形容動詞ノ"=>"T05", "形容動詞タル"=>"T05", "数詞"=>"NN", "冠数詞"=>"NN", "記号"=>"KJ", "アルファベット"=>"KJ", "顔文字"=>"T35", "副詞00"=>"F00", "副詞01"=>"F01", "副詞02"=>"F02", "副詞03"=>"F03", "副詞04"=>"F04", "副詞06"=>"F06", "副詞11"=>"F11", "副詞12"=>"F12", "副詞13"=>"F13", "副詞14"=>"F14", "連体詞"=>"RT", "接続詞"=>"CJ", "感動詞"=>"CK", "接頭語"=>"PRE", "接頭人名"=>"PRE", "接頭地名"=>"CNPRE", "接頭数詞"=>"NNPRE", "助数詞"=>"NN", "接尾語"=>"SUC", "接尾人名"=>"JNSUC", "接尾地名"=>"CNSUC1", "動詞ワ行五段名"=>"W5r", "動詞ワ行五段"=>"W5", "動詞ワう五段名"=>"U5r", "動詞ワう五段"=>"U5", "動詞カ行五段名"=>"K5r", "動詞カ行五段"=>"K5", "動詞カ促五段名"=>"C5r", "動詞カ促五段"=>"C5", "動詞サ行五段名"=>"S5r", "動詞サ行五段"=>"S5", "動詞タ行五段名"=>"T5r", "動詞タ行五段"=>"T5", "動詞ナ行五段名"=>"N5r", "動詞ナ行五段"=>"N5", "動詞マ行五段名"=>"M5r", "動詞マ行五段"=>"M5", "動詞ラ行五段名"=>"R5r", "動詞ラ行五段"=>"R5", "動詞ラい段名"=>"L5r", "動詞ラい五段"=>"L5", "動詞ガ行五段名"=>"G5r", "動詞ガ行五段"=>"G5", "動詞バ行五段名"=>"B5r", "動詞バ行五段"=>"B5", "動詞ハ行四段"=>"T35", "動詞一段"=>"KS", "一段名詞"=>"KS", "動詞カ変"=>"T35", "動詞サ変"=>"SX", "動詞ザ変"=>"ZX", "動詞ラ変"=>"T35", "形容詞"=>"KY", "形容詞しく"=>"KYT", "形容詞ガル"=>"KY", "形容詞ュウ"=>"KY", "終助詞"=>"T35", "句読点"=>"KJ", "慣用句"=>"KJ", "独立語"=>"KJ", "単漢字"=>"KJ", "抑制単語"=>"T35"}, "atok"=>{"名詞"=>"名詞", "名詞非接尾"=>"名詞", "短縮よみ"=>"名詞", "サジェストのみ"=>"名詞", "固有名詞"=>"固有一般", "固有商品"=>"固有商品", "人名"=>"固有人他", "姓"=>"固有人姓", "名"=>"固有人名", "組織"=>"固有組織", "地名"=>"固有地名", "国"=>"固有地名", "支庁"=>"固有地名", "県"=>"固有地名", "郡"=>"固有地名", "区"=>"固有地名", "市"=>"固有地名", "町"=>"固有地名", "村"=>"固有地名", "駅"=>"固有地名", "名詞サ変"=>"名詞サ変", "名詞サ変非接尾"=>"名詞サ変", "名詞ザ変"=>"名詞ザ変", "名詞形動"=>"名詞形動", "名サ形動"=>"名サ形動", "副詞的名詞"=>"名詞", "形容動詞"=>"形容動詞", "形容動詞サ変"=>"形容動詞", "形容動詞ノ"=>"形容動詞", "形容動詞タル"=>"形容動詞", "数詞"=>"数詞", "冠数詞"=>"冠数詞", "記号"=>"単漢字", "アルファベット"=>"単漢字", "顔文字"=>"独立語", "副詞00"=>"副詞", "副詞01"=>"副詞", "副詞02"=>"副詞", "副詞03"=>"副詞", "副詞04"=>"副詞", "副詞06"=>"副詞", "副詞11"=>"副詞", "副詞12"=>"副詞", "副詞13"=>"副詞", "副詞14"=>"副詞", "連体詞"=>"連体詞", "接続詞"=>"接続詞", "感動詞"=>"感動詞", "接頭語"=>"接頭語", "接頭人名"=>"接頭語", "接頭地名"=>"接頭語", "接頭数詞"=>"接頭語", "助数詞"=>"助数詞", "接尾語"=>"接尾語", "接尾人名"=>"接尾語", "接尾地名"=>"接尾語", "動詞ワ行五段名"=>"ワ行五段", "動詞ワ行五段"=>"ワ行五段", "動詞ワう五段名"=>"ワ行五段", "動詞ワう五段"=>"ワ行五段", "動詞カ行五段名"=>"カ行五段", "動詞カ行五段"=>"カ行五段", "動詞カ促五段名"=>"カ行五段", "動詞カ促五段"=>"カ行五段", "動詞サ行五段名"=>"サ行五段", "動詞サ行五段"=>"サ行五段", "動詞タ行五段名"=>"タ行五段", "動詞タ行五段"=>"タ行五段", "動詞ナ行五段名"=>"ナ行五段", "動詞ナ行五段"=>"ナ行五段", "動詞マ行五段名"=>"マ行五段", "動詞マ行五段"=>"マ行五段", "動詞ラ行五段名"=>"ラ行五段", "動詞ラ行五段"=>"ラ行五段", "動詞ラい段名"=>"ラ行五段", "動詞ラい五段"=>"ラ行五段", "動詞ガ行五段名"=>"ガ行五段", "動詞ガ行五段"=>"ガ行五段", "動詞バ行五段名"=>"バ行五段", "動詞バ行五段"=>"バ行五段", "動詞ハ行四段"=>"名詞", "動詞一段"=>"一段動詞", "一段名詞"=>"一段動詞", "動詞カ変"=>"名詞", "動詞サ変"=>"サ変動詞", "動詞ザ変"=>"ザ変動詞", "動詞ラ変"=>"名詞", "形容詞"=>"形容詞", "形容詞しく"=>"形容詞", "形容詞ガル"=>"形容詞", "形容詞ュウ"=>"形容詞", "終助詞"=>"名詞", "句読点"=>"単漢字", "慣用句"=>"独立語", "独立語"=>"独立語", "単漢字"=>"単漢字", "抑制単語"=>"名詞"}, "msime"=>{"名詞"=>"名詞", "名詞非接尾"=>"名詞非接尾", "短縮よみ"=>"短縮よみ", "サジェストのみ"=>"名詞", "固有名詞"=>"固有名詞", "固有商品"=>"固有名詞", "人名"=>"名", "姓"=>"姓", "名"=>"名", "組織"=>"社名", "地名"=>"地名その他", "国"=>"国", "支庁"=>"支庁", "県"=>"県", "郡"=>"郡", "区"=>"区", "市"=>"市", "町"=>"町", "村"=>"村", "駅"=>"駅", "名詞サ変"=>"さ変名詞", "名詞サ変非接尾"=>"さ変名詞非接尾", "名詞ザ変"=>"ざ変名詞", "名詞形動"=>"形動名詞", "名サ形動"=>"さ変形動名詞", "副詞的名詞"=>"副詞的名詞", "形容動詞"=>"形容動詞", "形容動詞サ変"=>"形容動詞", "形容動詞ノ"=>"形容動詞ノ", "形容動詞タル"=>"形容動詞タル", "数詞"=>"数量", "冠数詞"=>"冠数詞", "記号"=>"単漢字", "アルファベット"=>"単漢字", "顔文字"=>"顔文字", "副詞00"=>"副詞", "副詞01"=>"副詞", "副詞02"=>"副詞", "副詞03"=>"副詞", "副詞04"=>"副詞", "副詞06"=>"副詞", "副詞11"=>"副詞", "副詞12"=>"副詞", "副詞13"=>"副詞", "副詞14"=>"副詞", "連体詞"=>"連体詞", "接続詞"=>"接続詞", "感動詞"=>"感動詞", "接頭語"=>"接頭語", "接頭人名"=>"姓名接頭語", "接頭地名"=>"地名接頭語", "接頭数詞"=>"接頭語", "助数詞"=>"助数詞", "接尾語"=>"接尾語", "接尾人名"=>"姓名接尾語", "接尾地名"=>"地名接尾語", "動詞ワ行五段名"=>"あわ行五段", "動詞ワ行五段"=>"あわ行五段", "動詞ワう五段名"=>"あわ行五段", "動詞ワう五段"=>"あわ行五段", "動詞カ行五段名"=>"か行五段", "動詞カ行五段"=>"か行五段", "動詞カ促五段名"=>"か行五段", "動詞カ促五段"=>"か行五段", "動詞サ行五段名"=>"さ行五段", "動詞サ行五段"=>"さ行五段", "動詞タ行五段名"=>"た行五段", "動詞タ行五段"=>"た行五段", "動詞ナ行五段名"=>"な行五段", "動詞ナ行五段"=>"な行五段", "動詞マ行五段名"=>"ま行五段", "動詞マ行五段"=>"ま行五段", "動詞ラ行五段名"=>"ら行五段", "動詞ラ行五段"=>"ら行五段", "動詞ラい段名"=>"ら行五段", "動詞ラい五段"=>"ら行五段", "動詞ガ行五段名"=>"が行五段", "動詞ガ行五段"=>"が行五段", "動詞バ行五段名"=>"ば行五段", "動詞バ行五段"=>"ば行五段", "動詞ハ行四段"=>"名詞", "動詞一段"=>"一段動詞", "一段名詞"=>"一段動詞", "動詞カ変"=>"名詞", "動詞サ変"=>"さ変動詞", "動詞ザ変"=>"ざ変動詞", "動詞ラ変"=>"名詞", "形容詞"=>"形容詞", "形容詞しく"=>"形容詞", "形容詞ガル"=>"形容詞ガル", "形容詞ュウ"=>"形容詞ュウ", "終助詞"=>"名詞", "句読点"=>"単漢字", "慣用句"=>"慣用句", "独立語"=>"慣用句", "単漢字"=>"単漢字", "抑制単語"=>"名詞"}, "wnn"=>{"名詞"=>"名詞", "名詞非接尾"=>"名詞", "短縮よみ"=>"名詞", "サジェストのみ"=>"名詞", "固有名詞"=>"固有名詞", "固有商品"=>"名詞", "人名"=>"人名", "姓"=>"人名", "名"=>"人名", "組織"=>"名詞", "地名"=>"地名", "国"=>"地名", "支庁"=>"地名", "県"=>"地名", "郡"=>"地名", "区"=>"地名", "市"=>"地名", "町"=>"地名", "村"=>"地名", "駅"=>"地名", "名詞サ変"=>"サ行(する)&名詞", "名詞サ変非接尾"=>"サ行(する)&名詞", "名詞ザ変"=>"サ行(する)&名詞", "名詞形動"=>"形容動詞&名詞", "名サ形動"=>"サ行(する)&名詞", "副詞的名詞"=>"名詞", "形容動詞"=>"形容動詞", "形容動詞サ変"=>"形容動詞", "形容動詞ノ"=>"形容動詞", "形容動詞タル"=>"形容動詞(たる)", "数詞"=>"数詞", "冠数詞"=>"名詞", "記号"=>"名詞", "アルファベット"=>"名詞", "顔文字"=>"名詞", "副詞00"=>"名詞", "副詞01"=>"名詞", "副詞02"=>"名詞", "副詞03"=>"名詞", "副詞04"=>"名詞", "副詞06"=>"名詞", "副詞11"=>"名詞", "副詞12"=>"名詞", "副詞13"=>"名詞", "副詞14"=>"名詞", "連体詞"=>"名詞", "接続詞"=>"名詞", "感動詞"=>"名詞", "接頭語"=>"名詞", "接頭人名"=>"名詞", "接頭地名"=>"名詞", "接頭数詞"=>"接頭助数詞", "助数詞"=>"助数詞", "接尾語"=>"接尾語", "接尾人名"=>"名詞", "接尾地名"=>"名詞", "動詞ワ行五段名"=>"ワ行五段", "動詞ワ行五段"=>"ワ行五段", "動詞ワう五段名"=>"ワ行五段", "動詞ワう五段"=>"ワ行五段", "動詞カ行五段名"=>"カ行五段", "動詞カ行五段"=>"カ行五段", "動詞カ促五段名"=>"カ行五段", "動詞カ促五段"=>"カ行五段", "動詞サ行五段名"=>"サ行五段", "動詞サ行五段"=>"サ行五段", "動詞タ行五段名"=>"タ行五段", "動詞タ行五段"=>"タ行五段", "動詞ナ行五段名"=>"名詞", "動詞ナ行五段"=>"名詞", "動詞マ行五段名"=>"マ行五段", "動詞マ行五段"=>"マ行五段", "動詞ラ行五段名"=>"ラ行五段", "動詞ラ行五段"=>"ラ行五段", "動詞ラい段名"=>"ラ行五段", "動詞ラい五段"=>"ラ行五段", "動詞ガ行五段名"=>"ガ行五段", "動詞ガ行五段"=>"ガ行五段", "動詞バ行五段名"=>"バ行五段", "動詞バ行五段"=>"バ行五段", "動詞ハ行四段"=>"名詞", "動詞一段"=>"一段", "一段名詞"=>"一段&名詞", "動詞カ変"=>"名詞", "動詞サ変"=>"サ行(する)", "動詞ザ変"=>"ザ行(ずる)", "動詞ラ変"=>"名詞", "形容詞"=>"形容詞", "形容詞しく"=>"形容詞", "形容詞ガル"=>"形容詞", "形容詞ュウ"=>"形容詞", "終助詞"=>"名詞", "句読点"=>"名詞", "慣用句"=>"名詞", "独立語"=>"名詞", "単漢字"=>"名詞", "抑制単語"=>"名詞"}}
# coding: utf-8
#
#  Copyright (C) 2017 Noriaki TANAKA (dtana@startide.jp)
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License as
#  published by the Free Software Foundation; either version 2 of the
#  License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#  General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#  02111-1307, USA.
#
# $Id: normkana.rb,v 1.2 2017/01/17 11:19:53 dtana Exp $
#
$kana_t = {
"ｦ"=>"を",
"ｧ"=>"ぁ",
"ｨ"=>"ぃ",
"ｩ"=>"ぅ",
"ｪ"=>"ぇ",
"ｫ"=>"ぉ",
"ｬ"=>"ゃ",
"ｭ"=>"ゅ",
"ｮ"=>"ょ",
"ｯ"=>"っ",
"ｰ"=>"ー",
"ｱ"=>"あ",
"ｲ"=>"い",
"ｳ"=>"う",
"ｴ"=>"え",
"ｵ"=>"お",
"ｶ"=>"か",
"ｷ"=>"き",
"ｸ"=>"く",
"ｹ"=>"け",
"ｺ"=>"こ",
"ｻ"=>"さ",
"ｼ"=>"し",
"ｽ"=>"す",
"ｾ"=>"せ",
"ｿ"=>"そ",
"ﾀ"=>"た",
"ﾁ"=>"ち",
"ﾂ"=>"つ",
"ﾃ"=>"て",
"ﾄ"=>"と",
"ﾅ"=>"な",
"ﾆ"=>"に",
"ﾇ"=>"ぬ",
"ﾈ"=>"ね",
"ﾉ"=>"の",
"ﾊ"=>"は",
"ﾋ"=>"ひ",
"ﾌ"=>"ふ",
"ﾍ"=>"へ",
"ﾎ"=>"ほ",
"ﾏ"=>"ま",
"ﾐ"=>"み",
"ﾑ"=>"む",
"ﾒ"=>"め",
"ﾓ"=>"も",
"ﾔ"=>"や",
"ﾕ"=>"ゆ",
"ﾖ"=>"よ",
"ﾗ"=>"ら",
"ﾘ"=>"り",
"ﾙ"=>"る",
"ﾚ"=>"れ",
"ﾛ"=>"ろ",
"ﾜ"=>"わ",
"ﾝ"=>"ん",
"ｶﾞ"=>"が",
"ｷﾞ"=>"ぎ",
"ｸﾞ"=>"ぐ",
"ｹﾞ"=>"げ",
"ｺﾞ"=>"ご",
"ｻﾞ"=>"ざ",
"ｼﾞ"=>"じ",
"ｽﾞ"=>"ず",
"ｾﾞ"=>"ぜ",
"ｿﾞ"=>"ぞ",
"ﾀﾞ"=>"だ",
"ﾁﾞ"=>"ぢ",
"ﾂﾞ"=>"づ",
"ﾃﾞ"=>"で",
"ﾄﾞ"=>"ど",
"ﾊﾞ"=>"ば",
"ﾋﾞ"=>"び",
"ﾌﾞ"=>"ぶ",
"ﾍﾞ"=>"べ",
"ﾎﾞ"=>"ぼ",
"ﾊﾟ"=>"ぱ",
"ﾋﾟ"=>"ぴ",
"ﾌﾟ"=>"ぷ",
"ﾍﾟ"=>"ぺ",
"ﾎﾟ"=>"ぽ",
"ﾞ"=>"゛",
"ﾟ"=>"゜",
"ヲ"=>"を",
"ァ"=>"ぁ",
"ィ"=>"ぃ",
"ゥ"=>"ぅ",
"ェ"=>"ぇ",
"ォ"=>"ぉ",
"ャ"=>"ゃ",
"ュ"=>"ゅ",
"ョ"=>"ょ",
"ッ"=>"っ",
"ー"=>"ー",
"ア"=>"あ",
"イ"=>"い",
"ウ"=>"う",
"エ"=>"え",
"オ"=>"お",
"カ"=>"か",
"キ"=>"き",
"ク"=>"く",
"ケ"=>"け",
"コ"=>"こ",
"サ"=>"さ",
"シ"=>"し",
"ス"=>"す",
"セ"=>"せ",
"ソ"=>"そ",
"タ"=>"た",
"チ"=>"ち",
"ツ"=>"つ",
"テ"=>"て",
"ト"=>"と",
"ナ"=>"な",
"ニ"=>"に",
"ヌ"=>"ぬ",
"ネ"=>"ね",
"ノ"=>"の",
"ハ"=>"は",
"ヒ"=>"ひ",
"フ"=>"ふ",
"ヘ"=>"へ",
"ホ"=>"ほ",
"マ"=>"ま",
"ミ"=>"み",
"ム"=>"む",
"メ"=>"め",
"モ"=>"も",
"ヤ"=>"や",
"ユ"=>"ゆ",
"ヨ"=>"よ",
"ラ"=>"ら",
"リ"=>"り",
"ル"=>"る",
"レ"=>"れ",
"ロ"=>"ろ",
"ワ"=>"わ",
"ン"=>"ん",
"ガ"=>"が",
"ギ"=>"ぎ",
"グ"=>"ぐ",
"ゲ"=>"げ",
"ゴ"=>"ご",
"ザ"=>"ざ",
"ジ"=>"じ",
"ズ"=>"ず",
"ゼ"=>"ぜ",
"ゾ"=>"ぞ",
"ダ"=>"だ",
"ヂ"=>"ぢ",
"ヅ"=>"づ",
"デ"=>"で",
"ド"=>"ど",
"バ"=>"ば",
"ビ"=>"び",
"ブ"=>"ぶ",
"ベ"=>"べ",
"ボ"=>"ぼ",
"パ"=>"ぱ",
"ピ"=>"ぴ",
"プ"=>"ぷ",
"ペ"=>"ぺ",
"ポ"=>"ぽ",
}

class String
    def norm_kana
        s = self.strip
        r = ''
        while s.size != 0
            t = ''
            if 2 <= s.size && (t = $kana_t[s[0,2]])
                s = s[2..-1]
            elsif t = $kana_t[s[0]]
                s = s[1..-1]
            else
                t = s[0]
                s = s[1..-1]
            end
            r += t
        end
        r
    end
end

def usage
    STDERR.printf "Usage: userdic <from> <to> < input > output\n"
    STDERR.printf "       from, to = mozc, google, anthy, canna, "
    STDERR.printf "atok, msime, wnn, apple, generic\n"
    exit 1
end

def getr(type, s)
    s.strip!
    return nil if (s == '' || s =~ /^!/ || s[0] == "\\")
    case type
    when 'generic', 'mozc', 'msime', 'wnn'
        pron, word, prop = s.split(/\t+/)
        prop_ = $hinshi_f[type][prop]
    when 'google'
        return getr('mozc', s)
    when 'atok'
        s.gsub!(/[､,]/, "\t") if s !~ /\t/
        pron, word, prop = s.split(/\t+/)
        pron = pron.norm_kana
        prop = prop.gsub(/\*$/, '') if prop
        prop_ = $hinshi_f[type][prop]
    when 'anthy'
        pron, prop, word = s.split
        prop = prop.gsub('#', '').gsub(/\*.*$/, '')
        prop_ = $hinshi_f[type][prop]
    when 'canna'
        return getr('anthy', s)
    when 'apple'
        pron, word = s.split(/\t+/)
        prop_ = '名詞'
    else
        STDERR.printf "%s: not supported yet\n", type
        usage
    end
    if word == nil
        STDERR.printf "%s: incorrect record\n", s
        return nil
    end
    if prop_ == nil
        STDERR.printf "%s: Unknown 品詞: %s\n", s, prop
        prop_ = '名詞'
    end
    sprintf "%s\t%s\t%s", pron, word, prop_
end

def putr(type, s)
    return nil if s == nil
    pron, word, prop = s.split(/\t+/)
    case type
    when 'generic', 'mozc', 'atok', 'msime', 'wnn'
        prop = $hinshi_t[type][prop]
        r = sprintf "%s\t%s\t%s", pron, word, prop
    when 'apple'
        r = sprintf "%s\t%s", pron, word
    when 'anthy'
        prop = $hinshi_t[type][prop]
        r = sprintf "%s #%s*500 %s", pron, prop, word
    when 'google'
        return putr('mozc', s)
    when 'canna'
        return putr('anthy', s)
    else
        STDERR.printf "%s: not supported yet\n", type
        usage
    end
    r
end

def puth(type, n)
    case type
    when 'msime'
        return "!Microsoft IME Dictionary Tool"
    when 'atok'
        return "!!ATOK_TANGO_TEXT_HEADER_1"
    when 'wnn'
        return sprintf("\\comment \n\\total %d\n\n", n)
    end
    nil
end

class Array
    def save_with_en(en, f = STDOUT)
        case en
        when 'UTF-16'
            f.binmode
            f.printf "\xff\xfe"
            self.each {|s| f.write (s + "\n").encode('UTF-16LE')}
        else
            self.each {|s| f.puts s.encode(en, :undef => :replace)}
        end
    end
    def encoding(type)
        case type
        when 'msime', 'atok'
            e = 'UTF-16'
        when 'wnn', 'canna'
            e = 'EUC-JP'
        else
            e = 'UTF-8'
        end
        e
    end
    def save(type)
        r = [puth(type, self.size)]
        r += self.map do |s|
            putr(type, s)
        end
        r.delete(nil)
        r = r.encode_plist if type == 'apple'
        r.save_with_en(encoding(type))
    end

    def encode_plist
        r = ['<?xml version="1.0" encoding="UTF-8"?>' +
             '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" ' +
             '"http://www.apple.com/DTDs/PropertyList-1.0.dtd">' +
             '<plist version="1.0"><array>']
        self.each do |s|
            pron, word = s.split(/\t+/)
            t =  "<dict>\n"
            t += "<key>phrase</key>\n"
            t += sprintf("<string>%s</string>\n", word)
            t += "<key>shortcut</key>\n"
            t += sprintf("<string>%s</string>\n", pron)
            t += "</dict>\n"
            r << t
        end
        r + ['</array></plist>']
    end
    def decode_plist
        data = ''
        self.each {|s| data += s}
        r = []
        doc = REXML::Document.new(data)
        doc.elements.each('plist/array/dict') do |e|
            word = e.elements['string[1]'].text
            pron = e.elements['string[2]'].text
            r << pron + "\t" + word
        end
        r
    end
end

def load_with_en(f = STDIN)
    f.binmode
    r = f.read
    t = ''
    ['UTF-16', 'CP932', 'EUC-JP', 'UTF-8'].each do |en|
        begin
            t = r.encode('UTF-8', en)
        rescue
            # STDERR.printf "%s: invalid encoding\n", en
            next
        end
        # STDERR.puts en
        break
    end
    t.split("\n")
end

def load(type)
    t = load_with_en
    t = t.decode_plist if type == 'apple'
    r = t.map do |s|
        getr(type, s)
    end
    r.delete(nil)
    r
end

def expand_require(path)
    r = []
    open(path).each do |s|
        c, a = s.split
        if c == 'require' && a =~ /\'\./
            p = a[1,a.size - 2]
            r += expand_require(p)
        else
            r << s
        end
    end
    r
end

if ARGV[0] == 'build'
    expand_require('userdic.rb').each {|s| puts s}
    exit
end
usage if ARGV.size != 2
load(ARGV[0]).save(ARGV[1])
