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?
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:
Ahora puedes utilizar esta función de la siguiente manera:
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.