问题:代码报错了,原因似乎是某个“list”,是不是因为我不应该在 ngrams_in_sentence()函数后面,用for/if语句呢?
下面是源代码~
首先解释一下ngrams函数:这是一个用来输出三元搭配词组词频的函数,所谓“三元”,即三个三个词组合,譬如“我想去吃饭了”这句话,三元搭配就是:“我想去”、“想去吃”、“去吃饭”,以此类推。
计算词频就是,统计这个搭配出现了几次,如果 “我想吃” 这组搭配出现了5次,就会在它后面出现 5
以下代码处理的 词 一开始都在plk文件里面。
源代码:
def ngrams(dir_path):
ss = corpus_CCL(dir_path) #这是引用另一个写好了的 用来打开plk文件的函数
d={}
for s in ss:
gram = ngrams_in_sentences(s,3) #这是引用让词语形成 三元搭配 的函数
for col in gram: #下面是计算词频
if col in d:
d[col] += 1
else:
d[col] = 1
df = Series(d) 这是希望三元搭配词组和词频像表格那样 一列列展示出来,所以最后我会输出csv文件
return df
报错: 这个 unhashable type 我怀疑是 unfishable type(不可分解),为啥会报错呢
Traceback (most recent call last):
File "C:/Users/DELL/PycharmProjects/111/test/lesson10.py", line 46, in <module>
df = ngrams(r'D:\Users\DELL\Desktop\testing')
File "C:/Users/DELL/PycharmProjects/111/test/lesson10.py", line 39, in ngrams
if col in d:
TypeError: unhashable type: 'list'
这个错误是由于尝试将一个不可哈希的类型(list)用作字典的键。可以将col从列表转换为元组,因为元组是可哈希的。改成这样试试:
def ngrams(dir_path):
ss = corpus_CCL(dir_path)
d = {}
for s in ss:
gram = ngrams_in_sentences(s, 3) #这是引用让词语形成 三元搭配 的函数
for col in gram: #下面是计算词频
key = tuple(col)
if key in d:
d[key] += 1
else:
d[key] = 1
df = Series(d)
return df