web-dev-qa-db-fra.com

Comment extraire des phrases d'un corpus à l'aide de Gensim

Pour le prétraitement du corpus, je prévoyais d'extraire des phrases courantes du corpus, pour cela, j'ai essayé d'utiliser le modèle Phrases dans gensim, j'ai essayé ci-dessous le code mais cela ne me donne pas la sortie souhaitée.

Mon code

from gensim.models import Phrases
documents = ["the mayor of new york was there", "machine learning can be useful sometimes"]

sentence_stream = [doc.split(" ") for doc in documents]
bigram = Phrases(sentence_stream)
sent = [u'the', u'mayor', u'of', u'new', u'york', u'was', u'there']
print(bigram[sent])

Sortie

[u'the', u'mayor', u'of', u'new', u'york', u'was', u'there']

Mais cela devrait venir comme

[u'the', u'mayor', u'of', u'new_york', u'was', u'there']

Mais quand j'ai essayé d'imprimer le vocabulaire des données de train, je peux voir bigram, mais ça ne fonctionne pas avec les données de test, où je me trompe?

print bigram.vocab

defaultdict(<type 'int'>, {'useful': 1, 'was_there': 1, 'learning_can': 1, 'learning': 1, 'of_new': 1, 'can_be': 1, 'mayor': 1, 'there': 1, 'machine': 1, 'new': 1, 'was': 1, 'useful_sometimes': 1, 'be': 1, 'mayor_of': 1, 'york_was': 1, 'york': 1, 'machine_learning': 1, 'the_mayor': 1, 'new_york': 1, 'of': 1, 'sometimes': 1, 'can': 1, 'be_useful': 1, 'the': 1}) 
28
Prashant Puri

J'ai trouvé la solution au problème, il y avait deux paramètres que je n'ai pas pris en charge qui devraient être passés à modèle Phrases (), ce sont

  1. min_count ignorer tous les mots et bigrammes dont le nombre total collecté est inférieur à cela. Par défaut, sa valeur est 5

  2. seuil représente un seuil pour former les phrases (plus élevé signifie moins de phrases). Une phrase des mots a et b est acceptée si (cnt (a, b) - min_count) * N/(cnt (a) * cnt (b))> seuil, où N est la taille totale du vocabulaire. Par défaut, sa valeur est 10,

Avec mes données de train ci-dessus avec deux déclarations, la valeur de seuil était , donc je change les jeux de données de train et j'ajoute ces deux paramètres.

Mon nouveau code

from gensim.models import Phrases
documents = ["the mayor of new york was there", "machine learning can be useful sometimes","new york mayor was present"]

sentence_stream = [doc.split(" ") for doc in documents]
bigram = Phrases(sentence_stream, min_count=1, threshold=2)
sent = [u'the', u'mayor', u'of', u'new', u'york', u'was', u'there']
print(bigram[sent])

Sortie

[u'the', u'mayor', u'of', u'new_york', u'was', u'there']

Gensim est vraiment génial :)

36
Prashant Puri