Оператор If для проверки нахождения элемента в счетчике (Python) - PullRequest
0 голосов
/ 01 марта 2020

Я пишу программу, в которой у меня есть счетчик (collections.counter) с именем vocabulary, который является 10000 наиболее часто встречающимся счетчиком с именем wordFrequency, созданным из подсчета экземпляров слов, прочитанных из текстового файла. Я застрял при попытке сделать оператор if, который проверяет, найден ли элемент в этом счетчике. То, что у меня есть:

vocabulary = wordFrequency.most_common(10000)

[...]

for line in trainReader2:
    if len(line) == 10 and line[5] != "_":
        if wordPosition < matrixWidth:
            word = line[1]
            if word in vocabulary:
                sentenceRow[wordPosition] = word
            else:
                sentenceRow[wordPosition] = "[unknown]"
            wordPosition += 1
    elif wordPosition != 0:
        trainingMatrix.append(sentenceRow)
        print("sentence row:", sentenceRow)
        wordPosition = 0
        sentenceRow = ["[padding]"] * matrixWidth

Я точно думал, что if word in vocabulary: сработает, но условие никогда не выполняется, и строки предложений всегда полностью состоят из [unknown] и [padding]. Что если заявление я должен использовать для этой ситуации?

1 Ответ

0 голосов
/ 01 марта 2020

Проблема в том, что wordFrequency.most_common(10000) возвращает список кортежей, а не словарь. Вам нужно сделать его словарём или набором, чтобы найти в нем слова.

vocabulary  = dict(wordFrequency.most_common(10000))

or 

vocabulary  = set(w for w,_ in wordFrequency.most_common(10000))

Вы также можете использовать последнее значение в most_common в качестве порога и вместо этого сравнить значение частоты слова с ним. создания списка вторых слов (учитывая, что последнее из наиболее распространенных слов может иметь ту же частоту, что и другие слова, не включенные в список)

minFreq =  wordFrequency.most_common(10000)[-1][1]

...  

if wordFrequency.get(word,0) >= minFreq: 
...