python中国語分詞ツール


python中国語分詞ツール
  • jieba,https://github.com/fxsjy/jieba
  • jieba_fast,https://github.com/deepcs233/jieba_fast
  • nltk,https://github.com/nltk/nltk
  • FoolNLTK,https://github.com/rockyzhengwu/FoolNLTK/blob/master/README_CH.md
  • thulac,https://github.com/thunlp/THULAC-Python
  • genius,https://github.com/duanhongyi/genius
  • snownlp,https://github.com/isnowfy/snownlp
  • pynlpir,https://github.com/tsroten/pynlpir

  • jieba
    「結巴」中国語の分詞:https://github.com/fxsjy/jiebaアルゴリズム1)接頭辞辞書に基づいて効率的な語図スキャンを実現し,文中の漢字の可能なすべての成語状況からなる有向無環図(DAG)を生成する.2)動的計画を採用して最大確率経路を探し、語周波数に基づく最大切り分けの組み合わせを探し出す.3)未登録語については,漢字成語能力に基づくHMMモデルを用い,Viterbiアルゴリズムを用いた.
    1、分詞
    3つの分詞モードをサポートします:正確なモード、文を最も正確に切開しようとして、テキスト分析に適しています;全モードは、文の中のすべての成語可能な言葉をスキャンし、速度は非常に速いが、曖昧さを解決することはできない.検索エンジンモードは、正確なモードに基づいて、長語を再び切り分け、リコール率を高め、検索エンジンの分詞に適しています.
    import jieba
    
    seg1 = jieba.cut("    python,  。", cut_all=True)
    print('   :', ' '.join(seg1))
    seg2 = jieba.cut("    python,  。", cut_all=False)
    print("    (      ):", ' '.join(seg2))
    seg3 = jieba.cut_for_search("    python,  。")
    print("      :", ' '.join(seg3))
    print("
    "
    ) seg_list1 = jieba.lcut(" python, 。", cut_all=True) print(seg_list1) seg_list2 = jieba.lcut(" python, 。", cut_all=False) print(seg_list2) seg_list_search = jieba.lcut_for_search(" python, 。") print(seg_list_search)

    出力:
       :              python      
        (      ):       python ,    。
          :       python ,    。
    
    ['  ', '   ', '  ', '  ', 'python', '', '  ', '', '']
    ['  ', '  ', 'python', ',', '  ', '。']
    ['  ', '  ', 'python', ',', '  ', '。']

    特に:jieba.Cutおよびjieba.cut_for_searchが返す構造は反復可能なgeneratorであり,forループを用いて分詞後に得られる各語を得るかjieba.lcutおよびjieba.lcut_for_searchはlistに直接戻ります.
    2、品詞表記
    import jieba.posseg as pseg
    
    words = pseg.cut("    ,    。")
    for word, flag in words:
        print('%s %s' % (word, flag))

    出力:
         n
    , x
         l
    。 x

    3、キーワード抽出
    TF-IDFアルゴリズムに基づくキーワード抽出構文:jieba.analyse.extract_tags(sentence,topK=20,withWeight=False,allowPOS=()sentenceは抽出されるテキストtopKがいくつかのTF/IDF重みを返す最大のキーワードであり、デフォルト値は20 withWeightがキーワード重み値を一括して返すかどうかであり、デフォルト値はFalse allowPOSが所定の語性を指す語のみを含み、デフォルト値は空であり、フィルタリングされない
    import jieba.analyse
    
    keyword = jieba.analyse.extract_tags('     ,     ,              。')
    print(keyword)
    
    keywords = jieba.analyse.extract_tags('     ,     ,              。',
                                          topK=5, withWeight=True)
    print(keywords)

    出力:
    ['  ', '  ', '  ', '  ', '  ', '  ', '  ', '  ']
    [('  ', 1.33032263925), ('  ', 1.20652280124125), ('  ', 1.1546548197325), ('  ', 1.02799048121375), ('  ', 0.90122942182)]

    TextRankアルゴリズムに基づくキーワード抽出構文:jieba.analyse.textrank(sentence,topK=20,withWeight=False,allowPOS=(‘ns’,‘n’,‘vn’,‘v’))は直接使用され、インタフェースは同じであり、デフォルトのフィルタ語性に注意する.論文:Mihalcea R,Tarau P.TextRank:Bringing Order into Texts[J].Emnlp, 2004:404-411. 基本思想:抽出対象キーワードのテキストを分詞して固定ウィンドウサイズ(デフォルトは5、span属性調整)で、語間の共起関係を構築し、図計算図中のノードのPageRankを構築し、無方向帯権図であることに注意する
    import jieba.analyse
    
    keyword = jieba.analyse.textrank('     ,     ,              。')
    print(keyword)
    
    keywords = jieba.analyse.textrank('     ,     ,              。',
                                          topK=30, withWeight=True)
    print(keywords)

    出力:
    ['  ', '  ']
    [('  ', 1.0), ('  ', 0.9961264494011037)]

    jieba_fast
    cpythonを用いてjieba辞書で計算されたDAGとHMMのvitrebi関数を書き換え,速度を大幅に向上させた.https://github.com/deepcs233/jieba_fast