Use um nó PyODPS no DataWorks para segmentar texto em chinês com o Jieba, ferramenta de segmentação de código aberto. Essa abordagem atende a casos de uso como análise de texto, recuperação de informações, mineração de texto, extração de recursos, criação de mecanismos de busca, tradução automática e treinamento de modelos de linguagem. Se o dicionário padrão do Jieba não atender às suas necessidades, crie um dicionário personalizado para adicionar entradas ou modifique os resultados da segmentação.
Informações básicas
O DataWorks oferece nós PyODPS que permitem edite código Python e usar o MaxCompute SDK for Python no desenvolvimento de dados. Há duas variantes: PyODPS 2 e PyODPS 3. O PyODPS 3 fornece uma API mais simples e pode ser instalado via pip, facilitando o acesso aos recursos e funcionalidades do MaxCompute. Recomendamos o uso de nós PyODPS 3. Para mais informações, consulte Develop a PyODPS 3 task.
Os nós PyODPS 3 suportam apenas Python 3.X. Os nós PyODPS 2 suportam Python 2.X e Python 3.X. Para usar Python 2.X, selecione exclusivamente nós PyODPS 2.
As operações descritas neste tópico servem apenas como referência. Não as utilize em ambientes de produção.
Pré-requisitos
Crie um workspace do DataWorks. Para mais informações, consulte Create and manage workspaces.
Vincule um mecanismo de computação MaxCompute ao DataStudio. Para mais informações, consulte Create a MaxCompute data source and bind it to a workspace.
Preparação: Baixe o pacote Jieba de código aberto
Baixe o pacote Jieba de código aberto em seu repositório no GitHub: https://github.com/fxsjy/jieba. Clique em no botão Code no canto superior direito e selecione Download ZIP para baixe o arquivo compactado do código-fonte.
Prática 1: Use o pacote Jieba de código aberto para segmentar texto em chinês
Crie um fluxo de trabalho. Para mais informações, consulte Create a workflow.
-
Crie um recurso do MaxCompute e faça upload do pacote jieba-master.zip.
Clique em com o botão direito no fluxo de trabalho criado e escolha .
-
Na caixa de diálogo Create Resource, configure os parâmetros e clique em Create.
Neste exemplo, defina Engine Type como MaxCompute, Engine Instance como doc_test e Resource Type como Archive. Selecione Upload as ODPS Resource.
Parâmetro
Descrição
Upload File
Clique em Click Upload e selecione o arquivo jieba-master.zip baixado.
Name
Nome do recurso. Deve seguir as convenções de nomenclatura, mas não precisa corresponder ao nome do arquivo enviado. Neste exemplo, o nome é definido como jieba-master.zip.
Clique em no ícone
na barra de ferramentas superior para submeter o recurso.
-
Crie uma tabela chamada jieba_test e outra chamada jieba_result. A tabela jieba_test armazena os dados de teste; a tabela jieba_result guarda o resultado do teste.
Clique em com o botão direito no fluxo de trabalho criado e escolha . Crie as tabelas e use o modo DDL para configure seus campos. Após a criação, submeta-as ao ambiente de desenvolvimento. Para mais detalhes sobre a criação de tabelas, consulte Create and use MaxCompute tables.
A tabela a seguir descreve as instruções DDL usadas para configure os campos nas duas tabelas.
Tabela
Instrução DDL
Descrição
jieba_test
CREATE TABLE jieba_test ( `chinese` string, `content` string );Armazena dados de teste.
jieba_result
CREATE TABLE jieba_result ( `chinese` string ) ;Armazena o resultado do teste.
-
Baixe os dados de teste e importe-os para a tabela jieba_test.
Baixe o arquivo jieba_test.csv, que contém os dados de teste, para sua máquina local.
Na página DataStudio, clique em no ícone
.Na caixa de diálogo Data Import Wizard, insira jieba_test como tabela de destino, selecione-a e clique em Next.
Faça upload do arquivo jieba_test.csv do seu computador, configure as opções de envio, visualize os dados e clique em Next.
Selecione By Name e clique em Import Data.
-
Crie um nó PyODPS 3.
Clique em com o botão direito no fluxo de trabalho criado e escolha .
Na caixa de diálogo Create Node, insira um Name (por exemplo, Name) e clique em OK.
-
Execute o código de segmentação com o pacote Jieba de código aberto.
Execute o código de exemplo abaixo no nó PyODPS 3 para segmentar os dados de teste na tabela jieba_test e retornar as primeiras 10 linhas dos resultados:
def test(input_var): import jieba result = jieba.cut(input_var, cut_all=False) return "/ ".join(result) # odps.stage.mapper.split.size can be used to increase parallelism. hints = { 'odps.isolation.session.enable': True, 'odps.stage.mapper.split.size': 64, } libraries =['jieba-master.zip'] # Reference your jieba-master.zip archive. src_df = o.get_table('jieba_test').to_df() # Reference the data in your jieba_test table. result_df = src_df.chinese.map(test).persist('jieba_result', hints=hints, libraries=libraries) print(result_df.head(10)) # View the first 10 rows of the segmentation results. For more data, query the jieba_result table.NotaUse o parâmetro odps.stage.mapper.split.size para melhorar o paralelismo de execução. Para mais informações, consulte Flag parameters.
-
Visualize o resultado.
Verifique os resultados da segmentação Jieba por meio de um dos métodos a seguir:
Método 1: Verifique os resultados na área Operational Logs, na parte inferior da página.
-
Método 2: No painel de navegação à esquerda, clique em Ad Hoc Query para crie um nó Ad Hoc Query. Em seguida, visualize os dados na tabela jieba_result.
select * from jieba_result;
Prática 2: Use um dicionário personalizado para segmentar texto em chinês
Se o dicionário padrão do Jieba não atender aos seus requisitos, use um dicionário personalizado para segmentar texto em chinês. O exemplo a seguir demonstra essa abordagem.
-
Crie um recurso do MaxCompute.
Funções definidas pelo usuário (UDFs) do PyODPS podem ler recursos enviados ao MaxCompute, incluindo tabelas e arquivos. Escreva a UDF como uma função closure ou uma classe chamável.
NotaCrie funções do MaxCompute no DataWorks para referenciar UDFs complexas. Para mais informações, consulte Create and use a MaxCompute function.
O exemplo abaixo usa uma função closure para referenciar o arquivo de dicionário personalizado key_words.txt enviado ao MaxCompute.
-
Crie um recurso do MaxCompute do tipo File.
Clique em com o botão direito no fluxo de trabalho criado e escolha . Insira o nome do recurso key_words.txt e clique em Create.
-
Na aba de configuração do recurso key_words.txt, insira o conteúdo do dicionário personalizado, salve e submeta o recurso.
O conteúdo abaixo é um exemplo de dicionário personalizado. Preencha o conteúdo conforme as necessidades do seu teste.
-
-
Execute o código de segmentação com o dicionário personalizado.
Execute o código de exemplo a seguir no nó PyODPS 3 para segmentar os dados de teste na tabela jieba_test e retornar as primeiras 10 linhas dos resultados:
def test(resources): import jieba fileobj = resources[0] jieba.load_userdict(fileobj) def h(input_var): # In the nested function h(), load the dictionary and perform segmentation. result = jieba.cut(input_var, cut_all=False) return "/ ".join(result) return h # odps.stage.mapper.split.size can be used to increase parallelism. hints = { 'odps.isolation.session.enable': True, 'odps.stage.mapper.split.size': 64, } libraries =['jieba-master.zip'] # Reference your jieba-master.zip archive. src_df = o.get_table('jieba_test').to_df() # Reference the data in your jieba_test table. file_object = o.get_resource('key_words.txt') # get_resource() references a MaxCompute resource. mapped_df = src_df.chinese.map(test, resources=[file_object]) # The map function calls the function and passes the resources parameter. result_df = mapped_df.persist('jieba_result2', hints=hints, libraries=libraries) print(result_df.head(10)) # View the first 10 rows of the segmentation results. For more data, query the jieba_result2 table.NotaUse o parâmetro odps.stage.mapper.split.size para melhorar o paralelismo de execução. Para mais informações, consulte Flag parameters.
-
Visualize o resultado.
Verifique os resultados da segmentação com dicionário personalizado usando um dos métodos abaixo:
Método 1: Consulte os resultados na área Operational Logs, na parte inferior da página.
-
Método 2: No painel de navegação à esquerda, clique em Ad Hoc Query para crie um nó Ad Hoc Query. Depois, visualize os dados na tabela jieba_result2.
select * from jieba_result2;