我将 nltk 数据下载到 Flask 应用程序中的数据目录中。视图位于与数据目录同一级别的另一个目录中的蓝图中。在视图中,我尝试设置数据的路径,但不起作用。
nltk.data.path.append('../nltk_data/')
这不起作用。如果我使用整个路径,它确实有效。
nltk.data.path.append('/home/username/myapp/app/nltk_data/')
为什么第一个表单不起作用?我该如何正确引用数据的位置?
您遇到的无法按预期工作的问题与nltk.data.path.append('../nltk_data/')Python 在使用函数或类似操作时如何解析相对路径有关os.path。以下是解释和推荐的正确解析路径的方法。
os.path
当您使用相对路径(例如)时'../nltk_data/',它将相对于 Python 进程的当前工作目录 (CWD) 进行解析。但是,在 Flask 等 Web 应用程序中,CWD 可能会根据应用程序的执行方式而变化(例如,从不同的目录执行或使用不同的方法,例如flask run、Gunicorn 等)。
'../nltk_data/'
flask run
../nltk_data/
为了确保您的 Flask 应用程序能够始终如一地找到nltk_data目录(无论 CWD 或部署环境如何),您可以使用os.path模块根据当前文件的位置构造绝对路径。操作方法如下:
nltk_data
import os import nltk # Get the directory path of the current Python file current_file_dir = os.path.dirname(__file__) # Construct the absolute path to nltk_data directory nltk_data_dir = os.path.join(current_file_dir, '../nltk_data/') # Normalize the path to handle any '..' or '.' segments nltk_data_dir = os.path.normpath(nltk_data_dir) # Add the nltk_data directory to nltk's data path nltk.data.path.append(nltk_data_dir)
__file__
os.path.dirname(__file__)
os.path.join()
current_file_dir
os.path.normpath()
..
.
nltk.data.path
nltk_data_dir
nltk
通过采用这种方法,nltk_data无论部署环境或目录结构如何变化,您的 Flask 应用程序都应该可靠地找到并使用该目录。