【发布时间】:2017-03-31 07:08:46
【问题描述】:
因此,我相信尽管这是许多类似问题的常见问题(尤其是在 stackoverflow 上),但此问题背后的主要原因在每种情况下各不相同
在我的例子中,我有一个名为 readCorpus(在下面查找代码)的方法,它读取 21 个文件的列表,从每个文件中提取文档然后生成它们
yield 操作发生在读取每个文件的最后
我有另一个名为uploadCorpus 的方法(在下面查找代码)。此方法的主要目的是上传该语料库。
显然使用yield的主要原因是语料库可能非常大,我只需要阅读一次。
运行uploadCorpus 方法后,我收到以下错误
TypeError: coercing to Unicode: need string or buffer, list found
错误出现在self.readCorpus()]) 行。
阅读了类似的问题,我了解到当列表放错位置时会发生这种情况。我尝试将此处的问题行更新为docs for docs in self.readCorpus()]),但我以同样的问题结束
我的代码(上传语料库)
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 我仍然遇到同样的错误
标签: python python-2.7 typeerror iterable gensim