#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. Вы, ребята, фантастические. Спасибо за логику и руководство. Все еще учусь создавать чистые коды. Не могу достаточно поблагодарить. Безбожный