Você pode usar um nó PyODPS no DataWorks para segmentar texto em chinês com o Jieba, a ferramenta de segmentação de código aberto, para casos de uso como análise de texto, recuperação de informações, mineração de texto, extração de recursos, construçã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 aos seus requisitos, você pode criar um dicionário personalizado para adicionar entradas ou modificar os resultados da segmentação.
Informações de contexto
O DataWorks fornece nós PyODPS que permitem editar código Python e usar o MaxCompute SDK for Python para desenvolvimento de dados. Os nós PyODPS incluem as variantes PyODPS 2 e PyODPS 3. O PyODPS 3 oferece uma API mais simples e pode ser instalado usando pip, proporcionando melhor acesso aos recursos e funcionalidades do MaxCompute. Recomendamos o uso de nós PyODPS 3. Para mais informações, consulte Desenvolver uma tarefa do PyODPS 3.
Os nós do PyODPS 3 suportam apenas o Python 3.X. Os nós do PyODPS 2 suportam o Python 2.X e o Python 3.X. Se você quiser usar o Python 2.X, poderá selecionar apenas nós do PyODPS 2.
As operações neste tópico são apenas para referência. Não as utilize em ambientes de produção.
Pré-requisitos
Um espaço de trabalho do DataWorks foi criado. Para obter mais informações, consulte Criar e gerenciar espaços de trabalho.
Você tem um mecanismo de computação MaxCompute vinculado ao DataStudio. Para mais informações, consulte Criar uma fonte de dados do MaxCompute e vinculá-la a um workspace.
Preparação: Baixar o pacote de código aberto Jieba
Baixe o pacote Jieba de código aberto do seu repositório do GitHub em https://github.com/fxsjy/jieba. Clique no botão Code no canto superior direito e selecione Download ZIP para baixar o arquivo de 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 Criar um fluxo de trabalho.
-
Crie um recurso do MaxCompute e faça upload do pacote jieba-master.zip.
Clique com o botão direito no workflow que você criou e selecione .
-
No Criar Recurso caixa de diálogo, configure os parâmetros e clique Criar.
Neste exemplo, defina o Tipo de mecanismo como MaxCompute, a Instância do mecanismo como doc_test e o Tipo de recurso como Archive. Selecione Fazer upload como recurso do ODPS.
Parâmetro
Descrição
Carregar arquivo
Clique Clique em Upload e selecione o arquivo baixado jieba-master.zip arquivo.
Nome
O nome do recurso. Deve seguir as convenções de nomenclatura, mas não precisa corresponder ao nome do arquivo enviado. Neste exemplo, o nome está definido como jieba-master.zip.
Clique no
ícone
na barra de ferramentas superior para fazer o commit do recurso.
-
Crie uma tabela chamada jieba_test e outra chamada jieba_result. A tabela jieba_test é usada para armazenar dados de teste. A tabela jieba_result é usada para armazenar o resultado do teste.
Clique com o botão direito no workflow que você criou e escolha . Crie as tabelas e use o modo DDL para configurar seus campos. Após a criação das tabelas, faça o commit delas no ambiente de desenvolvimento. Para obter mais informações sobre a criação de tabelas, consulte Criar e usar tabelas do MaxCompute.
A tabela a seguir descreve as instruções DDL usadas para configurar 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 jieba_test.csv arquivo que contém dados de teste para a sua máquina local.
No DataStudio página, clique no
ícone
.No Assistente de Importação de Dados caixa de diálogo, insira jieba_test como a tabela de destino, selecione-a e clique Próximo.
Faça o upload do arquivo jieba_test.csv do seu computador, defina as configurações de upload, visualize a prévia dos dados e clique Próximo.
Selecionar Por nome e clique Importar Dados.
-
Crie um nó PyODPS 3.
Clique com o botão direito no workflow que você criou e escolha .
No Criar Nó caixa de diálogo, insira um Nome (por exemplo, word_split) e clique OK.
-
Use o pacote de código aberto Jieba para executar o código de segmentação.
Execute o seguinte código de exemplo no nó PyODPS 3 para segmentar os dados de teste no jieba_test tabela e retorne as primeiras 10 linhas dos dados do resultado da segmentação:
def test(input_var): import jieba result = jieba.cut(input_var, cut_all=False) return "/ ".join(result) # odps.stage.mapper.split.size pode ser usado para aumentar o paralelismo. hints = { 'odps.isolation.session.enable': True, 'odps.stage.mapper.split.size': 64, } libraries =['jieba-master.zip'] # Referencie o arquivo jieba-master.zip. src_df = o.get_table('jieba_test').to_df() # Referencie os dados da tabela jieba_test. result_df = src_df.chinese.map(test).persist('jieba_result', hints=hints, libraries=libraries) print(result_df.head(10)) # Visualize as 10 primeiras linhas dos resultados da segmentação. Para mais dados, consulte a tabela jieba_result.Notaodps.stage.mapper.split.size pode ser usado para melhorar o paralelismo de execução. Para obter mais informações, consulte Parâmetros de flag.
-
Visualize o resultado.
Você pode visualizar os resultados da segmentação do Jieba usando um dos seguintes métodos:
Método 1: Visualize os resultados no Logs operacionais área na parte inferior da página.
-
Método 2: No painel de navegação à esquerda, clique Consulta Ad Hoc para criar um nó Ad Hoc Query. Em seguida, visualize os dados no jieba_result tabela.
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, você pode usar um dicionário personalizado para segmentar textos em chinês. O exemplo a seguir demonstra essa abordagem.
-
Crie um recurso do MaxCompute.
As funções definidas pelo usuário (UDFs) do PyODPS podem ler recursos carregados no MaxCompute, incluindo tabelas e arquivos. A UDF deve ser escrita como uma função closure ou uma classe chamável.
NotaVocê pode criar funções do MaxCompute no DataWorks para referenciar UDFs complexas. Para obter mais informações, consulte Criar e usar uma função do MaxCompute.
O exemplo a seguir usa uma função closure para referenciar o arquivo de dicionário personalizado. key_words.txt carregado no MaxCompute.
Um dicionário personalizado estende o dicionário padrão do Jieba. Após adicionar as palavras que você deseja manter intactas ao dicionário personalizado, o Jieba as retorna como palavras completas durante a segmentação, em vez de dividi-las ainda mais. Isso melhora a precisão da segmentação para termos específicos de domínio e outras palavras que o dicionário padrão não consegue reconhecer corretamente.
-
Crie uma função do MaxCompute do tipo File.
Clique com o botão direito no workflow que você criou e selecione . Insira o nome do recurso palavras-chave.txt e clique Criar.
Na aba de configuração do recurso key_words.txt, insira o conteúdo do dicionário personalizado, salve e confirme o recurso.
-
-
Use o dicionário personalizado para executar o código de segmentação.
Execute o seguinte código de exemplo no nó PyODPS 3 para segmentar os dados de teste no jieba_test tabela e retorne as primeiras 10 linhas dos dados de resultado da segmentação:
def test(resources): import jieba fileobj = resources[0] jieba.load_userdict(fileobj) def h(input_var): # Na função aninhada h(), carregue o dicionário e execute a segmentação. result = jieba.cut(input_var, cut_all=False) return "/ ".join(result) return h # odps.stage.mapper.split.size pode ser usado para aumentar o paralelismo. hints = { 'odps.isolation.session.enable': True, 'odps.stage.mapper.split.size': 64, } libraries =['jieba-master.zip'] # Referencie seu arquivo jieba-master.zip. src_df = o.get_table('jieba_test').to_df() # Referencie os dados da sua tabela jieba_test. file_object = o.get_resource('key_words.txt') # get_resource() referencia um recurso do MaxCompute. mapped_df = src_df.chinese.map(test, resources=[file_object]) # A função map chama a função e passa o parâmetro resources. result_df = mapped_df.persist('jieba_result2', hints=hints, libraries=libraries) print(result_df.head(10)) # Visualize as 10 primeiras linhas dos resultados da segmentação. Para obter mais dados, consulte a tabela jieba_result2.Notaodps.stage.mapper.split.size pode ser utilizado para melhorar o paralelismo de execução. Para mais informações, consulte Parâmetros de flag.
-
Visualize o resultado.
Você pode visualizar os resultados da segmentação do dicionário personalizado usando um dos seguintes métodos:
Método 1: Visualizar os resultados no Logs operacionais área na parte inferior da página.
-
Método 2: No painel de navegação à esquerda, clique Consulta Ad Hoc para criar um nó Ad Hoc Query. Em seguida, visualize os dados no jieba_result2 tabela.
select * from jieba_result2;