「基于Django的全民健康智慧中医数字服务平台」基于深度学习抓取文章自动多分类算法模型

该博客介绍了基于Django的全民健康智慧中医数字服务平台的建设,利用深度学习的CNN模型进行文本分类。内容涵盖数据抓取、Magpie框架准备、数据预处理、模型训练及结果预测。主要技术涉及Tensorflow 1.13、MongoDB数据存储和自然语言处理。
摘要由CSDN通过智能技术生成

试读内容

「基于Django的全民健康智慧中医数字服务平台」项目文章目录
「基于Django的全民健康智慧中医数字服务平台」中医问诊学习,开发原理理论基础
「基于Django的全民健康智慧中医数字服务平台 V2.0」产品设计&技术应用

如果你对中医感兴趣欢迎留言讨论,觉得我的内容对你有帮助的话,能够请我喝一杯沪上阿姨不禁万分感谢。

内容简介

基于Magpie框架深度学习的 CNN 卷积神经网络 进行的文本多分类模型全流程。

准备工作

  1. 数据抓取准备,将包含多类别的数据存储到Mongodb数据仓库中。
  2. 准备Magpie文本分类框架。
  3. 自然语言处理词库(停用词和不可拆分辞典)。
  4. Tesorflow版本gpu 1.13,不支持2.0以上版本。

基础数据处理

from bs4 import BeautifulSoup
import re
import pandas as pd
import numpy as np
import time
import datetime
import warnings
import pymongo
from urllib import parse

client = pymongo.MongoClient(host="localhost", port=27017, username=username, password=password)
db = client['EveryMonthData']

# 月份列表根据情况修改,保留当前月和上月的字段不可在其中
month_list = [
    '2020-00',  # 默认未抓到日期的数据统统写入到这里
    '2020-01','2020-02','2020-03','2020-04','2020-05','2020-06',
    '2020-07','2020-08','2020-09','2020-10','2020-11','2020-12',
    '2021-01','2021-02',
]

提取 健康养生 类的数据

data = pd.DataFrame()
for month in month_list:
    table = db[month]
    data_append = pd.DataFrame(list(table.find({"bd_type":["健康养生"]})))
    data = data.append(data_append)

提取模型训练数据类别

# 文本类别用中文显示
def clean_bd_type(text):
    # 取全部类别进行训练
    type_list = text[1]
    type_list = "" if type_list == [] else type_list
    return type_list

data["new_type_1"] = data.bd_type.apply(clean_bd_type)

重新构建数据

data.reset_index(drop=True,inplace=True)

提取模型有效数据

# 合并标题和文本数据
data["content"] = data["title"] + data["unHtmlContent"]
# 提取类别数据和新合成的文本数据
df = data[["_id","content","new_type_1"]]
# 删除内容为空的数据
df = df.dropna()

# 放弃类别为 AI未分类数据,将有效数据进行建模
df = df[df["new_type_1"] != ""]

清洗文本数据

# 判断是否为汉字
def is_chinese(uchar):
    if uchar >= u'\u4e00' and uchar <= u'\u9fa5':
        return True
    else:
        return False

# 文本格式清理,只保留中文字符
def clean_text(text):
    content_str = ''
    for i in text:
        if is_chinese(i):
            content_str = content_str + i
    return content_str


df['content_new'] = df.content.apply(clean_text)

文本分词提取

import jieba

stop_words_path="data/model_stopwords.txt"
def stopwordslist(filepath):  
    stopwords = [line.strip() for line in open(filepath, 'r',encoding='utf-8').readlines()]
    return stopwords 


# 文本分词
def jieba_cut(text):
    words= " ".join(jieba.cut(text))
    words = [w for w in words if w not in stopwordslist(stop_words_path)]
    return ''.join(words)

df['jieba_cut'] = df.content_new.apply(jieba_cut)
df.reset_index(drop=True,inplace=True)

生成训练数据

#生成训练集文档
#标签ID
j=0
for i in range(len(df)):
    file=open('data/train_data/{}.lab'.format(df['_id'][i]),'w')
    list_=df['new_type_1'][i]
    str_list = [line+'\n' for line in list_]
    file.writelines(set(str_list))
    file.close()
    j+=1
#内容ID
j=0
for i in range(len(df)):
    file=open('data/train_data/{}.txt'.format(df['_id'][i]),'w')
    file.write(str(df['jieba_cut'][j]))
    file.close()
    j+=1

把全部数据处理成这样就可以了

模型训练

magpie = Magpie()
# 训练数据模型
magpie.train_word2vec('data/train_data', vec_dim=vec_dim)
magpie.fit_scaler('data/train_data')
magpie.init_word_vectors('data/train_data', vec_dim=vec_dim)

# 打开标签汇总文档
label = open(lables_dir, "r", encoding='utf-8')
label = label.readlines()
labels = []
for i in label:
    i = i.replace("\n", "")
    labels.append(i)

# 训练数据
magpie.train('data/train_data', labels, test_ratio=0.2, nn_model=nn_model, epochs=epochs)

# 保存模型
magpie.save_word2vec_model('./data/model/word2vec_model')
magpie.save_scaler('./data/model/model', overwrite=True)
magpie.save_model('./data/model/model.h5')

type_dict = {
    "药品": "1",
    "营养学": "2",
    "健身": "3",
    "中医": "4",
    "减肥": "5",
    "推拿": "6",
    "健康": "7",
    "养生": "8",
    "癌症": "9",
    "睡眠": "10",
    "跑步": "11",
    "蔬菜": "12",
    "水果": "13",
    "护肤": "14",
    "烹饪技巧": "15",
    "中药": "16",
    "菜谱": "17",
    "游泳": "18",
    "公益": "19",
    "美体": "20"
}

训练过程如下,总体效果还不错
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果预测

每次预测需要把数据处理成训练模型时候数据处理的样子

from magpie import Magpie

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)


# 打开标签汇总文档
lables_dir = 'data/labels.txt'
label = open(lables_dir, "r", encoding='utf-8')
label = label.readlines()
labels = []
for i in label:
    i = i.replace("\n", "")
    labels.append(i)

    
magpie = Magpie(
    keras_model='./data/model/model.h5',
    word2vec_model='./data/model/word2vec_model',
    scaler='./data/model/model',
    labels=labels
)

magpie.predict_from_file("./data/train_data/605d4e9f8ac0ed5276c7a9c6.txt")

预测结果最终是一个概率值,自己分类一个权重阈值判断类别就可以了

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr数据杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值