[转载] Python大数据文本分析及应用

参考链接: 使用Python的SQL 3(处理大数据)

实践课题报告: 大数据文本分析与应用 

学 校:xxx 

学 院:大数据与智能工程学院 

专 业:信息工程(数据科学与大数据技术) 

年 级:2017级 

学 号:xxx 

姓 名:xxx 

指导老师:xxx 

日 期:2019 年 6 月 27 日 至 29 日 

实习要求: 

使用Python,实现对英文小说的词频解析,并将每章的词频结果存入到Mysql数据库中。 开发简易信息系统,实现对某篇小说的词频查询。 

环境配置 

1.Python3.7 (数据处理及对数据库的操作) 2.MySQL5.7(存储分析结果) 3.Tomcat9(部署前端代码,实现客户端访问) 

第一步:读取数据,并进行预处理 

#获取数据并对其进行去空行,空白处理

def get_data( filename):

    data = ''

    with open(filename, "r") as f:

        for line in f.readlines():

            line = line.rstrip() #去掉列表右边的空白

            line = line.lstrip() #去掉列表左边的空白

            #全变为小写

            #line = line.lower()

            #将特殊字符替换为空格

            for ch in '!"#$%@~`^&*\'\“”’。,()_-+=/{\\}[|]?.><,/;':

                line = line.replace(ch, " ") 

            if line is not '':

                data = data+line+' '

    return data

 

```python

 

第二步:按章节进行分词和统计 

#获取章节单词 ,key="CHAPTER",章节分割词

def get_chapter_word(key ,data):

    #分词

    words = data.split()

    chapters ={}

    j=0

    for word in words:

        if(word == key):

                j+=1

        if j == 0:

            chapters['book'] = chapters.get('book','')+word+" "

        else:

            keys = key+str(j)

            chapters[keys] = chapters.get(keys,'')+word+" "

    chapter_words = list(chapters.items())

    return chapter_words

 

#按按章节进行词频统计

def word_count(chapter_word):

     #全变为小写

    chapter_word = chapter_word.lower()

    words = chapter_word.split()

    #字典存储单词和数量

    counts ={}

    for word in words:

        counts[word] = counts.get(word,0) + 1

    items = list(counts.items())

    #大到小快速排序

    items.sort(key=lambda x:x[1], reverse=True)

    return items

 

第三步:数据库操作 

import pymysql

#连接数据库

def connectdb():

    localhost = " localhost"

    username = "root"

    password = "123456"

    DBname = "test"

    #print('连接到mysql服务器...')

    # 打开数据库连接

    db = pymysql.connect(localhost,username,password,DBname)

    #print('连接上了!')

    return db

    

#存入数据库,书名,章节,单词,词频

def insert(db,bookname,chapter,word, counts):

    # 使用cursor()方法获取操作游标 

    cursor = db.cursor()

    # SQL 插入语句

    sql = "INSERT INTO txtdata(bookname, \

       chapter, word, counts) \

       VALUES ('%s', '%s', '%s',  %s)" % \

       (bookname, chapter,word, counts)

    try:

        # 执行sql语句

        cursor.execute(sql)

        # 执行sql语句

        db.commit()

    except:

        # 发生错误时回滚

        db.rollback()

 

#查询数据库

def select(sql):

    #连接数据库

    db= connectdb()

    # 使用cursor()方法获取操作游标 

    cursor = db.cursor()

    try:

        #记录总的次数

        count = 0

        # 执行SQL语句

        cursor.execute(sql)

        # 获取所有记录列表

        results = cursor.fetchall()

        for row in results:

            bookname = row[0]

            chapter = row[1]

            counts = row[2]

            count += counts

            # 打印结果

            print ("书名:%s \t 章节:%s \t 词频:%d" %(bookname,chapter,counts))

        print("总的出现频率为:%d"%(count))

    except:

        print ("词库无此单词!!!")

    # 关闭数据库连接

    db.close()  

    

#按单词查询所有的词频记录

def select_by_word(word):

    # SQL 查询语句

    sql = "SELECT bookname, chapter,counts FROM txtdata WHERE trim(replace(word,' ','')) = trim(replace('%s',' ',''))" % (word)

    #调用查询函数

    select(sql)

    

#查询指定书的查询指定单词的词频

def select_by_bookname(bookname,word):

    # SQL 查询语句

    sql = "SELECT bookname, chapter,counts FROM txtdata WHERE trim(replace(bookname,' ','')) =\

    trim(replace('%s',' ','')) and trim(replace(word,' ','')) = trim(replace('%s',' ',''))" % (bookname,word)

    #调用查询函数

    select(sql)

 

第四步:存储数据,查询词频 

#存入数据库主函数

def insert_main(filename):

    #filename = 'Jane_Eyre.txt'

    #读取数据

    data=get_data(filename)

    #获取章节单词 ,key="CHAPTER",章节分割词库

    key="CHAPTER"

    #录入信息条数

    count = 0

    

     #连接数据库

    db= connectdb()

 

    chapter_words = get_chapter_word(key ,data)

    for i in range(len(chapter_words)):

        if i == 0:

            continue

        else:

            chapter,chapter_word = chapter_words[i]

            chapter_word = chapter_word.rstrip().lstrip()

            #按按章节进行词频统计

            items = word_count(chapter_word)

            for j in range(len(items)):

                word, counts= items[j]

                #print("{0:<10}{1:>5}".format(word, count))

                try:

                    #存入数据库,书名,章节,单词,词频

                    insert(db,chapter_words[0][1],chapter,word, counts)

                except:

                    continue

                count+=1

        print("已录入%d章节的数据》》》"%(i))

    # 关闭数据库连接

    db.close()  

    print("本次总共录入%d条数据"%(count))

 

#按单词查询主函数

def select_main():

    word = input("请输入你要查询的单词:")

    word = word.lower()

    print("\n查询结果:\n")

    select_by_word(word)

 

##查询指定书的查询指定单词的词频主函数

def select_by_bookname_main():

    bookname = input("请输入书名:")

    word = input("\n请输入你要查询的单词:")

    word = word.lower()

    print("\n查询结果:\n")

    select_by_bookname(bookname,word)

 

第五步:测试 

存入数据库 

# txt文件和当前脚本在同一目录下,所以不用写具体路径

filename_path = ['Two_Cities.txt','Jane_Eyre.txt']

for filename in filename_path:

    #存入数据库

   # insert_main(filename)

 

已录入1章节的数据》》》

已录入2章节的数据》》》

已录入3章节的数据》》》

已录入4章节的数据》》》

已录入5章节的数据》》》

已录入6章节的数据》》》

已录入7章节的数据》》》

已录入8章节的数据》》》

已录入9章节的数据》》》

已录入10章节的数据》》》

已录入11章节的数据》》》

已录入12章节的数据》》》

已录入13章节的数据》》》

已录入14章节的数据》》》

已录入15章节的数据》》》

已录入16章节的数据》》》

已录入17章节的数据》》》

已录入18章节的数据》》》

已录入19章节的数据》》》

已录入20章节的数据》》》

已录入21章节的数据》》》

已录入22章节的数据》》》

已录入23章节的数据》》》

已录入24章节的数据》》》

已录入25章节的数据》》》

已录入26章节的数据》》》

已录入27章节的数据》》》

已录入28章节的数据》》》

已录入29章节的数据》》》

已录入30章节的数据》》》

已录入31章节的数据》》》

已录入32章节的数据》》》

已录入33章节的数据》》》

已录入34章节的数据》》》

已录入35章节的数据》》》

已录入36章节的数据》》》

已录入37章节的数据》》》

已录入38章节的数据》》》

已录入39章节的数据》》》

已录入40章节的数据》》》

已录入41章节的数据》》》

已录入42章节的数据》》》

已录入43章节的数据》》》

已录入44章节的数据》》》

本次总共录入%d条数据

已录入1章节的数据》》》

已录入2章节的数据》》》

已录入3章节的数据》》》

已录入4章节的数据》》》

已录入5章节的数据》》》

已录入6章节的数据》》》

已录入7章节的数据》》》

已录入8章节的数据》》》

已录入9章节的数据》》》

已录入10章节的数据》》》

已录入11章节的数据》》》

已录入12章节的数据》》》

已录入13章节的数据》》》

本次总共录入%d条数据

 

数据库表 

 

按单词查询所有 

 #查询1

select_main()

 

请输入你要查询的单词:the

 

查询结果:

 

书名: Two Cities      章节:CHAPTER1      词频:79

书名: Two Cities      章节:CHAPTER2      词频:194

书名: Two Cities      章节:CHAPTER3      词频:123

书名: Two Cities      章节:CHAPTER4      词频:203

书名: Two Cities      章节:CHAPTER5      词频:284

书名: Two Cities      章节:CHAPTER6      词频:331

书名: Two Cities      章节:CHAPTER7      词频:171

书名: Two Cities      章节:CHAPTER8      词频:298

书名: Two Cities      章节:CHAPTER9      词频:89

书名: Two Cities      章节:CHAPTER10      词频:137

书名: Two Cities      章节:CHAPTER11      词频:228

书名: Two Cities      章节:CHAPTER12      词频:263

书名: Two Cities      章节:CHAPTER13      词频:166

书名: Two Cities      章节:CHAPTER14      词频:348

书名: Two Cities      章节:CHAPTER15      词频:94

书名: Two Cities      章节:CHAPTER16      词频:41

书名: Two Cities      章节:CHAPTER17      词频:102

书名: Two Cities      章节:CHAPTER18      词频:56

书名: Two Cities      章节:CHAPTER19      词频:212

书名: Two Cities      章节:CHAPTER20      词频:87

书名: Two Cities      章节:CHAPTER21      词频:284

书名: Two Cities      章节:CHAPTER22      词频:208

书名: Two Cities      章节:CHAPTER23      词频:118

书名: Two Cities      章节:CHAPTER24      词频:152

书名: Two Cities      章节:CHAPTER25      词频:34

书名: Two Cities      章节:CHAPTER26      词频:264

书名: Two Cities      章节:CHAPTER27      词频:145

书名: Two Cities      章节:CHAPTER28      词频:232

书名: Two Cities      章节:CHAPTER29      词频:252

书名: Two Cities      章节:CHAPTER30      词频:296

书名: Two Cities      章节:CHAPTER31      词频:167

书名: Two Cities      章节:CHAPTER32      词频:78

书名: Two Cities      章节:CHAPTER33      词频:178

书名: Two Cities      章节:CHAPTER34      词频:121

书名: Two Cities      章节:CHAPTER35      词频:191

书名: Two Cities      章节:CHAPTER36      词频:106

书名: Two Cities      章节:CHAPTER37      词频:227

书名: Two Cities      章节:CHAPTER38      词频:270

书名: Two Cities      章节:CHAPTER39      词频:352

书名: Two Cities      章节:CHAPTER40      词频:53

书名: Two Cities      章节:CHAPTER41      词频:146

书名: Two Cities      章节:CHAPTER42      词频:252

书名: Two Cities      章节:CHAPTER43      词频:204

书名: Two Cities      章节:CHAPTER44      词频:150

书名: Jane Eyre      章节:CHAPTER1      词频:86

书名: Jane Eyre      章节:CHAPTER2      词频:104

书名: Jane Eyre      章节:CHAPTER3      词频:118

书名: Jane Eyre      章节:CHAPTER4      词频:203

书名: Jane Eyre      章节:CHAPTER5      词频:264

书名: Jane Eyre      章节:CHAPTER6      词频:110

书名: Jane Eyre      章节:CHAPTER7      词频:178

书名: Jane Eyre      章节:CHAPTER8      词频:90

书名: Jane Eyre      章节:CHAPTER9      词频:128

书名: Jane Eyre      章节:CHAPTER10      词频:179

书名: Jane Eyre      章节:CHAPTER11      词频:250

书名: Jane Eyre      章节:CHAPTER12      词频:164

书名: Jane Eyre      章节:CHAPTER13      词频:160

总的出现频率为:10020

 

按指定书名查询指定单词的词频 

 #查询2

select_by_bookname_main()

 

请输入书名:Jane Eyre

 

请输入你要查询的单词:the

 

查询结果:

 

书名: Jane Eyre      章节:CHAPTER1      词频:86

书名: Jane Eyre      章节:CHAPTER2      词频:104

书名: Jane Eyre      章节:CHAPTER3      词频:118

书名: Jane Eyre      章节:CHAPTER4      词频:203

书名: Jane Eyre      章节:CHAPTER5      词频:264

书名: Jane Eyre      章节:CHAPTER6      词频:110

书名: Jane Eyre      章节:CHAPTER7      词频:178

书名: Jane Eyre      章节:CHAPTER8      词频:90

书名: Jane Eyre      章节:CHAPTER9      词频:128

书名: Jane Eyre      章节:CHAPTER10      词频:179

书名: Jane Eyre      章节:CHAPTER11      词频:250

书名: Jane Eyre      章节:CHAPTER12      词频:164

书名: Jane Eyre      章节:CHAPTER13      词频:160

总的出现频率为:2034

 

六、前端页面效果 

index.jsp 

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <% request.setCharacterEncoding("UTF-8"); %> 

<%@ page import="java.sql.*"%> 

<html>

<head>

<title>Python大数据文本分析</title>

<body >   

 

<div align="center"style="width: 80%;">

<br/><br/><br/>

<h1>Python大数据文本分析</h1><br/>

<p>目前已有书本:<a>Jane Eyre</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a>Two_Cities</a> <br/><br/>

<a href="word.jsp"><h3>按单词查询所有书本的词频</h3></a> <br><br>

<a href="book.jsp"><h3>查询指定书本中的指定单词词频</h3></a>

</div>

</body>   

</html> 

 

 

word.jsp 

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <% request.setCharacterEncoding("UTF-8"); %>

<%@ page import="java.sql.*"%> 

<html>

<head>

<title>查询</title>

<body >   

<div align="center"style="width: 80%;">

<br/><br/><br/>

<h3>查询指定书本中的指定单词词频</h3><br/><br/>

<p>目前已有书本:<a>Jane Eyre</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a>Two_Cities</a> <br/><br/><br/>

<form  action="select_word.jsp" method="post">

<p>请输入单词:<input type="text" name="word" /><br/>

<p><input type="submit" value="查询"/>

<p><a href="index.jsp">返回首页</a>

<div>

</body>   

</html> 

 

 

select_word.jsp 

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <% request.setCharacterEncoding("UTF-8"); %>

<%@ page import="java.sql.*"%>

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

 

<html>   

<body > 

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"

     url="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8"

     user="root"  password="123456"/>

 

 <sql:query dataSource="${snapshot}" var="result">

 SELECT bookname,chapter,word,counts FROM txtdata WHERE trim(replace(word,' ','')) = trim(replace('${param.word}',' ',''))

 

</sql:query>

<div align="center" style="width: 80%;">

 <h1>Python大数据文本分析<h1><br/><br/>

<table align="center" border="1" width="70%">

<tr>

   <th>书名</th>

   <th>章节</th>

   <th>单词</th>

   <th>词频</th>

</tr>

<c:forEach var="row" items="${result.rows}">

<tr>

   <td><c:out value="${row.bookname}"/></td>

   <td><c:out value="${row.chapter}"/></td>

   <td><c:out value="${row.word}"/></td>

   <td><c:out value="${row.counts}"/></td>

</tr>

</c:forEach>

</table>

<p><a href="index.jsp">返回首页</a>

</div>

</body>   

</html> 

 

 

book.jsp 

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <% request.setCharacterEncoding("UTF-8"); %>

<%@ page import="java.sql.*"%> 

<html>

<head>

<title>查询</title>

<body >   

<div align="center"style="width: 80%;">

<br/><br/><br/>

<h3>查询指定书本中的指定单词词频</h3><br/><br/>

<p>目前已有书本:<a>Jane Eyre</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a>Two_Cities</a> <br/><br/><br/>

<form  action="select_book.jsp" method="post">

<p>请输入书名:<input type="text" name="book" /><br/>

<p>请输入单词:<input type="text" name="word" /><br/>

<p><input type="submit" value="查询"/>

<p><a href="index.jsp">返回首页</a>

<div>

</body>   

</html> 

 

 

select_book.jsp 

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <% request.setCharacterEncoding("UTF-8"); %>

<%@ page import="java.sql.*"%>

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

 

<html>   

<body > 

 

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"

     url="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8"

     user="root"  password="123456"/>

 

 <sql:query dataSource="${snapshot}" var="result">

 SELECT bookname, chapter, word,counts FROM txtdata WHERE trim(replace(bookname,' ','')) =trim(replace('${param.book}',' ','')) and trim(replace(word,' ','')) = trim(replace('${param.word}',' ',''))

 

</sql:query>

<div align="center" style="width: 80%;">

 <h1>Python大数据文本分析<h1><br/><br/>

<table align="center" border="1" width="70%">

<tr>

   <th>书名</th>

   <th>章节</th>

   <th>单词</th>

   <th>词频</th>

</tr>

<c:forEach var="row" items="${result.rows}">

<tr>

   <td><c:out value="${row.bookname}"/></td>

   <td><c:out value="${row.chapter}"/></td>

   <td><c:out value="${row.word}"/></td>

   <td><c:out value="${row.counts}"/></td>

</tr>

</c:forEach>

</table>

<p><a href="index.jsp">返回首页</a>

</div>

</body>   

</html> 

 

 

数据集及源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值