所以我认为尽管这是与许多类似的问题(特别是在计算器)的共同问题,这背后的问题的主要原因在每种情况下不同蟒蛇gensim类型错误:强迫为Unicode:需要字符串或缓冲区,列表中找到
在我来说,我有一个名为方法readCorpus
(以下查找代码),它读取的21个文件的列表,每个文件提取文档,然后得到他们
在读取每个文件
结束时发生的屈服操作我有另一种方法uploadCorpus
(查找代码低于)。这种方法的主要目的是上传该语料库。
很显然,使用yield的主要原因是语料库可能非常大,我只需要阅读一次。
一旦我运行的方法uploadCorpus
我接收低于
TypeError: coercing to Unicode: need string or buffer, list found
的误差修改错误发生在线路self.readCorpus()])
。
阅读中,我才明白,当一个列表放错了地方发生类似的问题。我想在这里uplate问题的行docs for docs in self.readCorpus()])
但我同样的问题
我的代码(uploadCorpus)结束
def uploadCorpus(self):
#convert docs to corpus
print "uploading"
utils.upload_chunked(
self.service,
[{'id': 'doc_%i' % num, 'tokens': utils.simple_preprocess(doc)}
for num, doc in enumerate([
self.readCorpus()])
],
chunksize=1000) # send 1k docs at a time
我的代码readCorpus()
def readCorpus(self):
path = '../data/reuters'
doc=''
docs = []
docStart=False
fileCount=0
print 'Reading Corpus'
for name in glob.glob(os.path.join(path, '*.sgm')):
print 'Reading File| ' + name
docCount=0
for line in open(name):
if(len(re.findall(r'<BODY>', line)) > 0):
docStart = True
pattern = re.search(r'<BODY>.*', line)
doc+= pattern.group()[6:]
if(len(re.findall(r'</BODY>\w*', line)) > 0):
docStart = False
docs.append(doc)
doc=''
docCount+=1
continue
#break
if(docStart):
doc += line
fileCount+=1
print 'docuemnt[%d][%d]'%(fileCount,docCount)
yield docs
docs = []
尝试'包裹在围绕上传您的列表json.dumps'分块功能。这会将您的列表转换为字符串并使其兼容上传。 – kpie
@kpie我仍然有同样的错误 –