Tokenizer de treinamento e palavras irrelevantes de filtragem
Por que treinar o próprio tokenizer de frase?
Esta é uma questão muito importante: se temos o tokenizador de frase padrão do NLTK, por que precisamos treinar um tokenizador de frase? A resposta a esta pergunta está na qualidade do tokenizer de frase padrão do NLTK. O tokenizer padrão do NLTK é basicamente um tokenizer de uso geral. Embora funcione muito bem, pode não ser uma boa escolha para texto fora do padrão, que talvez seja o nosso texto, ou para um texto que esteja tendo uma formatação única. Para tokenizar esse texto e obter os melhores resultados, devemos treinar nosso próprio tokenizador de frases.
Exemplo de Implementação
Para este exemplo, usaremos o corpus do webtext. O arquivo de texto que vamos usar a partir deste corpus está tendo o texto formatado como as caixas de diálogo mostradas abaixo -
Guy: How old are you?
Hipster girl: You know, I never answer that question. Because to me, it's about
how mature you are, you know? I mean, a fourteen year old could be more mature
than a twenty-five year old, right? I'm sorry, I just never answer that question.
Guy: But, uh, you're older than eighteen, right?
Hipster girl: Oh, yeah.
Salvamos este arquivo de texto com o nome de training_tokenizer. NLTK fornece uma classe chamadaPunktSentenceTokenizercom a ajuda do qual podemos treinar em texto bruto para produzir um tokenizer de frase personalizado. Podemos obter texto bruto lendo um arquivo ou um corpus NLTK usando oraw() método.
Vejamos o exemplo abaixo para obter mais informações sobre ele -
Primeiro, importe PunktSentenceTokenizer classe de nltk.tokenize pacote -
from nltk.tokenize import PunktSentenceTokenizer
Agora importe webtext corpus de nltk.corpus pacote
from nltk.corpus import webtext
Em seguida, usando raw() método, obter o texto bruto de training_tokenizer.txt arquivo da seguinte forma -
text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
Agora, crie uma instância de PunktSentenceTokenizer e imprimir as frases tokenizadas do arquivo de texto da seguinte forma -
sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])
Resultado
White guy: So, do you have any plans for this evening?
print(sents_1[1])
Output:
Asian girl: Yeah, being angry!
print(sents_1[670])
Output:
Guy: A hundred bucks?
print(sents_1[675])
Output:
Girl: But you already have a Big Mac...
Exemplo de implementação completo
from nltk.tokenize import PunktSentenceTokenizer
from nltk.corpus import webtext
text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])
Resultado
White guy: So, do you have any plans for this evening?
Para entender a diferença entre o tokenizer de frase padrão do NLTK e nosso próprio tokenizer de frase treinado, vamos tokenizar o mesmo arquivo com o tokenizer de frase padrão, isto é, sent_tokenize ().
from nltk.tokenize import sent_tokenize
from nltk.corpus import webtext
text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')
sents_2 = sent_tokenize(text)
print(sents_2[0])
Output:
White guy: So, do you have any plans for this evening?
print(sents_2[675])
Output:
Hobo: Y'know what I'd do if I was rich?
Com a ajuda da diferença na saída, podemos entender o conceito por que é útil treinar nosso próprio tokenizer de frase.
O que são palavras irrelevantes?
Algumas palavras comuns que estão presentes no texto, mas não contribuem para o significado de uma frase. Essas palavras não são de todo importantes para o propósito de recuperação de informações ou processamento de linguagem natural. As palavras irrelevantes mais comuns são 'o' e 'a'.
Corpus de palavras irrelevantes NLTK
Na verdade, o kit de ferramentas Natural Language vem com um corpus de palavras irrelevantes contendo listas de palavras para vários idiomas. Vamos entender seu uso com a ajuda do seguinte exemplo -
Primeiro, importe as palavras de interrupção Copus de nltk.corpus pacote -
from nltk.corpus import stopwords
Agora, usaremos palavras irrelevantes de idiomas ingleses
english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]
Resultado
['I', 'writer']
Exemplo de implementação completo
from nltk.corpus import stopwords
english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]
Resultado
['I', 'writer']
Encontrando a lista completa de idiomas suportados
Com a ajuda do seguinte script Python, também podemos encontrar a lista completa de linguagens suportadas pelo corpus de palavras irrelevantes NLTK -
from nltk.corpus import stopwords
stopwords.fileids()
Resultado
[
'arabic', 'azerbaijani', 'danish', 'dutch', 'english', 'finnish', 'french',
'german', 'greek', 'hungarian', 'indonesian', 'italian', 'kazakh', 'nepali',
'norwegian', 'portuguese', 'romanian', 'russian', 'slovene', 'spanish',
'swedish', 'tajik', 'turkish'
]