Instalando NLTK no Linux
Para instalar o NLTK no Ubuntu, execute o comando abaixo:
$ sudo apt install python3-nltkOs 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 nltkObserve 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 nltkpara = "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 paraela 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, PunktParameterspara = "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.