2016年9月アーカイブ

先日ツイッターでアンケートを採りました。「スマホで使っている日本語入力アプリはなんですか」というものです。選択肢は、

  1. Google日本語入力
  2. Simeji
  3. ATOK
  4. その他

です。思いの外Simejiのシェアが高かったので、何か野良辞書を作るときにSimeji形式のものは欠かせないだろうという印象を受けました。

ATOKやMS-IME、Google日本語入力は細かいところを除き、基本的に「よみ(TAB)単語」形式です。

読み1 (TAB区切り) 単語1 (改行)
読み2 (TAB区切り) 単語2 (改行)



読みX (TAB区切り) 単語X (改行)

ところがSimeji形式は改行無しの1行で「ヘッダー1:"単語1,"単語2",・・・,ヘッダー2:"読み1","読み2",・・・フッター」というちょっとというか相当変わったものです。

{"EN_KEY":[],"EN_VALUE":[],"JAJP_VALUE":["単語1","単語2",・・・"単語X"],"JAJP_KEY":["読み1","読み2",・・・"読みX"]}

そういうわけで、ある程度単語数が多い場合は何かしら変換プログラムを作らないと大変だと分かりました。

 

まず、シート"Simeji"に、ヘッダー1、ヘッダー2、フッターをそれぞれセルに格納しておきます。コード内に書いてもいいんですが、長いしダブルクォーテーションが多いので間違えないように。

別のシート"Dic"に辞書を貼り付けます。ここら辺はとりあえず手動です。また、コメント行なども手動で削除しておきます。

コードの流れとしては、

とりあえず上書き保存→最終行を調べる→ヘッダー1を格納→単語列を""で囲って格納(for next)→ヘッダー2を格納→読み列を""で囲って格納(for next)→フッターを格納→新規シートを作ってA1セルに書き込む

という感じ。最初に上書き保存するのは最終行の誤認識を防ぐため。新規シートは日付と時刻でシート名を作ります。A1セルに入れてるのも手抜きで。手動でテキストエディタにコピペしてUTF-8/LFでファイル名"simeji_user_dic.txt"で保存して完了です。

コードです。ちょっと適当です。

Sub Dic2Simeji()

    Dim StrDic As String
    Dim StrSimejiHeader1 As String
    Dim StrSimejiHeader2 As String
    Dim StrSimejiFooter As String
    Dim NewShtName As String
    Dim DblRowCount As Double

    ' /// 最初に上書き保存する ///
    ActiveWorkbook.Save
    
    ' /// 最終行を取得 ///
    DblRowCount = Worksheets("Dic").Cells.SpecialCells(xlLastCell).Row

    StrSimejiHeader1 = Worksheets("Simeji").Cells(2, 2).Text
    StrSimejiHeader2 = Worksheets("Simeji").Cells(3, 2).Text
    StrSimejiFooter = Worksheets("Simeji").Cells(4, 2).Text

    StrDic = ""

    ' /// ヘッダー1を格納 ///
    StrDic = StrSimejiHeader1

    ' /// 単語列を格納 ///
    For n = 1 To DblRowCount - 1
        StrDic = StrDic & Chr(34) & Worksheets("Dic").Cells(n, 2).Text & Chr(34) & ","
    Next n
    StrDic = StrDic & Chr(34) & Worksheets("Dic").Cells(DblRowCount, 2).Text & Chr(34)

    ' /// ヘッダー2を格納 ///
    StrDic = StrDic & StrSimejiHeader2

    ' /// 読み列を格納 ///
    For n = 1 To DblRowCount - 1
        StrDic = StrDic & Chr(34) & Worksheets("Dic").Cells(n, 1).Text & Chr(34) & ","
    Next n
    StrDic = StrDic & Chr(34) & Worksheets("Dic").Cells(DblRowCount, 1).Text & Chr(34)

    ' /// フッターを格納 ///
    StrDic = StrDic & StrSimejiFooter

    ' /// Simeji,Dic以外の古いシートを削除 ///
    If Worksheets.Count > 2 Then
        For n = Worksheets.Count To 3 Step -1
            Application.DisplayAlerts = False
            Worksheets(n).Delete
            Application.DisplayAlerts = True
        Next n
    End If

    ' /// 新しいシートを作成(シート名は日付と時刻から生成)///
    NewShtName = CStr(Year(Date) & Month(Date) & Day(Date) & Hour(Time) & Minute(Time) & Second(Time))
    With Worksheets.Add(after:=Worksheets(Worksheets.Count))
        .Name = NewShtName
    End With

    ' /// 作成したシートのA1セルにStrDicを書き込む
    ActiveSheet.Cells(1, 1).Value = StrDic

    MsgBox "A1セルをコピーして任意のテキストエディタに貼り付けてください。" _
            & vbCrLf & "エンコード:UTF-8, 改行:LF で保存する。"
    
End Sub

[雑記] 近況

ブログの移行は結局出来ず。ジャンルが全く異なる他のブログをはてなで書いています。

近況

  • 2016年前半 いろいろありました
  • 2016年7月 転職しました
  • 2016年7月 引っ越しました
  • 2016年7月 SONY SRS-ZR7買いました
  • 2016年8月 Lenovo G50-80買いました(今考えると無駄だった)
  • 2016年8月 NEC Aterm WG2200HP買いました
  • 2016年9月 I-O DATA LCD-RDT242XPB買いました
  • 2016年9月 YAMAHA YAS-106買いました
  • 2016年9月 SONY BDP-S1500買いました(2015年下位モデル)
  • 2016年9月 各種IMの辞書仕様とか調べてます(趣味)
  • スマホはたぶん増えてません。取り立てて欲しい機種もないし
  • 辞書がらみでiOS端末が欲しいのでiPod touchとか狙ってるけど2万円払うんだったらWalkman A20欲しいと思いませんか?
  • その他白物家電は冷蔵庫洗濯乾燥機電子レンジトースター電気ケトル除湿器、家具はベッド机椅子など
  • ダイソンV8がもの凄く欲しい
  • My SQLのバージョンアップ調べたけど僕には無理そうです(このブログ)

 

カスタム検索
Access Counter
Powered by Movable Type 4.22-ja

2016年9月

Sun Mon Tue Wed Thu Fri Sat
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30