end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

sudachipy for python による sudachiユーザ辞書の利用 (形態素解析)

先程のentryの続きです

sudachi.json

元の sudachi.json をコピーし、「"userDict" : [~] 」を追加しています

{
    "systemDict" : null,
    "characterDefinitionFile" : "char.def",
    "userDict" : ["c:/Users/end0t/tmp/QA_SGST/sudachi_user_dic/user.dic"],
    "inputTextPlugin" : [
        { "class" : "com.worksap.nlp.sudachi.DefaultInputTextPlugin" },
        { "class" : "com.worksap.nlp.sudachi.ProlongedSoundMarkPlugin",
          "prolongedSoundMarks": ["ー", "-", "⁓", "〜", "〰"],
          "replacementSymbol": "ー"},
        { "class": "com.worksap.nlp.sudachi.IgnoreYomiganaPlugin",
          "leftBrackets": ["(", "("],
          "rightBrackets": [")", ")"],
          "maxYomiganaLength": 4}
    ],
    "oovProviderPlugin" : [
        { "class" : "com.worksap.nlp.sudachi.MeCabOovPlugin",
          "charDef" : "char.def",
          "unkDef" : "unk.def" },
        { "class" : "com.worksap.nlp.sudachi.SimpleOovPlugin",
          "oovPOS" : [ "補助記号", "一般", "*", "*", "*", "*" ],
          "leftId" : 5968,
          "rightId" : 5968,
          "cost" : 3857 }
    ],
    "pathRewritePlugin" : [
        { "class" : "com.worksap.nlp.sudachi.JoinNumericPlugin",
          "enableNormalize" : true },
        { "class" : "com.worksap.nlp.sudachi.JoinKatakanaOovPlugin",
          "oovPOS" : [ "名詞", "普通名詞", "一般", "*", "*", "*" ],
          "minLength" : 3
        }
    ]
}

python

#from sudachipy import tokenizer
from sudachipy import dictionary

sudachi_conf_json = "c:/Users/end0t/tmp/QA_SGST/sudachi_user_dic/sudachi.json"
def main():
    # ↓sudachipy.tokenizer.Tokenizer
    tokenizer_obj = dictionary.Dictionary(config_path=sudachi_conf_json).create()
    print( tokenizer_obj )
    
    text = "ユーザと、ユーザー、USERは、同義語です"
    tokens = tokenizer_obj.tokenize(text)
    for token in tokens:
        print( token.surface(),
               token.part_of_speech(),
               token.reading_form(),
               token.normalized_form() )

if __name__ == '__main__':
    main()

実行結果

ユーザ ('名詞', '普通名詞', '一般', '*', '*', '*') ユーザ ユーザー
と ('助詞', '格助詞', '*', '*', '*', '*') ト と
、 ('補助記号', '読点', '*', '*', '*', '*') 、 、
ユーザー ('名詞', '普通名詞', '一般', '*', '*', '*') ユーザー ユーザー
、 ('補助記号', '読点', '*', '*', '*', '*') 、 、
USER ('名詞', '普通名詞', '一般', '*', '*', '*') ユーザー ユーザー
は ('助詞', '係助詞', '*', '*', '*', '*') ハ は
、 ('補助記号', '読点', '*', '*', '*', '*') 、 、
同義語 ('名詞', '普通名詞', '一般', '*', '*', '*') ドウギゴ 同義語
です ('助動詞', '*', '*', '*', '助動詞-デス', '終止形-一般') デス です