Как посчитать частоту слов, существующих в тексте, используя nltk - PullRequest
0 голосов
/ 12 марта 2020

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

Файл "F: \ AIenv \ textAnalysis \ setup.py", строка 208, в файле tag_and_save file.write (word + "/" + tag + "(частота =" + str (freq_tagged_data) [word]) + ") \ n") TypeError: индексы кортежа должны быть целыми или кусочками, а не str

Я пытаюсь подсчитать частоту и затем записать в text file.

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

def tag_and_save(tagger,text,path):
    clt = clean_text(text)
    tagged_data = tagger.tag(clt)

    freq_tagged_data = get_freq(tagged_data)
    file = open(path,"w",encoding = "UTF8")
    for word,tag in tagged_data:
        file.write(word+"/"+tag+" (frequency="+str(freq_tagged_data[word])+")\n")
    file.close()

Я ожидаю, что результат будет таким:

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


на основе ответ

я изменил функцию get_freq () на:

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

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

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

Ошибка типа: список

* 10 34 * индексы должны быть целыми числами или ломтиками, а не str

Как исправить эту ошибку и что мне делать?

1 Ответ

1 голос
/ 12 марта 2020

Может быть, это может помочь.

import nltk
text = "An an valley indeed so no wonder future nature vanity. Debating all she mistaken indulged believed provided declared. He many kept on draw lain song as same. Whether at dearest certain spirits is entered in to. Rich fine bred real use too many good. She compliment unaffected expression favourable any. Unknown chiefly showing to conduct no."
tokens = [t for t in text.split()]
freqs = nltk.FreqDist(tokens)
blah_list = [(k, v) for k, v in freqs.items()]
print(blah_list)

Этот фрагмент подсчитывает частоту слова.

Редактировать: Код теперь работает.

...