Как справиться с назначением словаря python?

#python #python-3.x #dictionary

#python #python-3.x #словарь

Вопрос:

В настоящее время я пытаюсь решить эту проблему. Нужна помощь. Чего я пытаюсь достичь, так это ответа: ниже: (ожидаемый ответ)

 {'and': 1.91629073, 'document': 1.22314355, 'first': 1.51082562, 'is': 1., 'one': 1.91629073, 'second': 1.91629073, 'the': 1., 'third': 1.91629073, 'this,: 1.}        ]
  

Но то, что я на самом деле получаю, это:

 {'and': 2.791759469228055, 'document': 3.0794415416798357, 'first': 2.9459101490553135, 'is': 3.1972245773362196, 'one': 2.791759469228055, 'second': 2.791759469228055, 'the': 3.1972245773362196, 'third': 2.791759469228055, 'this': 3.1972245773362196}
  

Основной момент рассмотрения — это код: код и формула верны, но по какой-то причине его использование
в нескольких дополнительных числовых значениях в in len (corpus)

 vocab1[word2] = 1 (math.log(1 len(corpus)/1 count))
  

Фактический код начинается отсюда:

 corpus = [
 'this is the first document',
 'this document is the second document',
 'and this is the third one',
 'is this the first document',]

import math
unique_words = set() # at first we will initialize an empty set
lenofcorpus= len(corpus)
# print(lenofcorpus)
vocab1 = dict()
# vocab = dict()
# check if its list type or not
if isinstance(corpus, (list,)):
    for row in corpus: # for each review in the dataset
        for word in row.split(" "): # for each word in the review. #split method converts a string into list of words
            if len(word) < 2:
                continue
            unique_words.add(word)
    unique_words = sorted(list(unique_words))
    # print(unique_words)
    for idx, word2 in enumerate(unique_words) :
      count = 0
      for sentence in corpus :
        if word2 in sentence :
          count =1
      # print(word2, count)
          vocab1[word2] = count
          # print(lenofcorpus)
          vocab1[word2] = 1 (math.log(1 len(corpus)/1 count))#its taking log of 12/2 instead it should take 5/2, its taking 7 extra or six
    print(vocab1)
  

Я хочу знать, как добиться желаемого ответа. Во-вторых, каким был мыслительный процесс, чтобы прийти к этому ответу, и что я делаю неправильно. Было бы действительно полезно, если бы кто-нибудь дал объяснение. Я знаю, что я также делаю что-то не так с функцией зацикливания словаря, а также с назначением.
К вашему СВЕДЕНИЮ: len (corpus) = 4 # это длина всего корпуса, в нем 4 предложения.

Комментарии:

1. len (corpus) равен 4, я не знаю, откуда вы берете здесь какое-то «дополнительное числовое значение»

2. vocab1 [word2] = 1 (math.log(1 len (corpus) / 1 count)) Именно здесь происходит сбой кода. Желаемый ответ должен быть чем-то другим, но по какой-то причине ответ, который я получаю, является чем-то другим.

3. Может быть, вы имели в виду 1 (math.log(1 len(corpus) /(1 count))) вместо этого?

4. Как отлаживать небольшие программы

5. с таким же успехом можно сократить ваши уникальные слова: unique_words = sorted(set( w for s in corpus for w in s.split() if len(w)>1))

Ответ №1:

Вам не хватает круглых скобок. Результаты, которые вы описываете, соответствуют этому:

 vocab1[word2] = 1 (math.log((1 len(corpus))/(1 count)))
  

или прописано:

 numerator = (1 len(corpus))
denominator = (1 count)
result = 1 math.log(numerator/denominator)
  

То, что вы изначально написали, эквивалентно

 vocab1[word2] = 1 math.log(1 (len(corpus)/1) count)
  

довольно распространенная ошибка — писать, x/y z когда вы имели в виду x/(y z) , или x y/z когда вы имели в виду (x y)/z , вам удается делать и то, и другое одновременно.

Комментарии:

1. Вы, ребята, фантастические. Спасибо за логику и руководство. Все еще учусь создавать чистые коды. Не могу достаточно поблагодарить. Безбожный