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

после 2 предыдущих вопросов по-прежнему не удалось решить проблему. вопрос 1 вопрос 2

У меня есть сценарий python, который очищает текст, прежде чем он перейдет к части анализа текста.

, поэтому у меня есть некоторые функции, которые очищают текст и создают POS-теги для разделения текста и его токенизации. Мне нужно вернуть слово + теги + частоту существующих.

проблема в том, что функция принимает список кортежей и затем завершает работу системы cra sh и отобразите следующую ошибку:

Файл "F: \ AIenv \ textAnalysis \ setup.py", строка 221, в файле tag_and_save file.write ("{0} / {1} {2} \ n ".format (word, tag, freq_tagged_data [word]))

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)
    print("tagged_data\n\n\n",tagged_data)## **here its a list of tuple [('','')]**

    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("{0} /{1} {2} \n".format(word,tag,freq_tagged_data[word]))## the error is here 
    file.close()

ожидаемый результат: ( "***** / POS tag") номер частоты.

1 Ответ

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

изменить

freq_dist = [(word, freq) for word ,freq in freqs.items()]

на

for word, freq in freqs.items():
    freq_dist[word] = freq

Вероятно, это решит проблему. Когда вы меняете dict на список в этой строке.

попробуйте это в tag_and_save:

for word,tag in tagged_data:
    if (word and word != "") and (tag and tag != ""):
        file.write("{0} /{1} {2} \n".format(word,tag,freq_tagged_data[word]))
...