面白い分詞(1)——python jieba分詞モジュールの基本的な使い方

5873 ワード

参考資料:結巴分詞GitHubドキュメント
jieba(結巴)は強力な分詞庫であり、中国語の分詞を完璧にサポートしており、本文はその基本的な使い方を簡単にまとめた.
jiebaのインストールpip install jieba
簡単な使い方
結巴分詞は3つのモードに分けられる:正確なモード(デフォルト)、全モード、検索エンジンモード.以下、この3つのモードをそれぞれ例に挙げて紹介する.
正確なモード
import jieba
s = u'                     。'
cut = jieba.cut(s)

print '【Output】'
print cut
print ','.join(cut)
【Output】

 , , ,   ,  , ,       ,  , ,  ,。

分詞結果はジェネレータを返します(これはビッグデータ量データの分詞にとって特に重要です).
フルモード
print '【Output】'
print ','.join(jieba.cut(s,cut_all = True))
【Output】
 , , ,   ,  ,  , ,  ,    ,       ,  ,     ,  ,   ,  , ,  ,,

全モードはテキストをできるだけ多くの語に分けることです.
検索エンジンモード
print '【Output】'
print ','.join(jieba.cut_for_search(s))
【Output】
 , , ,  ,   ,  , ,  ,  ,  ,   ,       ,  , ,  ,。

品詞を得る
各語には名詞、動詞、代名詞などの語性があり、結巴分詞の結果も各語の語性を帯びるjiebaを用いることができる.posseg、例を次に示します.
import jieba.posseg as psg
print '【Output】'
print [(x.word,x.flag) for x in psg.cut(s)]

#   :
'''
[(u' ', u'r'), (u' ', u'v'), (u' ', u'c'), (u'   ', u'n'), (u'  ', u'm'), 
(u' ', u'v'), (u'       ', u'ns'), (u'  ', u'n'), (u' ', u'c'), (u'  ', u'v'), (u'。', u'x')]
'''

各語の語性の取得に成功したことがわかります.これは、分詞結果リストの名詞だけを取得したい場合など、分詞結果のさらなる処理に役立ちます.
print [(x.word,x.flag) for x in psg.cut(s) if x.flag.startswith('n')]

#   :
'''
[(u'   ', u'n'), (u'       ', u'ns'), (u'  ', u'n')]
'''

語性のアルファベットごとにどのような語性を表すかについては、jieba分詞の結果、どのような語性があるかを調べるために、語性対照表を調べなければなりません.本文の最後に、ネット上で検索した語性対照表を添付し、より詳細な語性分類情報を知りたい場合は、ネット上で「結巴分詞語性対照」を検索することができます.
へいれつぶんご
テキストデータ量が非常に大きい場合は,分詞効率を高めるために並列分詞を開く必要がある.jiebaはパラレル分詞をサポートし、pythonが持参したmultiprocessingモジュールに基づいていますが、Windows環境ではサポートされていないことに注意してください.
使用方法:
#         ,           
jieba.enable_parallel(5)

#         
jieba.disable_parallel()

例:並列分詞モードをオンにして三体全集テキストを分詞する
santi_text = open('./santi.txt').read()
print len(santi_text)
2681968

三体全集のデータ量は260万バイト以上と非常に大きいことがわかります.
jieba.enable_parallel(100)
santi_words = [x for x in jieba.cut(santi_text) if len(x) >= 2]
jieba.disable_parallel()


出現頻度Topnの語を取得
また、上記の三体全集テキストを例にとると、分詞結果に現れる頻度の上位20の語のリストを取得するには、次のようにすることができます.
from collections import Counter
c = Counter(santi_words).most_common(20)
print c

#   :
'''
[(u'\r
', 21805), (u' ', 3057), (u' ', 2128), (u' ', 1690), (u' ', 1550), (u' ', 1357), (u' ', 1347), (u' ', 1320), (u' ', 1273), (u' ', 1259), (u' ', 1243), (u' ', 1189), (u' ', 1177), (u' ', 1176), (u' ', 1114), (u' ', 1094), (u' ', 951), (u' ', 935), (u' ', 930), (u' ', 883)] '''

結果の中で「r」は意外にも出現頻度が最も高い語であり、「一つ」、「ない」、「これ」など、私たちが望んでいない実用的な意味のない語があれば、前に言った語性に基づいてフィルタリングすることができ、これは後で詳しく述べることができる.
ユーザー辞書による分詞精度の向上
ユーザー辞書を使用しない分詞の結果:
txt = u'                          '
print ','.join(jieba.cut(txt))
  ,  , ,  , ,  , , ,  ,  ,  , ,  ,  , ,  

ユーザー辞書を使用した分詞の結果:
jieba.load_userdict('user_dict.txt')
print ','.join(jieba.cut(txt))
    , ,   ,  , , ,    ,  ,   ,  , ,  

ユーザ辞書を用いると分詞の精度が大幅に向上することがわかる.
注意:user_dict.txtの内容は以下の通りです.
     5

    5 i

     5

    5

ユーザー辞書の行ごとに1つの単語の形式は次のとおりです.
ここで,語周波数は1つの数字であり,語性はカスタマイズされた語性であり,語周波数とスペースは半角であることに注意しなければならない.
付:結巴分詞の語性対照表(語性英語の頭文字でソート)
形容詞(1個1類、4個2類)
a形容詞
ad副形語
an名形語
Ag形容詞性語素
Al形容詞性慣用語
区別語(1個1類,2個2類)
b区別語
bl語性慣用語の区別
連語(1個1類,1個2類)
c連語
cc並列連語
副詞(1つ1つ)
d副詞
ため息(1つ1つ)
e感嘆詞
方位語(1つ1つ)
f方位語
接頭辞(1クラス)
h接頭辞
接尾辞(1クラス)
k接尾辞
数詞(1個1類,1個2類)
m数詞
mq数量語
名詞(1個1類、7個2類、5個3類)
名詞は次のサブクラスに分けられます.
n名詞
nr人名
nr 1中国語姓
nr 2中国語の名前
nrj日本語人名
nrf音訳人名
ns地名
nsf地名
nt機構団体名
nzその他の専名
nl名詞性慣用語
ng名詞性語素
擬音語(1つ1つ)
o擬音語
介詞(1個1類,2個2類)
pメディア
pba介詞「把」
pbei介詞「被」
助数詞(1個1類、2個2類)
q量詞
qv動量詞
qt時量詞
代名詞(1個1類,4個2類,6個3類)
r代名詞
rr人称代名詞
rz指示代名詞
rzt時間指示代名詞
rzs所指示代名詞
rzv述語性指示代名詞
ry疑問代名詞
ryt時間疑問代名詞
rys处所疑问代词
ryv述語性疑問代名詞
rg代名詞性語素
所詞(1つ1つ)
s处所語
時間語(1個1類,1個2類)
t時間語
tg時間語性語素
助詞(1個1類、15個2類)
u助詞
uzhe着
uleだよ
uguo過
ude 1の底
ude 2地
ude 3得
usuo所
udengなどの雲
uyyのように
udhなら
ulsで言えば
uzhi之
ulian連(「小学生でもできる」)
動詞(1個1類、9個2類)
v動詞
vd副動詞
vn名動詞
vshi動詞「はい」
vyou動詞「ある」
vf傾向動詞
vx形式動詞
vi不及物動詞(内動詞)
vl動詞性慣用語
vg動詞性語素
句読点(1クラス、16クラス)
w句読点
wkz左括弧、全角:({{{<<;)
wky右括弧、全角:)〕}』』①〉半角:){>
wyz左引用符、全角:「
wyy右引用符、全角:'''
wj句点、全角:.
ww疑問符、全角:?半角:?
wt感嘆符、全角:!半角:!
wdカンマ、全角:,半角:,
wfセミコロン、全角:;半角:;
wn頓号、全角:、
wmコロン、全角::半角::
ws省略記号、全角:......
wpダッシュ、全角:—————————半角:----
wbパーセントダイヤル、全角:%‰半角:%
wh単位記号、全角:¥$£°°C半角:$
文字列(1クラス、2クラス)
x文字列
xx非語素字
xu URL
語気語(1つ1つ)
y語気語(delete yg)
状態語(1つ1つ)
z状態語