fasttext无法加载训练txt文件

tah*_*sin 6 python windows utf-8 fasttext

我试图在Windows中使用fasttext python包训练一个fasttext分类器.我有一个类似于行的utf8文件

__label__type1 sample sentence 1
__label__type2 sample sentence 2
__label__type1 sample sentence 3 
Run Code Online (Sandbox Code Playgroud)

我跑的时候

fasttext.supervised('data.train.txt','model', label_prefix='__label__', dim=300, epoch=50, min_count=1, ws=3, minn=4, pretrained_vectors='wiki.simple.vec')

我收到以下错误

File "fasttext\fasttext.pyx", line 256, in fasttext.fasttext.supervised (fasttext/fasttext.cpp:7265)
  File "fasttext\fasttext.pyx", line 182, in fasttext.fasttext.train_wrapper (fasttext/fasttext.cpp:5279)
ValueError: fastText: cannot load data.train.txt
Run Code Online (Sandbox Code Playgroud)

当我检查目录中的文件类型时,我得到了

__pycache__:     directory
data.train.txt:  UTF-8 Unicode text, with very long lines, with CRLF line terminators
train.py:        Python script, ASCII text executable, with CRLF line terminators
wiki.simple.vec: UTF-8 Unicode text, with very long lines, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)

此外,当我尝试在MacOs中使用相同的训练文件训练相同的分类器时,它工作正常.我试图理解为什么无法读取该txt文件.

谢谢!

Jef*_*len 3

TL;DR:使用os 模块安全地构建路径,尤其是在 Python 2 中

该错误表明该文件无法加载。由于环境之间的唯一区别是操作系统,因此线索是您没有正确定位文件,因为每个操作系统处理路径的方式不同。我觉得这是大多数 python 程序员至少犯过一次的错误,因为这是意想不到的。

您可以对路径进行硬编码,但是如果您跨平台使用东西,那么您会遇到问题。就我而言,有时我在 Windows 中快速开发一些东西,然后在 *nix 平台上大规模部署。

我建议改为习惯使用 os 模块,因为它可以跨平台工作。在评论中说他们有一个“myfolder\nfolder\tfolder”路径;通过尝试为路径构建自己的字符串而不是使用 os 模块.. 在 Windows 上,即使文件夹不是以换行符 \n 和制表符 \t 开头,它仍然无法工作,因为 Windows 路径需要转义斜杠 (\)。使用 os,你不必知道这一点。

>>> import os
>>> os.getcwd()
'C:\\Python27'
>>> os.path.abspath(os.sep)
'C:\\'
>>> os.chdir(os.path.join(os.path.abspath(os.sep, "Users", "Jeff"))
>>> os.getcwd()
'C:\\Users\\Jeff'
Run Code Online (Sandbox Code Playgroud)

通常,您将使用项目根目录中的相对路径,而不是绝对路径。这些更容易,当前操作系统的根是有点棘手(你可以在这里找到答案)

(我正在提供我们从评论中得出的完整答案)

编辑:也许 python 3 有一些东西这个链接说比 os, pathlib更好。我从未使用过 python 3 所以我不能说。