從 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