從 MySQL 數據庫提取語料數據

實踐目標:

(1)使用 Visual Studio Code 建立 Python 項目;

(2)編寫從數據庫讀取語料數據的代碼。

1、 建立項目

文本相似性分析由多個模塊構成,在開發過程中需要對這些模塊進行管理,很有必要以項目方式開發文本相似性分析程序。

使用 Visual Studio Code 建立 Python 項目非常簡單,在磁盤上創建一個新文件夾,如創建 “similar” 文件夾。

啓動 Visual Studio Code,單擊 “打開文件夾”,即建立了“similar” 項目。

當前項目沒有任何內容,在後面的編程中,逐步創建項目文件。

2、 從數據庫讀取語料

在項目根目錄下建立 db 目錄,該目錄存儲與數據庫相關的 Python 代碼文件。在 db 目錄下,建立 readnews.py 文件,該文件完成從數據庫讀取語料數據的功能。

編寫 readnews.py 代碼之前,首先在項目根目錄下建立一個項目配置文件,爲項目配置參數和初始設置,如數據庫的登錄賬號、密碼等信息。在項目根目錄下新建 config.ini 文件。

程序清單 config.ini

#配置文件#
#MYSQL數據庫配置#
[MYSQL]
MYSQL_HOST = 127.0.0.1
MYSQL_DBNAME = newsdb
# 配置數據庫的訪問用戶
MYSQL_USER = root
# 配置數據庫的訪問密碼
MYSQL_PASSWD = 123456

項目在執行過程中,要用到若干中間數據文件,爲了方便獲取這些數據文件的位置路徑,建立 filepath.py 文件,在該文件內定義獲取相關文件位置路徑的方法。

在項目根目錄下建立 tool 目錄,在 tool 目錄下新建 filepath.py 文件。

程序清單 filepath.py

#文件路徑處理#
#導入os模塊
import os
# 獲取項目的根目錄
def get_root_path():
    curPath = os.path.abspath(os.path.dirname(__file__))
    rootPath = curPath[:curPath.find("similar" + os.sep)+len("similar" + os.sep)]
    return rootPath
# 獲取數據目錄
def get_data_dir():
    curPath = os.path.abspath(os.path.dirname(__file__))
    rootPath = curPath[:curPath.find("similar" + os.sep)+len("similar" + os.sep)]
    return rootPath + "data" + os.sep
# 獲取配置文件路徑
def get_config_path():
    return get_root_path() + "config.ini"

編輯 readnews.py 代碼文件,從數據庫讀取語料數據。

程序清單 readnews.py

'''
1、MySQL模塊
2、讀取稿件庫新聞條目
'''
#導入pymysql模塊
import pymysql as mysql
#導入配置模塊
import configparser as config
#導入正則模塊
import re
#導入os模塊
import os
#導入路徑模塊
import tool.filepath as path
# 定義數據庫連接函數
def connect_database_newpaper():
    #獲取配置數據
    cf = config.ConfigParser()
    configpath = path.get_config_path()
    cf.read(configpath,encoding='UTF-8')
    #讀取MYSQL_HOST(MySQL主機地址)
    host=cf.get("MYSQL","MYSQL_HOST"),
    #讀取MYSQL_DBNAME(MySQL數據庫名稱)
    db=cf.get("MYSQL","MYSQL_DBNAME"),
    #讀取MYSQL_USER(MySQL數據庫用戶名)
    user=cf.get("MYSQL","MYSQL_USER"),
    #讀取MYSQL_PASSWD(MySQL數據庫用戶登錄密碼)
    passwd=cf.get("MYSQL","MYSQL_PASSWD"),
    #設置字符集爲utf8編碼
    charset='utf8',
    try:
        conn = mysql.connect(
            host=host[0],
            user=user[0],
            password=passwd[0],
            database=db[0]
        )
        return conn  #獲取配置數據
    except Exception as e:
        print(e)
        return "error"
# 過濾HTML標籤和換行符
def remove_html_tag(html):
    # 過濾HTML標籤
    pattern = re.compile(r'<[^>]+>',re.S)
    text = pattern.sub('',html)
    # 過濾換行符
    pattern = re.compile(r'[\\\r\\\n]+',re.S)
    text = pattern.sub('',text)
    # 替換英文逗號
    pattern = re.compile(r'[,]+',re.S)
    text = pattern.sub('。',text)
    text = text.strip()
    return text
# 讀取新聞條目
def query_database_record_limit(p_start,p_end):
    # 稿件內容和ID
    content = []
    # 連接數據庫
    conn = connect_database_newpaper()
    if conn == "error":
        print("數據庫連接錯誤")
    else:
        # 獲取Curso對象
        cursor = conn.cursor()
        try:
            # 查詢news表
            cursor.execute("SELECT guid,content FROM news limit " + str(p_start) + "," + str(p_end))
            # 獲取所有結果集
            result = cursor.fetchall()
            # 遍歷結果集的每行記錄
            for row in result:
                # 獲取id和main_content字段內容   
                content.append([row[0],remove_html_tag(row[1])])
            return  content        
        except Exception as e:
            print(e)
        # 關閉數據庫連接
        finally:
            cursor.close()  
            conn.close()
# 程序入口
if __name__ == '__main__':
    print(query_database_record_limit(0,10))

connect_database_newpaper() 方法從項目配置文件讀取數據庫登錄賬號,登錄密碼和數據庫連接地址,並連接數據庫,返回數據庫連接對象。

remove_html_tag() 方法使用正則表達式過濾新聞內容中的 HTML 標籤、換行符、標點符號,這些單詞和字符對文本的比對分析沒有任何幫助。

query_database_record_limit() 方法首先獲取數據庫連接對象,編寫和執行 SQL 查詢語句,然後遍歷返回記錄,對每條記錄的 content 字段內容進行過濾處理,添加到列表對象,最後返回列表對象。

爲方便調試程序,該文件添加了 “main” 入口,可以直接執行該文件,驗證語料數據讀取結果。

下面是實踐過程可能出現的問題和解決方法。

**問題 1:**運行 readnews.py 程序失敗,提示如下圖所示的錯誤。

該問題主要原因是項目採用了模塊化結構,一個目錄表示一個模塊,該目錄下的代碼文件隸屬於該模塊,當程序調用其它模塊文件時,會發生找不到該模塊的問題。如 readnews.py 程序調用了 tool 模塊下的 filepath.py 文件。

解決方法:

Python 搜索模塊的路徑是由四部分構成的:程序的主目錄、PATHONPATH 環境變量、標準鏈接庫目錄、擴展名爲 pth 的路徑配置文件,這四部分的路徑都存儲在 sys.path 列表中。

(1)程序的主目錄

程序的主目錄是指包含主模塊的目錄,Python 首先會在主目錄中搜索模塊,若所有模塊都在主目錄中,所有的導入都會自動完成,而不需要單獨配置模塊路徑。

(2)PATHONPATH 環境變量

PATHONPATH 是 Windows 系統的環境變量,在 Windows 系統中可以設置 PATHONPATH 環境變量,將項目存儲模塊文件的路徑添加到 PATHONPATH 環境變量。

(3)標準鏈接庫目錄

標準鏈接庫目錄是 Python 安裝第三方庫的目錄,這些目錄是 Python 解釋器的默認搜索目錄。

(4)擴展名爲 pth 的路徑配置文件

如果不設置 PATHONPATH 環境變量,也可以用記事本創建一個擴展名爲 pth 的路徑配置文件,該文件每一行都是一個有效的目錄,Python 會讀取路徑文件中的內容,每行都作爲一個有效的目錄,加載到模塊搜索路徑列表中。

例如下面的文件內容:

d:\pythoncode\module\lib
d:\pythoncode\book\lib

該文件要放置到 Python 的安裝目錄或標準庫所在的目錄,才能被 Python 自動讀取。文件放置的目錄可以通過下面的 Python 代碼查看:

>>> import site
>>> site.getsitepackages()
['C:\\python', 'C:\\python\\lib\\site-packages']
>>>

編寫擴展名爲 pth 的文件,將項目根目錄的絕對路徑寫入該文件,並將該文件放置到 Python 的標準庫目錄。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/2OWoW_Gv-5LCEV9SQE0Swg