所以我認爲儘管這是與許多類似的問題(特別是在計算器)的共同問題,這背後的問題的主要原因在每種情況下不同蟒蛇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我仍然有同樣的錯誤 –