【问题标题】:How to count the frequency of words existing in a text using nltk如何使用 nltk 计算文本中存在的单词的频率
【发布时间】:2020-03-12 06:12:05
【问题描述】:

我有一个 Python 脚本,它可以读取文本并应用预处理函数来进行分析。
问题是我想统计单词出现的频率但是系统崩溃并显示如下错误。

文件“F:\AIenv\textAnalysis\setup.py”,第 208 行,在 tag_and_save 中 file.write(word+"/"+tag+" (frequency="+str(freq_tagged_data[word])+")\n") TypeError: tuple 索引必须是整数或切片,而不是 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

但现在它显示以下错误:

文件“F:\AIenv\textAnalysis\setup.py”,第 217 行,在 tag_and_save file.write(word+"/"+tag+" (frequency="+str(freq_tagged_data[word])+")\n")

类型错误:列表

索引必须是整数或切片,而不是 str

如何解决这个错误,我该怎么办?

【问题讨论】:

    标签: python nlp nltk word-frequency


    【解决方案1】:

    也许这会有所帮助。

    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)
    

    这个sn-p统计词频。

    编辑:代码现在可以工作了。

    【讨论】:

    • 我认为问题可能出在 get_freq 函数的返回值的数据类型上。您只返回一个“单词”和“频率”作为回报。您需要创建一个空列表并将“单词”和“频率”附加到 for 循环中,然后返回整个列表。
    • 好的,它打印 blash_list,所以我尝试在我的函数中使用此代码,现在它显示错误。我将编辑我的问题并添加更新
    • 啊。在这里我看到了。在 tag_and_save 函数中,'word' 是一个字符串类型,你应该在 "freq_tagged_data[word]" 中传递一个整数。这是一个您可以查看的参考站点 - [link] stechies.com/… [link]
    • 我编辑了答案,以便代码现在可以工作。
    • 问题作者需要使用dict而不是list
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    相关资源
    最近更新 更多