1. 輸入文本預處理, 通過jieba分詞, 空格" "拼接文本串. 每行一個樣本, 最后一個單詞為雙下划線表明label, __label__'xxx' . eg:
邱縣 繼剛 家庭 農場 小麥 、 玉米 、 棉花 、 大豆 、 蔬菜 、 苗木 種植 、 銷售 ( 依法 須 經 批准 的 項目 , 經 相關 部門 批准 后方 可 開展 經營 活動 ) __label__A 江蘇 嘉利欣 農業 科技 有限公司 農業 科技 研發 、 轉讓 、 咨詢服務 展覽 展示 服務 現代農業 休閑 觀光 種植 、 銷售 糧食 、 果蔬 、花卉 、 苗木 種植 中草葯 銷售 本 公司 種植 的 中草葯 ( 特殊 中草葯 除外 ) 養殖 、 銷售 魚 、 蝦 、 螃蟹 ( 依法 須 經 批准 的 項 目 , 經 相關 部門 批准 后方 可 開展 經營 活動 ) __label__B 贊皇縣 和諧 家庭 農場 農作物 果樹 蔬菜 種植 銷售 需 有關 部門 審批 的 審批 后 經營 __label__C 深圳市 修元 農業 開發 有限公司 農業 開發 、 綠化 工程 、 苗圃 種植 __label__A
# 文本預處理 df2 = pd.read_csv('./industry_dalei_train.txt', encoding='utf-8') df3 = pd.read_excel('./industry_standard.xlsx', encoding='utf-8') # 映射轉換 dalei2label_dict = dict((x, y) for x, y in zip(df3[u'大類名稱'], df3[u'大類編號'])) df2['dalei_label'] = df2['sub_industry_name'].apply(lambda x: dalei2label_dict[x]) # 切割 df2['cut_name'] = df2['name'].apply(lambda x: ' '.join(jieba.cut(x))) df2['cut_business'] = df2['business'].apply(lambda x: ' '.join(jieba.cut(x))) df2['cut_train'] = df2['cut_name'] + ' ' + df2['cut_business'] + ' __label__' + df2['dalei_label'] df2['cut_train'].to_csv('industry_dalei_train.txt', index=None, header=None, encoding='utf-8')
2. pip install fasttext, 利用fasttext 的python 包進行分類.
# 訓練和保存模型 da_clf = fasttext.supervised('./industry_dalei_train.txt', 'models/dalei_clf') # 加載模型 da_clf = fasttext.load_model('./models/dalei_clf.bin') # 測試 res = da_clf.test('./industry_dalei_test.txt') print res.precision print res.recall # 預測使用, data為['cut document1' ,'cut document2'] da_clf.predict(data ,k=1) # 預測標簽 da_clf.predict_proba(da_df.iloc[:5],k=3) # 預測標簽概率
簡單高效, 結果也不差. good luck~
參考:
https://pypi.python.org/pypi/fasttext/
http://www.41443.com/HTML/Python/20160909/449360.html
http://www.360doc.com/content/17/0427/02/20558639_648968041.shtml