首页 > 代码库 > fastext 中文文本分类

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

fastext 中文文本分类