2014-08-28 6 views
0

Я пытаюсь использовать word2vec в Python с помощью gensim. Хотя я использую try/except, чтобы проверить слова, которые не входят в модель Google, и я столкнулся с проблемой. Каждый раз, когда возникает исключение, я могу напечатать слово, но там модель останавливается и не загружает оставшиеся слова в списке.Try-Except проблема со списками в Python

После кода я отобразил содержимое списка словарей, и модель останавливается в слове путешественников, не преобразовывая остальную часть слов после слова путешественников. Я действительно застрял, и я мог бы помочь в этом. Есть идеи?

for x in range(0,len(data)): 
    titles.append(data[x]['title']) 
    paragraphs.append(data[x]['paragraphs']) 

model = gensim.models.Word2Vec.load('/tmp/models/google2') 
for y in range(95,96): 
    vocabulary.append(titles[y]) 
    vocabulary.append(paragraphs[y][0]) 
    vocabulary.append(paragraphs[y+1][0]) 
    print vocabulary 
    for entry in vocabulary: 
     try: 
      row = tokenizer.tokenize(entry) 
      row = [word for word in row if word not in stopwords.words('english')] 
      row = [model[item] for item in row] 
      row = [np.sum(item) for item in row] 
      last.append(row) 
     except KeyError,e: 
      print "There is a word that does not exist in the vocabulary: ", e 

Существует слово, которое не существует в словаре: u'travellers'

словарь [0]: глобальный бум путешествий Азии

словарь [1]: континентальные сдвиги делаются с точки зрения путешествий, туризма и расходования средств, поскольку больше азиатских, и особенно китайских, путешественники выезжают за границу.

словарный запас [2]: Это была самая захватывающая вещь, которая произошла с беднейшей страной Центральной Азии в недавней памяти.

Заранее спасибо.

ответ

0

Поскольку вы положили for y in range(95,96): цикл выполняется только один раз

+0

Это для целей тестирования мат. Цикл работает один раз и загружает 3 значения в список словарей. Нет необходимости запускать более одного раза, чтобы получить желаемый результат. Например, 2-й цикл работает 3 раза, так как в списке слов есть 3 значения. Даже если вы правы, и это вопрос, расчеты должны остановиться перед словом путешественников и не совсем там. – Swan87

0

Вы должны дать ему состояние. Пример:

for x in range(0,len(data)): 
    titles.append(data[x]['title']) 
    paragraphs.append(data[x]['paragraphs']) 

model = gensim.models.Word2Vec.load('/tmp/models/google2') 
for y in range(95,96): 
    vocabulary.append(titles[y]) 
    vocabulary.append(paragraphs[y][0]) 
    vocabulary.append(paragraphs[y+1][0]) 
    print vocabulary 
    for entry in vocabulary: 
     try: 
      row = tokenizer.tokenize(entry) 
      row = [word for word in row if word not in stopwords.words('english')] 
      # in your code, row will be overwritten several times, so I use new variables here 
      temp = [] 
      temp1 = [] 
      for item in row: 
       try: 
        model[item] 
       except KeyError, e: 
        continue 

       temp.append(model[item]) 
       temp1.append(np.sum(item)) 
       last.append(temp1) 
     except KeyError,e: 
      print "There is a word that does not exist in the vocabulary: ", e 

Надеюсь, он сработает.

+0

Это хороший способ сделать это да, но все же я получил: AttributeError: объект 'Word2Vec' не имеет атрибута 'has_key' – Swan87

+0

@ Swan87 OK. Проверьте мое обновление. –

+0

Существует ошибка, когда вы делаете temp1.append (np.sum (пункт)) в качестве пункта не numeric.I сделала: для элемента в строке: попытки: \t печати пункт \t Рез = np.sum (модель [пункт]) \t печать разрешение \t temp.append (разрешение) кроме KeyError, е: продолжают Мой последний вопрос, что мне нужно правильно приложить для того, чтобы иметь суммы массива каждое слова будет в массиве откуда они пришли. например, для предложения [Азия, глобальный, путешествия, бум], чтобы это выглядело как [-1.2136844, -1.4799396, -0.75583267, -1.0718837] – Swan87

Смежные вопросы