fastext 中文文本分类
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
每天一小步,人生一大步!Good luck~