如您需進行文本分析、信息檢索、文本挖掘與特征提取、構建搜索引擎、機器翻譯、訓練語言模型等場景應用,則可通過DataWorks的PyODPS節點使用開源結巴中文分詞工具,將中文文本分割為詞語,進行相關文本的分析處理。同時,若默認詞庫無法滿足您的業務需要,您還可通過創建自定義詞庫來增加分詞或修改分詞結果。
背景信息
DataWorks提供的PyODPS節點支持直接編輯Python代碼并使用MaxCompute的Python SDK進行數據開發。PyODPS節點分為PyODPS 2節點和PyODPS 3節點類型,PyODPS 3提供了更簡潔易用的API接口,支持通過PIP直接安裝,可以更好地利用MaxCompute的資源和特性,建議您使用PyODPS 3節點進行開發操作,詳情請參見開發PyODPS 3任務。
PyODPS 3僅支持Python 3.x版本,PyODPS 2同時支持Python 2.x和Python 3.x版本,如您需要使用Python 2.x版本,則僅支持選擇PyODPS 2節點。
本文的操作僅作為示例展示功能,不建議用于實際的生產環境。
前提條件
已創建DataWorks工作空間,詳情請參見創建工作空間。
已創建MaxCompute數據源并綁定至工作空間,詳情請參見創建MaxCompute數據源并綁定至工作空間。
準備工作:下載開源結巴中文分詞包
進入GitHub,按照下圖指引下載開源結巴分詞中文包。
實踐一:使用開源詞包進行分詞
創建業務流程,操作詳情請參見創建業務流程。
創建MaxCompute資源并上傳jieba-master.zip包。
右鍵單擊創建的業務流程,選擇
。在新建資源對話框中,配置各項參數,完成后單擊新建。
核心參數配置說明如下。
參數
描述
上傳文件
單擊點擊上傳,根據界面提示選擇已下載的jieba-master.zip文件。
名稱
資源的名稱,無需和上傳的文件名保持一致,但需要符合命名規范。您可根據界面提示自定義資源名稱,本實踐名稱示例配置為jieba-master.zip。
單擊工具欄中的圖標,根據界面提示提交新建的資源。
創建測試數據表jieba_test和測試結果表jieba_result。
右鍵單擊創建的業務流程,選擇創建并使用MaxCompute表。
,根據界面提示創建表,并使用DDL模式配置表的字段信息。創建完成后,提交表到開發環境。建表相關操作,詳情請參見本實踐需要創建的兩個表的配置要點如下。
表名
DDL語句
作用
jieba_test
CREATE TABLE jieba_test ( `chinese` string, `content` string );
用于存儲測試的數據。
jieba_result
CREATE TABLE jieba_result ( `chinese` string ) ;
用于存儲分詞測試結果數據。
下載測試數據并導入測試數據表jieba_test。
單擊分詞測試數據下載測試數據jieba_test.csv至本地。
在數據開發頁面,單擊圖標。
在將本地數據導入開發表對話框,輸入需要導入數據的測試表jieba_test并選中,單擊下一步。
上傳您下載至本地的jieba_test.csv文件,配置上傳信息并預覽數據,單擊下一步。
選中按名稱匹配,單擊導入數據。
創建PyODPS 3節點。
右鍵單擊創建的業務流程,選擇
。在新建節點對話框輸入名稱(示例為word_split),單擊確認。
使用開源詞包測試運行分詞代碼。
在PyODPS 3節點中運行下方示例代碼,對上傳至jieba_test表中的測試數據進行分詞,并回顯分詞結果表的前十行數據。
def test(input_var): import jieba result = jieba.cut(input_var, cut_all=False) return "/ ".join(result) # odps.stage.mapper.split.size 可用于提高執行并行度 hints = { 'odps.isolation.session.enable': True, 'odps.stage.mapper.split.size': 64, } libraries =['jieba-master.zip'] # 引用您的 jieba-master.zip 壓縮包 src_df = o.get_table('jieba_test').to_df() # 引用您的 jieba_test 表中的數據 result_df = src_df.chinese.map(test).persist('jieba_result', hints=hints, libraries=libraries) print(result_df.head(10)) # 查看分詞結果前10行,更多數據需要在表 jieba_result 中查看
說明odps.stage.mapper.split.size可用于提高執行并行度,詳情請參見Flag參數列表。
查看運行結果。
運行完成后,您可通過如下方式查看結巴分詞程序的運行結果:
方式一:在頁面下方的運行日志區域查看。
方式二:在頁面左側單擊臨時查詢按鈕,創建一個臨時查詢節點,查看測試結果表jieba_result中的結果數據。
select * from jieba_result;
實踐二:使用自定義詞庫進行分詞
如果開源結巴分詞的默認詞庫無法滿足您的需求,則您可使用自定義的詞庫對分詞結果進行進一步修正,以下為您示例如何使用自定義詞庫進行分詞。
創建MaxCompute資源。
PyODPS自定義函數可讀取上傳至MaxCompute的資源(表資源或文件資源),此時,自定義函數需要寫為閉包函數或Callable類。
說明您可使用DataWorks的注冊MaxCompute函數功能引用復雜的自定義函數,詳情請參見創建并使用自定義函數。
本實踐以使用閉包函數的方式,引用上傳至MaxCompute的資源文件(即自定義詞庫)key_words.txt。
創建File類型的MaxCompute函數。
右鍵單擊創建的業務流程,選擇key_words.txt后單擊新建。
,輸入資源名稱輸入自定義詞庫內容并保存、提交。
以下為自定義詞庫的示例,您可根據自己的測試需求輸入合適的自定義詞庫。
增量備份 安全合規
使用自定義詞庫測試運行分詞代碼。
在PyODPS 3節點中運行下方示例代碼,對上傳至jieba_test表中的測試數據進行分詞,并回顯分詞結果表的前十行數據。
def test(resources): import jieba fileobj = resources[0] jieba.load_userdict(fileobj) def h(input_var): # 在嵌套函數h()中,執行詞典加載和分詞 result = jieba.cut(input_var, cut_all=False) return "/ ".join(result) return h # odps.stage.mapper.split.size 可用于提高執行并行度 hints = { 'odps.isolation.session.enable': True, 'odps.stage.mapper.split.size': 64, } libraries =['jieba-master.zip'] # 引用您的 jieba-master.zip 壓縮包 src_df = o.get_table('jieba_test').to_df() # 引用您的 jieba_test 表中的數據 file_object = o.get_resource('key_words.txt') # get_resource() 引用 MaxCompute 資源 mapped_df = src_df.chinese.map(test, resources=[file_object]) # map調用函數,并傳遞 resources 參數 result_df = mapped_df.persist('jieba_result2', hints=hints, libraries=libraries) print(result_df.head(10)) # 查看分詞結果前10行,更多數據需要在表 jieba_result2 中查看
說明odps.stage.mapper.split.size 可用于提高執行并行度,詳情請參見Flag參數列表。
查看運行結果。
運行完成后,您可通過如下方式查看結巴分詞程序的運行結果:
方式一:在頁面下方的運行日志區域查看。
方式二:在頁面左側單擊臨時查詢按鈕,創建一個臨時查詢節點,查看測試結果表jieba_result2中的結果數據。
select * from jieba_result2;
對比自定義詞庫與開源詞包的運行結果。