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

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

Instalando o 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. Pesquise 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ê poderá instalá -lo no gerenciador de pacotes PIP executando o comando abaixo:

$ pip install --user -u nltk

Observe que você precisará primeiro instalar o PIP no seu gerenciador de pacotes para o comando acima para funcionar. Em algumas distribuições, pode ser chamado de PIP3. Você também pode seguir instruções detalhadas de instalação disponíveis no site oficial do NLTK.

Extraindo frases de um parágrafo usando NLTK

Para parágrafos sem pontuações e espaçamentos complexos, você pode usar o tokenizador de frases NLTK embutido, chamado "Punkt Thokenizer", que vem com um modelo pré-treinado. Você também pode usar seus próprios modelos de dados treinados para tokenizar o texto em frases. Modelos de dados treinados por personagens estão fora do escopo deste artigo, portanto o código abaixo usará o tokenizador de inglês punk embutido. Para baixar o arquivo Punkt Resource, execute os três comandos a seguir em sucessão e aguarde o download para terminar:

$ 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 profundo, ou ela caiu muito lentamente, pois ela teve
Muito tempo quando ela desceu para olhar sobre ela e se perguntar o que estava acontecendo
para acontecer a seguir. Primeiro, ela tentou olhar para baixo e entender o que estava chegando,
Mas estava escuro demais para ver qualquer coisa; Então ela olhou para os lados do poço, e
notaram que eles estavam cheios de armários e protestas de livros; aqui e ali ela
Mapas e fotos viu penduradas em estacas. Ela tirou uma jarra de uma das prateleiras
quando ela passou; Foi rotulado como 'marmelada laranja', mas para sua grande decepção
estava vazio: ela não gostava de soltar o pote por 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 (parágrafo)
Para T em tokens:
Imprimir (T, "\ n")

A execução do código acima fornecerá a seguinte saída:

O tokenizador de frases punkt embutido funciona bem se você quiser tokenizar parágrafos simples. Depois de importar o módulo NLTK, tudo o que você precisa fazer é usar o método "Sent_tokenize ()" em um grande corpus de texto. No entanto, o tokenizador de sentenças Punkt pode não detectar corretamente frases quando houver um parágrafo complexo que contém muitos marcos de pontuação, marcas de exclamação, abreviações ou símbolos repetitivos. Não é possível definir uma maneira padrão de superar esses problemas. Você precisará escrever código personalizado para abordar esses problemas usando o regex, manipulação de string ou treinando seu próprio modelo de dados em vez de usar o modelo de dados punkt embutido.

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

de nltk.tokenize.Importar punkt punktsentencetekenizer, punktparameters
para = "Ou o poço era muito profundo, ou ela caiu muito lentamente, pois ela tinha muito
de tempo quando ela desceu para olhar sobre ela e se perguntar o que ia acontecer
próximo. Primeiro, ela tentou olhar para baixo e entender o que estava chegando, mas foi
Escuro demais para ver qualquer coisa; Então ela olhou para as laterais do poço e notou
que eles estavam cheios de armários e protestos de livros; aqui e ali ela viu mapas
e fotos penduradas em pinos. Ela tirou uma jarra de uma das prateleiras enquanto ela
passado; Foi rotulado como 'marmelada laranja', mas para sua grande decepção, foi
vazio: ela não gostava de soltar o pote por medo de matar alguém, então conseguiu
coloque -o em um dos armários quando ela passou por ele."
punkt_params = punktparameters ()
punkt_params.abrev_types = set (['MR', 'MRS', 'LLC'])
Tokenizer = PunktSentenceTokenizer (Punkt_params)
tokens = tokenizer.tokenize (parágrafo)
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 internos e passar 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 período como uma indicação do fim de uma frase.

Conclusão

O NLTK e seus métodos de tokenização são bastante eficientes em tokenize e processamento de dados de texto. No entanto, os modelos pré-treinados podem não funcionar 100% com diferentes tipos de textos. Pode ser necessário melhorar os modelos existentes, treinar e fornecer o seu próprio ou escrever seu próprio código para corrigir anomalias.