美文网首页
Janome分词

Janome分词

作者: Rebui | 来源:发表于2020-10-16 11:28 被阅读0次

    ReferencePython, Janomeで日本語の形態素解析、分かち書き(単語分割)

    基本使用方法

    from janome.tokenizer import Tokenizer
    t = Tokenizer()
    text = "すもももももももものうち"
    print(type(t.tokenize(text)))
    # <class 'generator'>
    for token in t.tokenize(text):
        # print(type(token))    # <class 'janome.tokenizer.Token'>
       print(token)
    # すもも   名詞,一般,*,*,*,*,すもも,スモモ,スモモ
    # も 助詞,係助詞,*,*,*,*,も,モ,モ
    # もも    名詞,一般,*,*,*,*,もも,モモ,モモ
    # も 助詞,係助詞,*,*,*,*,も,モ,モ
    # もも    名詞,一般,*,*,*,*,もも,モモ,モモ
    # の 助詞,連体化,*,*,*,*,の,ノ,ノ
    # うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
    

    Token的属性

    Token对象有以下属性:

    surface(表層形)

    print([token.surface for token in t.tokenize('走れ')])
    # ['走れ']
    

    part_of_speech(品詞)

    for token in t.tokenize('走れ'):
        print(token.part_of_speech)
        # 動詞,自立,*,*
        # part_of_speech format: [品詞,品詞細分類1,品詞細分類2,品詞細分類3]
        print(token.part_of_speech.split(","))
        # ['動詞', '自立', '*', '*']
    

    返回一个词性的list,品词细分类为空时,显示 *

    infl_type(活用型)

    base_form(基本形、見出し語)

    reading(読み)

    phonetic(発音)

    for token in t.tokenize('走れ'):
        print(token.infl_type)
        # 五段・ラ行
        print(token.base_form)
        # 走る
        print(token.reading)
        # ハシレ
        print(token.phonetic)
        # ハシレ
    

    属性为空时,显示 *

    Janome分词

    将tokenize() 方法的参数wakati设为True,返回的是表层形字符串列表,而不是 token对象,相当于原来的 token.surface

    s = '走れと言われたので走ると言った'
    t = Tokenizer()
    print([token for token in t.tokenize(s, wakati=True)])
    # ['走れ', 'と', '言わ', 'れ', 'た', 'ので', '走る', 'と', '言っ', 'た']
    

    也可以在实例化Tokenizer对象的时候,直接设定参数wakati为True。

    t_wakati = Tokenizer(wakati=True)
    print([token for token in t_wakati.tokenize(s)])
    # ['走れ', 'と', '言わ', 'れ', 'た', 'ので', '走る', 'と', '言っ', 'た']
    

    有时候只需要 token对象中的部分属性,或进行简单地词性过滤,就可以配合列表操作。

    print([token.part_of_speech.split(',')[0] for token in t.tokenize(s)])
    # ['動詞', '助詞', '動詞', '動詞', '助動詞', '助詞', '動詞', '助詞', '動詞', '助動詞']
    
    print([token.surface for token in t.tokenize(s)
           if token.part_of_speech.startswith('動詞')])
    # ['走れ', '言わ', 'れ', '走る', '言っ']
    

    统计词频
    使用Python标准库collections的Counter类。
    Counter的详细使用方法参考:PythonのCounterでリストの各要素の出現個数をカウント

    from janome.tokenizer import Tokenizer
    import collections
    
    t = Tokenizer()
    s = '人民の人民による人民のための政治'
    
    c = collections.Counter(t.tokenize(s, wakati=True))
    print(type(c))
    # <class 'collections.Counter'>
    print(c)
    # Counter({'人民': 3, 'の': 3, 'による': 1, 'ため': 1, '政治': 1})
    print(c['人民'])
    # 3
    print(c['国民'])
    # 0
    
    mc = c.most_common()    # 返回(单词,出现次数)元组列表,按出现次数从多到少顺序排列
    print(mc)
    # [('人民', 3), ('の', 3), ('による', 1), ('ため', 1), ('政治', 1)]
    print(mc[0][0])
    # 人民
    
    words, counts = zip(*c.most_common())
    print(words)
    # ('人民', 'の', 'による', 'ため', '政治')
    print(counts)
    # (3, 3, 1, 1, 1)
    

    统计词频时加上词性过滤

    s = '走れと言われたので走ると言った'
    print(collections.Counter(token.base_form for token in t.tokenize(s)))
    # Counter({'走る': 2, 'と': 2, '言う': 2, 'た': 2, 'れる': 1, 'ので': 1})
    print(type(token.base_form for token in t.tokenize(s)))
    # <class 'generator'>
    
    print(collections.Counter(token.base_form for token in t.tokenize(s)
                              if token.part_of_speech.startswith('動詞,自立')))
    # Counter({'走る': 2, '言う': 2})
    print(collections.Counter(token.part_of_speech.split(',')[0] for token in t.tokenize(s)))
    # Counter({'動詞': 5, '助詞': 3, '助動詞': 2})
    

    相关文章

      网友评论

          本文标题:Janome分词

          本文链接:https://www.haomeiwen.com/subject/otkopktx.html