2016-11-16 3 views
0

は、だから私は信じていたが、この問題の背後にある主な理由は、それぞれの場合に異なるのpython gensimの例外TypeError:Unicodeに強制変換:必要文字列またはバッファ、リストはこれが(特にstackoverflowの上の)多くの類似の質問に共通の問題であるにもかかわらず

収量操作は、各ファイル

を読み込むの最後に発生し、それはそれらをもたらす

その後、各ファイルから21個のファイル、エキスのドキュメントのリストを読み込み、私は(以下検索コード)をreadCorpusという名前のメソッドを持っている私の場合

別の方法がです(以下のコードを見つける)。この方法の主な目的は、そのコーパスをアップロードすることです。

明らかに歩留りを使用する主な理由は、コーパスが非常に大きくなる可能性があることと、一度だけ読む必要があることです。

私はラインself.readCorpus()])

TypeError: coercing to Unicode: need string or buffer, list found

errosが発生したの下にエラーが表示さuploadCorpus私はメソッドを実行すると。私はリストを紛失されたときにそれが起こることを理解するようになった同様の問題を読む

は..私はdocs for docs in self.readCorpus()])にここで質問の行をuplateしようとしたが、私は同じ問題

私のコード(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 = [] 
+0

を以下のように変更する必要があります。これはあなたのリストを文字列に変換し、アップロードに互換性を持たせます。 – kpie

+0

@kpie私はまだ同じエラーがあります –

答えて

0

以下readCorpus機能はキーワードyield

self.readCorpus() 

を用いて発電をすることになった反復可能オブジェクトを..期待されるラインreadCorpus関数は、発電機が原因であると考えられる方法は動作しなかったがyieldキーワードの実装が不良です。

現在の実装では、1000回のループ反復ごとに項目の配列が生成されますが、正しい方法は項目ごとにyieldされます。

したがってreadCorpusは、アップロード中にあなたのリストの周りjson.dumps`機能をチャンク `ラップしてみ

def readCorpus(self): 
     path = '../data/reuters' 
     doc='' 
     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) 
        yield doc 
        doc='' 
        docCount+=1 
        continue 
        #break 
       if(docStart): 
        doc += line 

      fileCount+=1 
      print 'docuemnt[%d][%d]'%(fileCount,docCount) 
関連する問題