[英]How to input a series/list consisting of different tokens in a Gensim Dictionary?
我有一个 pandas 数据框,其中有一列包含对话数据。 我通过以下方式对其进行了预处理:
def preprocessing(text):
return [word for word in simple_preprocess(str(text), min_len = 2, deacc = True) if word not in stop_words]
dataset['preprocessed'] = dataset.apply(lambda row: preprocessing(row['msgText']), axis = 1)
为了使它成为一维,我使用了(两者):
processed_docs = data['preprocessed']
也:
processed_docs = data['preprocessed'].tolist()
现在看起来如下:
>>> processed_docs[:2]
0 ['klinkt', 'alsof', 'zwaar', 'dingen', 'spelen...
1 ['waar', 'liefst', 'meedenk', 'betekenen', 'pe...
对于这两种情况,我都使用了:
dictionary = gensim.corpora.Dictionary(processed_docs)
但是,在这两种情况下我都得到了错误:
TypeError: doc2bow expects an array of unicode tokens on input, not a single string
我怎样才能修改我的数据,这样我就不会得到这个 TypeError?
鉴于之前已经问过类似的问题,我考虑过:
Gensim: TypeError: doc2bow 期望输入的是一个 unicode 标记数组,而不是单个字符串
根据第一个答案,我尝试了以下解决方案:
dictionary = gensim.corpora.Dictionary([processed_docs.split()])
并得到错误(/ s):
AttributeError: 'Series'('List') object has no attribute 'split'
在第二个答案中,有人说输入需要是令牌,这对我来说已经成立了。
此外,基于( TypeError: doc2bow 在输入时需要一个 unicode 标记数组,而不是使用 gensim.corpora.Dictionary() 时的单个字符串),我使用了上面描述的.tolist()
方法,这也不起作用.
问题是很久以前发布的,但对于仍然想知道的人。 Pandas 将列表存储为字符串,因此出现 TypeError,将此字符串解释为列表的一种方法是使用:
from ast import literal_eval
接着:
dictionary = gensim.corpora.Dictionary()
for doc in processed_docs:
dictionary.add_documents([literal_eval(doc)])
我认为你需要:
dictionary = gensim.corpora.Dictionary([processed_docs[:]])
遍历集合。 您可以编写 [2:] 从 2 开始并迭代到结尾,或者 [:7] 从 0 开始然后转到 7 或 [2:7]。 您也可以尝试 [:len(processed_docs)]
我希望这有帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.