как исправить ошибку TypeError: списочные индексы должны быть целыми или кусочками, а не str в python - PullRequest
0 голосов
/ 13 марта 2020

на основании предыдущего вопроса я изменил свой код, но все еще не работает. нажмите здесь

У меня есть сценарий python, который читает текст и применяет функции предварительной обработки для выполнения анализа. Проблема в том, что я хочу посчитать частоту слов, но система cra sh и отображает приведенную ниже ошибку.

Файл "F: \ AIenv \ textAnalysis \ setup.py", строка 219 , в tag_and_save file.write (word + "/" + tag + "(частота =" + freq_tagged_data [word] + ") \ n")

TypeError: индексы списка должны быть целыми или кусочками, а не str

def get_freq(tagged):
    freq_dist = {}
    freqs = FreqDist(tagged)
    freq_dist = [(word, freq) for word ,freq in freqs.items()]
    # print(freq_dist)
    return freq_dist

def tag_and_save(tagger,text,path):
    clt = clean_text(text)
    tagged_data = tagger.tag(clt)
    tagged_data = sorted(tagged_data,key=operator.itemgetter(1))
    freq_tagged_data = get_freq(tagged_data)
    file = open(path,"w",encoding = "UTF8")
    for word,tag in tagged_data:
        file.write(word+"/"+tag+" (frequency="+ freq_tagged_data[word] +")\n")
    file.close()

, если я пытаюсь преобразовать слово в int ()

def tag_and_save(tagger,text,path):
    clt = clean_text(text)
    tagged_data = tagger.tag(clt)
    tagged_data = sorted(tagged_data,key=operator.itemgetter(1)) 
    freq_tagged_data = get_freq(tagged_data)
    file = open(path,"w",encoding = "UTF8")
    for word,tag in tagged_data:
        file.write(word+"/"+tag+" (frequency="+ freq_tagged_data[int(word)] +")\n")
    file.close()

, отображается следующее сообщение об ошибке:

Файл "F: \ AIenv \ textAnalysis \ setup.py ", строка 219, в файле tag_and_save file.write (word +" / "+ tag +" (частота = "+ freq_tagged_data [int (word)] +") \ n ") ValueError: недопустимый литерал для int ( ) с основанием 10: ''

ожидаемый результат должен быть таким:

('***** / DTNN') 3

1 Ответ

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

Проблема в вашей функции get_freq(). Он возвращает list не dict:

def get_freq(tagged):
    # freq_dist is dict
    freq_dist = {}
    freqs = FreqDist(tagged)
    # freq_dist is list now
    freq_dist = [(word, freq) for word ,freq in freqs.items()]
    return freq_dist

У вас есть несколько вариантов инициализации словаря:

dict понимание

def get_freq(tagged):
    freqs = FreqDist(tagged)
    return {word: freq for word ,freq in freqs.items()}

update() метод

Подробнее см. Документацию update () .

def get_freq(tagged):
    freq_dist = {}
    freqs = FreqDist(tagged)
    freq_dist.update([(word, freq) for word ,freq in freqs.items()])
    return freq_dist

dict конструктор

def get_freq(tagged):
    freqs = FreqDist(tagged)
    # freq_dist is list now
    return dict([(word, freq) for word ,freq in freqs.items()])
...