Cómo extraer frases de corpus usando gensim

Para preprocesar el corpus estaba planeando extrantar frases comunes del corpus, para esto intenté usar el modelo de Frases en gensim, probé el código de abajo pero no me está dando el resultado deseado.

Mi código

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]) 

Salida

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

Pero debería venir como

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

Pero cuando intenté imprimir el vocabulario de los datos del tren, puedo ver el bigtwig, pero no funciona con los datos de prueba, ¿en qué me estoy equivocando?

 print bigram.vocab defaultdict(, {'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}) 

Obtuve la solución para el problema, había dos parámetros que no me ocupé de eso que deberían pasarse al modelo de Frases () , esos son

  1. min_count ignora todas las palabras y bigtwigs con un recuento total menor que este. Por defecto su valor es 5

  2. umbral representa un umbral para formar las frases (más alto significa menos frases). Se acepta una frase de las palabras a y b si (cnt (a, b) – min_count) * N / (cnt (a) * cnt (b))> umbral, donde N es el tamaño del vocabulario total. Por defecto su valor es 10.0

Con mis datos de trenes anteriores con dos declaraciones, el valor de umbral era 0 , así que cambio los conjuntos de datos de trenes y añado esos dos parámetros.

Mi nuevo código

 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]) 

Salida

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

Gensim es realmente impresionante 🙂