Pitão

Como extrair frases de texto usando o módulo NLTK Python

Como extrair frases de texto usando o módulo NLTK Python
O Natural Language Toolkit (NLTK) é um módulo de processamento de linguagem e texto para Python. O NLTK pode analisar, processar e tokenizar texto disponível em muitos idiomas diferentes, usando sua biblioteca integrada de corpora e grande conjunto de dados lexicais. Python é uma das linguagens de programação mais populares usadas em ciência de dados e processamento de linguagem, principalmente devido à versatilidade da linguagem e à disponibilidade de módulos úteis como NLTK. Este artigo irá explicar como extrair frases de parágrafos de texto usando NLTK. O código neste guia foi testado com Python 3.8.2 e NLTK 3.4.5 no Ubuntu 20.04 LTS.

Instalando NLTK no Linux

Para instalar o NLTK no Ubuntu, execute o comando abaixo:

$ sudo apt install python3-nltk

Os pacotes NLTK estão disponíveis em todas as principais distribuições Linux. Procure a palavra-chave “NLTK” no gerenciador de pacotes para instalar os pacotes. Se, por algum motivo, o NLTK não estiver disponível nos repositórios de sua distribuição, você pode instalá-lo a partir do gerenciador de pacotes pip executando o comando abaixo:

$ pip install --user -U nltk

Observe que você primeiro terá que instalar o pip a partir do seu gerenciador de pacotes para que o comando acima funcione. Em algumas distribuições, pode ser chamado de pip3. Você também pode seguir as instruções de instalação detalhadas disponíveis no website oficial de NLTK.

Extração de frases de um parágrafo usando NLTK

Para parágrafos sem pontuação e espaçamento complexos, você pode usar o tokenizer de frase NLTK integrado, chamado “tokenizer Punkt,” que vem com um modelo pré-treinado. Você também pode usar seus próprios modelos de dados treinados para converter texto em frases. Modelos de dados treinados personalizados estão fora do escopo deste artigo, portanto, o código a seguir usará o tokenizer Punkt English integrado. Para baixar o arquivo de recurso Punkt, execute os três comandos a seguir em sucessão e aguarde a conclusão do download:

$ python3
$ import nltk
$ nltk.download ('punkt')

Um parágrafo de “Alice's Adventures in Wonderland” será usado no exemplo de código abaixo:

importar nltk
para = "Ou o poço era muito fundo, ou ela caiu bem devagar, pois tinha
muito tempo enquanto ela descia para olhar sobre ela e se perguntar o que estava acontecendo
para acontecer a seguir. Primeiro, ela tentou olhar para baixo e ver o que estava chegando,
mas estava escuro demais para ver qualquer coisa; então ela olhou para os lados do poço, e
notou que estavam cheios de armários e estantes de livros; aqui e ali ela
vi mapas e fotos pendurados em estacas. Ela tirou um frasco de uma das prateleiras
quando ela passou; estava rotulado como 'MARMALADE DE LARANJA', mas para sua grande decepção
estava vazio: ela não gostava de deixar cair o pote com medo de matar alguém, então conseguiu
para colocá-lo em um dos armários quando ela passou por ele."
tokens = nltk.sent_tokenize (para)
para t em tokens:
imprimir (t, "\ n")

Executar o código acima fornecerá a seguinte saída:

Ou o poço era muito fundo, ou ela caiu muito lentamente, pois tinha muito tempo para
ela desceu para olhar sobre ela e se perguntar o que iria acontecer a seguir.
Primeiro, ela tentou olhar para baixo e ver onde estava chegando, mas estava muito escuro
para ver qualquer coisa; então ela olhou para os lados do poço e percebeu que eles estavam
cheio de armários e estantes de livros; aqui e ali ela viu mapas e fotos pendurados
sobre estacas.
Ela tirou um pote de uma das prateleiras ao passar; foi rotulado como 'ORANGEMARMALADE',
mas, para sua grande decepção, estava vazio: ela não gostava de deixar cair a jarra por medo de
matando alguém, então conseguiu colocá-lo em um dos armários ao passar por ele.

O tokenizador de frase Punkt embutido funciona bem se você quiser tokenizar parágrafos simples. Depois de importar o módulo NLTK, tudo que você precisa fazer é usar o método “sent_tokenize ()” em um grande corpo de texto. No entanto, o tokenizador de frase Punkt pode não detectar frases corretamente quando há um parágrafo complexo que contém muitos sinais de pontuação, exclamação, abreviações ou símbolos repetitivos. Não é possível definir uma forma padrão de superar esses problemas. Você terá que escrever um código personalizado para lidar com esses problemas usando regex, manipulação de string ou treinando seu próprio modelo de dados em vez de usar o modelo de dados Punkt integrado.

Você também pode tentar ajustar o modelo Punkt existente para corrigir tokenização incorreta usando alguns parâmetros adicionais. Para fazer isso, siga a documentação oficial de tokenização Punkt disponível aqui. Para usar seus próprios ajustes personalizados, é necessária uma ligeira alteração no código:

de nltk.tokenizar.punkt import PunktSentenceTokenizer, PunktParameters
para = "Ou o poço era muito fundo, ou ela caiu bem devagar, pois tinha bastante
de tempo enquanto ela descia para olhar sobre ela e se perguntar o que iria acontecer
Next. Primeiro, ela tentou olhar para baixo e ver o que estava acontecendo, mas foi
escuro demais para ver qualquer coisa; então ela olhou para os lados do poço e percebeu
que estavam cheios de armários e estantes de livros; aqui e ali ela viu mapas
e fotos penduradas em ganchos. Ela tirou um frasco de uma das prateleiras enquanto ela
passado; estava rotulado como 'MARMALADE DE LARANJA', mas para sua grande decepção era
vazio: ela não gostava de deixar cair o pote com medo de matar alguém, então conseguiu
colocá-lo em um dos armários quando ela passou por ele."
punkt_params = PunktParameters ()
punkt_params.abbrev_types = set (['Sr.', 'Sra.', 'LLC'])
tokenizer = PunktSentenceTokenizer (punkt_params)
tokens = tokenizer.tokenizar (para)
para t em tokens:
imprimir (t, "\ n")

O código acima faz o mesmo trabalho que o método “sent_tokenize ()”. No entanto, agora você pode definir suas próprias regras usando métodos integrados e passá-los como argumentos, conforme descrito na documentação. Por exemplo, algumas abreviações foram adicionadas ao código acima. Se essas abreviações forem seguidas de pontuação, elas não serão divididas em uma nova frase. O comportamento normal é usar um ponto ou ponto como indicação do final de uma frase.

Conclusão

NLTK e seus métodos de tokenização são bastante eficientes em tokenizar e processar dados de texto. No entanto, os modelos pré-treinados podem não funcionar 100% com diferentes tipos de textos. Você pode precisar melhorar os modelos existentes, treinar e fornecer seus próprios ou escrever seu próprio código para corrigir anomalias.

Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider é a décima segunda adição à série Tomb Raider - uma franquia de jogos de ação e aventura criada pela Eidos Montreal. O jogo ...
Como aumentar o FPS no Linux?
FPS significa Quadros por segundo. A tarefa do FPS é medir a taxa de quadros em reproduções de vídeo ou desempenho de jogos. Em palavras simples, o nú...
Top jogos do Oculus App Lab
Se você é proprietário de um fone de ouvido Oculus, deve estar informado sobre o carregamento lateral. Sideload é o processo de instalação de conteúdo...