首页 > 其他分享 >PyODPS节点实现结巴中文分词

PyODPS节点实现结巴中文分词

时间:2024-11-24 09:29:59浏览次数:7  
标签:jieba 单击 结巴 result 分词 test PyODPS

本文为您介绍如何使用DataWorks的PyODPS类型节点,结合开源结巴中文分词库,对数据表中的中文字段进行分词处理并写入新的数据表,以及如何通过闭包函数使用自定义词典进行分词。

前提条件

已创建DataWorks工作空间并绑定了MaxCompute计算引擎创建工作空间

背景信息

DataWorks为您提供PyODPS节点,您可以在DataWorks的PyODPS节点上直接编辑Python代码,并使用MaxCompute的Python SDK。DataWorks的PyODPS节点包括PyODPS 2节点和PyODPS 3节点,建议您使用PyODPS 3节点,详情请参见开发PyODPS 3任务

重要

本文的操作仅作为代码示例,不建议用于实际的生产环境。

准备工作:下载开源结巴中文分词包

请在GitHub下载开源结巴分词中文包

clone

实践1:使用开源词包进行分词

  1. 创建业务流程。

    操作详情请参见创建业务流程

  2. 创建MaxCompute资源并上传jieba-master.zip包。

    1. 右键创建的业务流程,选择新建资源 > MaxCompute > Archive

    2. 新建资源对话框中,配置各项参数,完成后单击新建

      新建资源

      核心参数配置说明如下。

      参数

      描述

      上传文件

      单击点击上传,根据界面提示选择已下载的jieba-master.zip文件。

      名称

      资源的名称,无需和上传的文件名保持一致,但需要符合命名规范,您可根据界面命名规范提示自定义资源名称,本实践名称可配置为jieba-master.zip

    3. 单击工具栏中的

      提交

      图标,根据界面提示提交新建的资源。

  3. 创建测试数据表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
    ) ;

    用于存储分词测试结果数据。

    创建完成后,提交表到开发环境。

  4. 下载测试数据并导入测试数据表jieba_test。

    1. 单击分词测试数据下载测试数据jieba_test.csv至本地。

    2. 数据开发页面,单击

      导入

      图标。

    3. 数据导入向导对话框中,输入需要导入数据的测试表jieba_test并选中,单击下一步

    4. 单击浏览,上传您下载至本地的jieba_test.csv文件,单击下一步

    5. 选中按名称匹配,单击导入数据

  5. 创建PyODPS 3节点。

    1. 右键创建的业务流程,选择新建节点 > MaxCompute > PyODPS 3

    2. 新建节点对话框中,输入名称(示例为word_split),单击确认

  6. 使用开源词包测试运行分词代码。

    在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参数列表

  7. 查看运行结果。

    • 运行完成后,您可以在页面下方的运行日志区域查看结巴分词程序的运行结果。

      运行

    • 您也可以在页面左侧单击临时查询按钮,创建一个临时查询节点,查看测试结果表jieba_result中的结果数据。

      select * from jieba_result;

实践2:使用自定义词库进行分词

如果开源结巴分词的词库无法满足您的需求,需要使用自定义的词典对分词结果进行进一步修正,以下为您示例如何使用自定义词库进行分词。

  1. 创建MaxCompute资源。

    PyODPS自定义函数可以读取上传至MaxCompute的资源(表资源或文件资源)。此时,自定义函数需要写为闭包函数或Callable类。如果您需要引用复杂的自定义函数,则可以使用DataWorks的注册MaxCompute函数功能,详情请参见创建并使用自定义函数

    本实践以使用闭包函数的方式,引用上传至MaxCompute的资源文件(即自定义词典)key_words.txt。

    1. 创建File类型的MaxCompute函数。

      右键创建的业务流程,选择新建资源 > MaxCompute > File,输入资源名称key_words.txt后单击新建

    2. 输入自定义词库内容并保存、提交。

      以下为自定义词库的示例,您可以根据自己的测试需求输入合适的自定义词库。

      增量备份
      安全合规
  2. 使用自定义词库测试运行分词代码。

    在PyODPS 3节点中运行下方示例代码,对上传至jieba_test表中的测试数据进行分词,并回显分词结果表的前十行数据。

    重要

    执行下述代码前,您需要提前创建一个结果表jieba_result2,用于存储自定义词库进行分词的测试结果数据。具体操作请参见创建测试结果表jieba_result

    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参数列表

  3. 查看运行结果。

    • 运行完成后,您可以在页面下方的运行日志区域查看结巴分词程序的运行结果。

      分词结果udf

    • 您也可以在页面左侧单击临时查询按钮,创建一个临时查询节点,查看测试结果表jieba_result2中的结果数据。

      select * from jieba_result2;
  4. 对比自定义词库与开源词包的运行结果。

    结果对比

标签:jieba,单击,结巴,result,分词,test,PyODPS
From: https://blog.csdn.net/2401_88127808/article/details/143890767

相关文章

  • ElasticSearch安装分词器与整合SpringBoot
    ElasticSearch安装分词器与整合SpringBoot如果还没安装的点击安装ElasticSearch查看怎么安装分词器1.分词器在Elasticsearch中,分词器(Tokenizer)是分析器(Analyzer)的一部分,它的主要职责是将文本输入(如字符串)分割成一系列的词元(tokens)。这些词元是搜索和索引的基础单元。......
  • NLTK英文文本分词的常用模块
    目录1.断句模块:2.分词模块:3.去除文本中的除标点符号:4.去除停用词:5.词频提取与词频绘图: 5.1词频的提取5.2画出词频5.3画出出现频率最高的三个词 6.单词搜索1.断句模块:importnltkfromnltk.tokenizeimportsent_tokenize#英文断句模块#要断句的文本parag......
  • *Python*jieba库简单分词
            jieba库是一个用Python编写的用于中文文本处理的开源库,它的主要功能是将连续的中文字符序列切分成一个个单独的词语。jieba分词支持多种分词模式,并且可以方便地加载自定义词典,以提高分词的准确率。1、安装jieba库pipinstalljieba2、精确模式精确模......
  • Python 中文分词
    Python中文分词结巴中文分词https://github.com/fxsjy/jieba安装 pipinstalljiebapipinstallpaddlepaddle 20.5.1. 分词演示 #encoding=utf-8importjiebaimportpaddlepaddle.enable_static()jieba.enable_paddle()#启动paddle模式。strs=[......
  • elasticsearch整合自定义词库实现自定义分词
            在进行分词时es有时没有办法对人名或者其他新词、偏词进行精准的分词,这时候就需要我们进行自定义分词。前置:        1).安装完成ik分词器,安装流程可以参考:ik安装流程        2).自定义的远程库我们使用nginx,所以需要提前安装nginx1.进入到......
  • 阿里dataworks通过pyodps 3获取表元数据及质量稽核
    用途:本脚本的主要作用就是获取所属工作空间中表字段信息核心脚本:本逻辑主要需要五个核心脚本:00_task_meta_setup_time#用于创建表及设置odps的启动时间01_task_meta_fields_move#搬迁数据02_task_meta_tables#表元数据获取及数据量统计03_task_meta_fields_parallel......
  • ElasticSearch IK分词器的MySQL热部署字典(Docker)
    1.下载插件源码找到自己对应ES版本的下载Releases·infinilabs/analysis-ik·GitHub2.添加mysql驱动依赖<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.......
  • ElasticSearch分词器
    什么是分词器❓顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在ES中,Analysis是通过分词器(Analyzer)来实现的,可使用ES内置的分析器或者按需定制化分析器。分词器组成部分分词器是专门处理分词的组件,分词器由以下三部分组成:characte......
  • python-分享篇-英文短文自动分词写入文本文件
    文章目录准备代码效果准备代码importstringf=open('./data/split.txt')s=f.read()str1=s.title()print(str1)print("".join([sforsinstr1.splitlines(True)ifs.strip()]))list1=str1.split()#采用默认分隔符进行分割#字符串列表去重l1=list(s......
  • 文本分词加停用词去除
    importosimportjiebadefload_stopwords(stopwords_path):"""加载停用词表"""withopen(stopwords_path,'r',encoding='utf-8')asfile:stopwords=set(file.read().split())returnstopwords......