Tokenizer de entrenamiento y palabras vacías de filtrado

¿Por qué entrenar el propio tokenizador de frases?

Esta es una pregunta muy importante de que si tenemos el tokenizador de oraciones predeterminado de NLTK, ¿por qué necesitamos entrenar un tokenizador de oraciones? La respuesta a esta pregunta radica en la calidad del tokenizador de oraciones predeterminado de NLTK. El tokenizador predeterminado de NLTK es básicamente un tokenizador de uso general. Aunque funciona muy bien, puede que no sea una buena opción para texto no estándar, que quizás sea nuestro texto, o para un texto que tiene un formato único. Para convertir dicho texto en tokens y obtener los mejores resultados, debemos entrenar nuestro propio tokenizador de oraciones.

Ejemplo de implementación

Para este ejemplo, usaremos el corpus de texto web. El archivo de texto que vamos a utilizar de este corpus tiene el formato de texto como los cuadros de diálogo que se muestran a continuación:

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.

Hemos guardado este archivo de texto con el nombre training_tokenizer. NLTK proporciona una clase llamadaPunktSentenceTokenizercon la ayuda de la cual podemos entrenar en texto sin formato para producir un tokenizador de oración personalizado. Podemos obtener texto sin procesar leyendo en un archivo o desde un corpus NLTK usando elraw() método.

Veamos el ejemplo a continuación para obtener más información al respecto:

Primero, importa PunktSentenceTokenizer clase de nltk.tokenize paquete -

from nltk.tokenize import PunktSentenceTokenizer

Ahora, importa webtext corpus de nltk.corpus paquete

from nltk.corpus import webtext

A continuación, usando raw() método, obtenga el texto sin formato de training_tokenizer.txt archivo de la siguiente manera:

text = webtext.raw('C://Users/Leekha/training_tokenizer.txt')

Ahora, crea una instancia de PunktSentenceTokenizer e imprima las oraciones de tokenizar desde el archivo de texto de la siguiente manera:

sent_tokenizer = PunktSentenceTokenizer(text)
sents_1 = sent_tokenizer.tokenize(text)
print(sents_1[0])

Salida

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...

Ejemplo de implementación 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])

Salida

White guy: So, do you have any plans for this evening?

Para comprender la diferencia entre el tokenizador de oraciones predeterminado de NLTK y nuestro propio tokenizador de oraciones entrenado, vamos a convertir el mismo archivo en tokenizador de oraciones predeterminado, es decir, 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?

Con la ayuda de la diferencia en la salida, podemos comprender el concepto de por qué es útil entrenar nuestro propio tokenizador de oraciones.

¿Qué son las palabras vacías?

Algunas palabras comunes que están presentes en el texto pero que no contribuyen al significado de una oración. Estas palabras no son en absoluto importantes para la recuperación de información o el procesamiento del lenguaje natural. Las palabras vacías más comunes son 'el' y 'a'.

Corpus de palabras vacías NLTK

En realidad, el kit de herramientas de lenguaje natural viene con un corpus de palabras vacías que contiene listas de palabras para muchos idiomas. Entendamos su uso con la ayuda del siguiente ejemplo:

En primer lugar, la importación de las palabras vacías Copus de nltk.corpus paquete -

from nltk.corpus import stopwords

Ahora, usaremos palabras vacías de los idiomas ingleses.

english_stops = set(stopwords.words('english'))
words = ['I', 'am', 'a', 'writer']
[word for word in words if word not in english_stops]

Salida

['I', 'writer']

Ejemplo de implementación 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]

Salida

['I', 'writer']

Encontrar la lista completa de idiomas admitidos

Con la ayuda de la siguiente secuencia de comandos de Python, también podemos encontrar la lista completa de idiomas compatibles con el corpus de palabras vacías de NLTK:

from nltk.corpus import stopwords
stopwords.fileids()

Salida

[
   'arabic', 'azerbaijani', 'danish', 'dutch', 'english', 'finnish', 'french',
   'german', 'greek', 'hungarian', 'indonesian', 'italian', 'kazakh', 'nepali',
   'norwegian', 'portuguese', 'romanian', 'russian', 'slovene', 'spanish',
   'swedish', 'tajik', 'turkish'
]