文本分类挖掘预测

首先说明内容有些简单( (⊙o⊙),仅供参考)

文本预测数据(由于数据太多再次测试1w条数据即test的数据集)

数据集地址下载:

https://pan.baidu.com/share/init?surl=XIZwRlG4-yynR9fSEAdRiA
密码:kxxa

首先将把需要测试的数据集暂时保存下来,进行分词,关键词提取,集合并集,变换特征向量等操作,把关键词和特征向量的内容保存在文本里;

import jieba
import jieba.analyse
import numpy as np
f_train='C:/Users/Administrator/PycharmProjects/new/练习/第六月/other/cnews/cnews.test.txt'
list_x=[]
list_y=[]
# while True:
#     print('第一次请注释,以后请注释,运行last2')
with open(f_train,'r',encoding='utf-8') as file_train:
    for i in file_train:
        line_list=i.split('\t')
        list_x.append(line_list[1])
        list_y.append(line_list[0])
        # print(i)
# print(list_train)
###分词 存储分词
##+++++++++++++++++++++++++++++++++++++++++++++++

for count,article in enumerate(list_x):
    segment_i=jieba.analyse.extract_tags(article,topK=10,withWeight=False,allowPOS=())
    list_x[count]=segment_i


    # if count>10:
    #     break
print(list_x[0])
# # list1.append(segment_i)
# ##转换变为 1,0
# ##所有训练集的并集(union)
set_union={}
print(type(set_union))
count=0
for i in list_x:
    count+=1
    print(count)
    set_union=set(set_union)|set(i)
print(len(set_union))
#计算并集(转化为词向量)
list_set_union=list(set_union)
print(list_set_union)
with open('特征集合变换列表00.txt','w+') as filelist:
    filelist.write(str(list_set_union))



# with open('特征集合变换列表.txt','r') as f:
#     list_set_union=f.read()
#     list_set_union=eval(list_set_union)
    # print(list_set_union)
    # print(len(list_set_union))

print('*'*100)
list_all=[]
count=0
with open('all00.txt', 'w+') as file:
    for x in list_x:
        count+=1
        print('count:',count)
        list_one=[0 for i in range(len(list_set_union))]
        for i in x:
            for k,v in enumerate(list_set_union):
                if v==i:
                    list_one[k]=1
                    break

        file.write(str(list_one) + '\n')

然后在第二个python文件里读取刚才保存的文件,如果写在一起每次都会重新生成比较慢,所以在此小编写了两个文件。便于操作。


from sklearn.linear_model import LogisticRegression
import jieba
import jieba.analyse
list_all=[]
list_y=[]
f_train='C:/Users/Administrator/PycharmProjects/new/练习/第六月/other/cnews/cnews.test.txt'
with open(f_train,'r',encoding='utf-8') as file_train:
    for i in file_train:
        line_list=i.split('\t')
        list_y.append(line_list[0])
print(list_y)
set_y=set(list_y)
print(set_y)
list_set_y=list(set_y)
print(list_set_y)
dict_set_y={}
for k,v in enumerate(list_set_y):
    dict_set_y[k]=v
for i,j in enumerate(list_y):
    for k,v in enumerate(list_set_y):
        if j==v:
            list_y[i]=k
            break
print(list_y)
##列表的形式转换成字符串
with open('all0.txt','r') as f:
    file=f.readlines()
    for k,i in enumerate(file):
        i=i.replace('\n','')
        i=eval(i)
        # print(k)
        list_all.append(i)
    # print(list_all)
    print(len(list_all))

lr_model = LogisticRegression()
lr_model.fit(list_all, list_y)
with open('特征集合变换列表0.txt','r') as f:
    list_set_union=f.read()
    list_set_union=eval(list_set_union)
    # print(list_set_union)
    # print(len(list_set_union))
while True:
    cheshi=input('测试:')
    segment_i=jieba.analyse.extract_tags(cheshi,topK=10,withWeight=False,allowPOS=())
    # print(segment_i)

    list_one = [0 for i in range(len(list_set_union))]
    for x in segment_i:
        for k,v in enumerate(list_set_union):
            if v==x:
                list_one[k]=1
                break
    # print(list_one)
    s=lr_model.predict([list_one])
    print(dict_set_y[s[0]])

直到这里基本可以完成简单预测,下面进行一个简单的前后端界面交互。利用django进行交互,简单说明一下建项目的流程。

image.png

image.png

image.png

注意如果建立了static的包要在setting里,一般最后加上,没建立这个包就不用了其他的内容暂时不需要更改

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
image.png

image.png
from django.conf.urls import url
from . import views
urlpatterns = [
    url(r'^$',views.index),
    url(r'^serach/$',views.serach),
]

image.png
from django.shortcuts import render
from sklearn.linear_model import LogisticRegression
from sklearn.utils.validation import check_array as check_arrays
import jieba
import time
import jieba.analyse
from django.shortcuts import render,HttpResponse,HttpResponseRedirect,redirect
# Create your views here.
def index(request):
    return render(request, 'index.html')
def serach(request):
    cheshi=request.POST.get('cheshi')
    # print(content)
    mysession=request.session.get('mysession0','')
    list_all = []
    list_y = []
    start=time.time()

    f_train = 'C:/Users/Administrator/PycharmProjects/new/练习/第六月/other/cnews/cnews.test.txt'
    with open(f_train, 'r', encoding='utf-8') as file_train:
        for i in file_train:
            line_list = i.split('\t')
            list_y.append(line_list[0])
    # print(list_y)
    set_y = set(list_y)
    print(set_y)
    list_set_y = list(set_y)
    print(list_set_y)
    dict_set_y = {}
    for k, v in enumerate(list_set_y):
        dict_set_y[k] = v
    for i, j in enumerate(list_y):
        for k, v in enumerate(list_set_y):
            if j == v:
                list_y[i] = k
                break
    # print(list_y)

    if mysession == '':
        ##列表的形式转换成字符串
        with open('C:/Users/Administrator/PycharmProjects/new/练习/第六月/other/all0.txt', 'r') as f:
            file = f.readlines()
            for i in file:
                i = i.replace('\n', '')
                i = eval(i)
                # print(i)
                list_all.append(i)
            # print(list_all)
            # print(len(list_all))



        with open('C:/Users/Administrator/PycharmProjects/new/练习/第六月/other/特征集合变换列表0.txt', 'r') as f:
            list_set_union = f.read()
            list_set_union = eval(list_set_union)
            # print(list_set_union)
            # print(len(list_set_union))
            request.session['mysession0'] = list_all
            request.session['mysession1'] = list_set_union
    # print('*'*100)
    s0=time.time()
    list_all=request.session['mysession0']
    list_set_union=request.session['mysession1']
    s1=time.time()
    # print('session:',s1-s0)
    # print('*' * 100)
    s0=time.time()
    lr_model = LogisticRegression()
    lr_model.fit(list_all, list_y)
    s1 = time.time()
    print('逻辑:', s1 - s0)
    # print('*' * 100)
    # cheshi = input('测试:')
    segment_i = jieba.analyse.extract_tags(cheshi, topK=10, withWeight=False, allowPOS=())
    # print(segment_i)

    list_one = [0 for i in range(len(list_set_union))]
    for x in segment_i:
        for k, v in enumerate(list_set_union):
            if v == x:
                list_one[k] = 1
                break
    # print(list_one)
    s = lr_model.predict([list_one])
    answer=dict_set_y[s[0]]
    print(answer)
    end=time.time()
    print(end-start)
    ctx={
        'content':answer
    }
    return render(request, 'index.html',ctx)

最后我们在模板templates的文件夹中编写简单前端程序。

image.png
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/js/jquery-1.12.4.min.js"></script>

</head>
<body>
{#<img src="/static/img/1.jpg">#}
<div style="text-align: center;margin-top: 100px">
<form action="/serach/" method="post" >
    {% csrf_token %}
    <textarea cols="50%" rows="10" name="cheshi" id="tt"></textarea><br/>
    <input type="submit" id="submit"><br>
    <input type="text" value="{{ content }}" name="over">

</form>
    <script>
        $("#submit").click(function () {
            if($("#tt").val()==''){
                alert('不能发空')
                return false
            }

        })

    </script>
</div>

</body>
</html>

到这里前后端交互基本可以实现了,测试一下,测试之前咱们先迁移一下,否则session无法存储

image.png

然后运行项目

image.png

运行之后在浏览器中输入 127.0.0:8000不出意外应该出现如下情况,其他意外自行百度解决,一般都是包不全,去安装好就好了。或者emmm...(此处省略n个字,请自行脑补 (⊙o⊙))

image.png
image.png
image.png

整体过程基本结束。如有问题请互相讨论留言,本内容由编者独创,仅供参考,如有雷同纯属巧合。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,928评论 2 89
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,304评论 0 9
  • 魔殿始祖寝殿中,红衣美人,睡眼惺忪,感觉好像挺温暖的,很是舒服,蹭了蹭,想着还能再眯会儿,想动动身子,找个更加舒服...
    转角花开阅读 2,139评论 6 32
  • 林泉林泉阅读 220评论 2 1
  • 命令模式(Command):将请求与实现解耦,并封装成独立对象,从而使不同的请求对客户端的实现参数化。 命令模式 ...
    JSUED阅读 430评论 0 0