Python | Identificación de género por nombre usando NLTK

Natural Language Toolkit (NLTK) es una plataforma utilizada para crear programas para el análisis de texto. Podemos observar que los nombres masculinos y femeninos tienen algunas características distintivas. Es probable que los nombres que terminan en a, e e i sean femeninos, mientras que los nombres que terminan en k, o, r, s y t probablemente sean masculinos. Construyamos un clasificador para modelar estas diferencias con mayor precisión.

Para ejecutar el siguiente programa de python, debe instalar NLTK. Siga los pasos de instalación.

pip install nltk

El primer paso para crear un clasificador es decidir qué características de la entrada son relevantes y cómo codificar esas características. Para este ejemplo, comenzaremos mirando la letra final de un nombre dado. La siguiente función de extractor de características crea un diccionario que contiene información relevante sobre un nombre dado.

Ejemplo :

Input : gender_features('saurabh')
Output : {'last_letter': 'h'}

Python3

def gender_features(word):
     return {'last_letter': word[-1]}
gender_features('mahavir')
# output : {'last_letter': 'r'}

Aparecerá una GUI, luego elija descargar «todos» para todos los paquetes y luego haga clic en ‘descargar’. Esto le proporcionará todos los tokenizadores, fragmentadores, otros algoritmos y todos los corpus, por lo que la instalación llevará bastante tiempo.

nltk.download()

La clasificación es la tarea de elegir la etiqueta de clase correcta para una entrada determinada. En las tareas de clasificación básicas, cada entrada se considera de forma aislada de todas las demás entradas y el conjunto de etiquetas se define de antemano. Algunos ejemplos de tareas de clasificación son:

  1. Decidir si un correo electrónico es spam o no.
  2. Decidir cuál es el tema de un artículo de noticias, a partir de una lista fija de áreas temáticas como «deportes», «tecnología» y «política».
  3. Decidir si una ocurrencia dada de la palabra banco se usa para referirse a la orilla de un río, una institución financiera, el acto de inclinarse hacia un lado o el acto de depositar algo en una institución financiera.

La tarea de clasificación básica tiene una serie de variantes interesantes. Por ejemplo, en la clasificación de clases múltiples, a cada instancia se le pueden asignar varias etiquetas; en la clasificación de clase abierta, el conjunto de etiquetas no se define de antemano; y en la clasificación secuencial, se clasifican conjuntamente una lista de entradas.

Un clasificador se denomina supervisado si se construye a partir de corpus de entrenamiento que contienen la etiqueta correcta para cada entrada. El marco utilizado por la clasificación supervisada se muestra en la figura.

El conjunto de entrenamiento se usa para entrenar el modelo y el conjunto dev-test se usa para realizar el análisis de errores. El conjunto de prueba sirve en nuestra evaluación final del sistema. Por las razones que se analizan a continuación, es importante que empleemos un conjunto de prueba de desarrollo independiente para el análisis de errores, en lugar de usar solo el conjunto de prueba.

La división de los datos del corpus en diferentes subconjuntos se muestra en la siguiente figura:

Obtenga el enlace del archivo de texto utilizado desde aquí:

  • Por URL de texto directamente. hombre.txt , mujer.txt
  • male.txty female.txtlos archivos se descargan automáticamente mientras el nltk.download()método se ejecuta correctamente. Ruta en el sistema local:
    ruta de nltk: C:\Users\currentUserName\AppData\Roaming
    ruta para archivos dentro de nltk:\nltk_data\corpora\names

Python3

# importing libraries
import random
from nltk.corpus import names
import nltk
  
def gender_features(word):
    return {'last_letter':word[-1]}
  
# preparing a list of examples and corresponding class labels.
labeled_names = ([(name, 'male') for name in names.words('male.txt')]+
             [(name, 'female') for name in names.words('female.txt')])
  
random.shuffle(labeled_names)
  
# we use the feature extractor to process the names data.
featuresets = [(gender_features(n), gender) 
               for (n, gender)in labeled_names]
  
# Divide the resulting list of feature
# sets into a training set and a test set.
train_set, test_set = featuresets[500:], featuresets[:500]
  
# The training set is used to 
# train a new "naive Bayes" classifier.
classifier = nltk.NaiveBayesClassifier.train(train_set)
  
print(classifier.classify(gender_features('mahavir')))
  
# output should be 'male'
print(nltk.classify.accuracy(classifier, train_set))
  
# it shows accuracy of our classifier and 
# train_set. which must be more than 99 % 
# classifier.show_most_informative_features(10)

 
Obtener características informativas de Clasificador:

Python3

classifier.show_most_informative_features(10)
# 10 indicates 10 rows

Producción:

Publicación traducida automáticamente

Artículo escrito por kulkarnimahesh321 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *