私のmacosは私のtrainデータセットファイルディレクトリの下に.DS_Storeを生成し、load_filesはそれをロードして次のような例外を発生させます
UnicodeDecodeError:'utf8'コーデックは位置1116のバイト0xffをデコードできません
.DS_Storeファイルを削除する以外にフィルタリングする方法を知りたいですか?
私のmacosは私のtrainデータセットファイルディレクトリの下に.DS_Storeを生成し、load_filesはそれをロードして次のような例外を発生させます
UnicodeDecodeError:'utf8'コーデックは位置1116のバイト0xffをデコードできません
.DS_Storeファイルを削除する以外にフィルタリングする方法を知りたいですか?
ドキュメントを見ると、直接フィルタリングする方法はないようですload_files
(つまり、カテゴリをホワイトリストに登録することはできますが、カテゴリ内のファイルをホワイトリストに登録したり、どちらのレベルでもブラックリストに登録したりすることはできません)。
scikit-learnプロジェクトに機能リクエストを提出することを検討することをお勧めします。または、隠しファイル(プラットフォームに合わせて適切に定義されていますが、名前がで始まるファイルを含める必要があるOS Xおよびその他のPOSIXシステム.
)が読み込まれるのはバグと見なし、バグレポートを提出することもできます。
一方、load_content
設定できるフラグがあります。
load_content:ブール値、オプション(デフォルト= True)
さまざまなファイルのコンテンツをロードするかどうか。trueの場合、テキスト情報を含む'data'属性が返されるデータ構造に存在します。そうでない場合、filenames属性はファイルへのパスを示します。
を渡すFalse
と、ファイル名が検索されます。ファイル名は、必要に応じてフィルタリングして(たとえば、filenames = (filename for filename in ret.filenames if not filename.startswith('.'))
)、手動でロードできます。
これは、特定のツールで利用できる最良のソリューションのようです。
一方、load_files
実際にどれほど単純であるかを考えると(特に、またはなどの追加機能を使用しない場合categories
)shuffle
、単に使用せずに、os.walk
または単にを使用する方が簡単な場合がありos.listdir
ます。この場合、ファイルが任意の深さではなく、正確に2レベルの深さであるとすると、後者の方がおそらく単純です。
def getfilenames(category):
return [filename for filename in os.listdir(category)
if not filename.endswith('.')]
categoryfiles = [getcategory(os.path.join(rootpath, category)
for category in os.listdir(rootpath)]
無視するファイルのリストを受け入れる追加のパラメーター「ignore_files」を受け入れるように、sklearn load_filesを変更しました。sklearn の代わりに、この load_files の定義を使用できます。無視する必要があるファイルをフィルタリングしているだけなので、load_files と同じ結果が返されます。
利用方法 :
load_files(dir_path,ignore_files=".DS_Store")
要旨のソース
ソースを一目見ただけで、ファイルload_files
を削除するしか選択肢がないことがわかります。.DS_Store
documents = [join(folder_path, d)
for d in sorted(listdir(folder_path))]
.DS_Store
(汚染について真剣に考えたい場合は、深刻なカーネル拡張機能があります:https://github.com/binaryage/asepsis)。