如何修复列表索引必须是整数或片,而不是str

2024-03-28 12:14:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在前面的两个问题之后,仍然没有解决问题question 1question 2

我有一个python脚本,可以在分析文本部分之前清除文本

因此,我有一些函数来清理文本并制作POS标记,以便拆分文本并标记它。 我需要返回单词+标签+现有频率。

问题在于,函数获取元组列表,然后在系统崩溃结束时显示以下错误:

File "F:\AIenv\textAnalysis\setup.py", line 221, in tag_and_save file.write("{0} /{1} {2} \n".format(word,tag,freq_tagged_data[word]))

TypeError: list indices must be integers or slices, not 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标签”)频率编号


Tags: 函数textin标记pos文本datadist
1条回答
网友
1楼 · 发布于 2024-03-28 12:14:48

改变

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]))

相关问题 更多 >