上一章分享了IK Analyzer中文分詞及詞頻統計基於Hadoop的MapReducer框架Java實現。此次將與你們分享Jieba中文分詞Python簡單實現,因爲Jieba分詞是基於詞頻最大切分組合,因此不用作詞頻統計,能夠直接獲得其關鍵字。python
一、安裝jiebaapp
安裝方式能夠查看博主的中文分詞工具(http://my.oschina.net/eager/blog/673013),此處再也不贅述。框架
二、簡單實例實現:eclipse
#導入jieba
import jiebapython2.7# ---------jieba簡單使用方式------------
seg_list = jieba.cut("我來到北京清華大學", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我來到北京清華大學", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精確模式
seg_list = jieba.cut("他來到了網易杭研大廈")
print(", ".join(seg_list)) # 默認是精確模式
seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造")
print(", ".join(seg_list)) # 搜索引擎模式工具
三、採用精確模式對hong.txt作分詞並寫入文件hong2.txtoop
# coding:UTF8
'''
@author: ZD
'''
import sys
#修改編碼以前,Python2.7系統默認編碼是ascii
print(sys.getdefaultencoding())
#修改編碼爲utf-8
reload(sys)
sys.setdefaultencoding('utf-8')
print(sys.getdefaultencoding())搜索引擎import jieba, codecs編碼
fpr = codecs.open("hong.txt","r")
lines = fpr.readlines()
resultStr=""
for line in lines:
resultStr += linespa#精確模式分詞,但沒有統計結果並排序
seg_list = jieba.cut(resultStr, cut_all=False)
fpr.close()print("開始寫文件")
fpw = codecs.open("hong2.txt", "w")
result=""
for segStr in seg_list:
result=segStr+" \\ "
fpw.write(result)
fpw.close()
print("寫文件結束")
一部分結果展現:
\ 上卷 \ \ 第一回 \ \ \ 甄士隱 \ 夢幻 \ 識通靈 \ \ 賈雨村 \ 風塵 \ 懷 \ 閨秀 \ \ \ \ \ 此 \ 開卷 \ 第一回 \ 也 \ . \ 做者 \ 自雲 \ : \ 因曾 \ 歷過 \ 一番 \ 夢幻 \ 以後 \ , \ 故 \ 將 \ 真事 \ 隱去 \ , \ 而 \ 借 \ " \ 通靈 \ " \ 之 \ 說 \ , \ 撰此 \ 《 \ 石頭記 \ 》 \ 一書 \ 也 \ . \ 故曰 \ " \ 甄士隱 \ " \ 云云 \ . \ 但書中 \ 所記 \ 何事 \ 何人 \ ? \ 自又云 \ : \ 「 \ 今 \ 風塵碌碌 \ , \ 一事無成 \ , \ 忽 \ 念及 \ 當日 \ 全部 \ 之 \ 女子 \ , \ 一一 \ 細考 \ 較 \ 去 \ , \ 覺其 \ 行止 \ 見識 \ , \ 皆 \ 出於 \ 我 \ 之上 \ . \ 何 \ 我 \ 堂堂 \ 鬚眉 \ , \ 誠不若 \ 彼 \ 裙釵 \ 哉 \ ? \ 實愧 \ 則 \ 有餘 \ , \ 悔 \ 又 \ 無益 \ 之大 \ 無可如何 \ 之日 \ 也 \ ! \ 當 \ 此 \ , \ 則 \ 自欲 \ 將 \ 已往 \ 所賴 \ 天恩祖 \ 德 \ , \ 錦衣 \ 紈絝 \ 之 \ 時 \ , \ 飫甘饜肥 \ 之 \ 日 \ , \ 背 \ 父兄 \ 教育 \ 之恩 \ , \ 負 \ 師友 \ 規談 \ 之德 \ , \ 以致 \ 今日 \ 一技無成 \ , \ 半生 \ 潦倒 \ 之罪 \ , \ 編述 \ 一集 \ , \ 以告 \ 天下人 \ : \ 我 \ 之 \ 罪固 \ 難免 \ , \ 然 \ 閨閣 \ 中本 \ 自 \ 歷歷 \ 有人 \ , \ 萬 \ 不可 \ 因 \ 我 \ 之 \ 不肖 \ , \ 自護己 \ 短 \ , \ 一併 \ 使 \ 其 \ 泯滅 \ 也 \ . \ 雖 \ 今日 \ 之茅 \ 椽蓬 \ 牖 \ , \ 瓦竈 \ 繩牀 \ , \ 其 \ 晨夕 \ 風露 \ , \ 階柳庭花 \ , \ 亦 \ 未有 \ 妨 \ 我 \ 之 \ 襟懷 \ 筆墨 \ 者 \ . \ 雖 \ 我 \ 未學 \ , \ 下筆 \ 無文 \ , \ 又 \ 何妨 \ 用 \ 假語 \ 村言 \ , \ 敷 \ 演出 \ 一段 \ 故事 \ 來 \ , \ 亦可 \ 使 \ 閨閣 \ 昭傳 \ , \ 復可悅 \ 世之目 \ , \ 破人 \ 愁悶 \ , \ 不 \ 亦 \ 宜乎 \ ? \ " \ 故曰 \ " \ 賈雨村 \ " \ 云云 \ . \
五、若是想獲得出現頻率最高的詞語,則能夠用 jieba.analyse.extract_tags(sentence, topK) 方法
PS:其中sentence爲待提取的文本,topK爲返回幾個TF/IDF權重最大的關鍵詞,默認值爲20
# coding:UTF8
'''
@author: ZD
'''
import sys
#修改編碼以前,Python2.7系統默認編碼是ascii
print(sys.getdefaultencoding())
#修改編碼爲utf-8
reload(sys)
sys.setdefaultencoding('utf-8')
print(sys.getdefaultencoding())import jieba, codecs
fpr = codecs.open("hong.txt","r")
lines = fpr.readlines()
resultStr=""
for line in lines:
resultStr += line#精確模式分詞,但沒有統計結果並排序
seg_list = jieba.cut(resultStr, cut_all=False)
fpr.close()print("開始寫文件")
fpw = codecs.open("hong2.txt", "w")
result=""
for segStr in seg_list:
result=segStr+" \\ "
fpw.write(result)
fpw.close()
print("寫文件結束")
部分結果展現
寶玉 賈母 鳳姐 王夫人 老太太 奶奶 那裏 什麼 賈璉 太太 姑娘 衆人 平兒 說道 現在 一面 大家 襲人 寶釵 只見 黛玉 這裏 咱們 一個 聽見 出來 鳳姐兒 薛姨媽
分享踩過的坑
問題:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
緣由:python2.7是基於ascii去處理字符流,當字符流不屬於ascii範圍內,就會拋出異常(ordinal not in range(128))。
解決方案1:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
若是eclipse報錯爲undefined variable from import:setdefaultencoding,是由於eclipse的pydev插件緣由,能夠無論此錯誤,照樣運行。
解決方案2:(http://blog.csdn.net/lgy807720302/article/details/7515743)
在Python安裝目錄下的Lib/site-packages目錄中,新建一個sitecustomize.py文件
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
try:
import apport_python_hook
except ImportError:
pass
else:
apport_python_hook.install()
而後在eclipse中能夠查看到改變已經生效
import sys
print(sys.getdefaultencoding())
寫在最後:本人初學Python,也初次接觸jieba分詞工具,若有錯誤,望指出糾正。