es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Contando bigramas en una categoría específica.

Estoy tratando de crear una función que cuente el número de bigramas en una sección específica del Corpus Brown en NLTK. He creado la función

def category_bigram_count(bigramas, categoria):
    texto_categoria = nltk.corpus.brown.words(categories=categoria)
    return sum(1 for bg in texto_categoria if bg == bigramas)

Pero obviamente cuando intento usar esta función como

category_bigram_count("The", "Office", "government")

Estoy dando 3 argumentos en lugar de los dos que puse en mi función. ¿Cómo puedo hacerlo correctamente? Creo que tengo que cambiar la función para que tome 3 argumentos, como “palabra1”, “palabra2”, “categoria”, pero no puedo lograrlo del todo.

Si quiero hacerlo de la manera larga puedo hacer

palabras_gobierno = nltk.corpus.brown.words(categories="government")
bigramas_gobierno = nltk.bigrams(palabras_gobierno)
frecuencia_bigramas_gobierno = nltk.FreqDist(bigramas_gobierno)
frecuencia_bigramas_gobierno["The", "Office"]
2

¿Pero hay alguna manera de editar mi función para no tener que hacer esto para cada categoría?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para solucionar la función, puedes cambiar el argumento de “bigrams” a “word1” y “word2”, y luego utilizar la función zip para crear bigrams a partir de las palabras. Aquí tienes la función actualizada:

    import nltk
    
    def category_bigram_count(word1, word2, category):
        category_text = nltk.corpus.brown.words(categories=category)
        category_bigrams = nltk.bigrams(category_text)
        return sum(1 for bg in category_bigrams if bg == (word1, word2))
    

    Ahora puedes utilizar esta función de la siguiente manera:

    count = category_bigram_count('The', 'Office', 'government')
    print(count) # imprime 2
    

    Esto contará el número de veces que aparece el bigram (‘The’, ‘Office’) en la categoría ‘government’ del Corpus Brown en NLTK. Puedes utilizar esta función para cualquier combinación de bigramas y categorías.

    Ten en cuenta que esta función distingue entre mayúsculas y minúsculas, por lo que puede que necesites convertir las palabras a minúsculas antes de pasarlas a la función.

Comments are closed.