NLTK 资源的 Pyodide 文件系统:丢失文件

2024-03-11

我正在尝试使用NLTK https://www.nltk.org/在浏览器中,感谢pyodide https://pyodide.org/en/stable/。 Pyodide 启动良好,成功加载 NLTK,打印其版本。

尽管如此,虽然包下载看起来不错,但在调用时nltk.sent_tokenize(str),NLTK 引发错误,无法找到包“punkt”。

我想说下载的资源在某个地方丢失了,但我不太明白 Pyodide / WebAssembly 如何管理文件。有什么见解吗?

简单版本:

import nltk
nltk.download(pkg)
for sent in nltk.sent_tokenize("Test string"):
    print(sent)

包含更多详细信息的版本,指定下载目录和服务器 URL。

import nltk
pkg = "punkt"
downloader = nltk.downloader.Downloader(server_index_url="https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml") 
downloader.download(pkg, download_dir='/nltk_data')
downloader.status(pkg)
for sent in nltk.sent_tokenize("Test string"):
    print(sent)

完整示例代码:

<!DOCTYPE html>
<html>
  <body>
    <script type="text/javascript" src="https://cdn.jsdelivr.net/pyodide/v0.18.0/full/pyodide.js"></script>
    <script type="text/javascript">
      // init Pyodide
      async function pyodide_loader() {
        let pyodide_premise = loadPyodide({
          indexURL: "https://cdn.jsdelivr.net/pyodide/v0.18.0/full/",
        });
        let pyodide = await pyodide_premise;
        await pyodide.loadPackage("micropip");
        await pyodide.loadPackage("nltk");
        return pyodide_premise;
      }
      let pyodideReadyPromise = pyodide_loader();

      
      // run Python code and load NLTK
      async function load_packages() {
        let pyodide = await pyodideReadyPromise;
        let output = pyodide.runPython(`
print(f"*** import nltk")
import nltk
print(f"*** NLTK version {nltk.__version__=} imported, downloading resources now")

pkg = "punkt"
nltk.download(pkg)

str = "Just for testing"
for sent in nltk.sent_tokenize(str):
    print(sent)
      `);
      }
      load_packages()
    </script>
  </body>
</html>

简短的回答是,目前在 Pyodide 中无法使用 Python 下载文件,因为http.client, requests等需要浏览器虚拟机不支持的 POSIX 套接字。

令人好奇的是nltk.download但没有错误——它应该有。

解决方法是手动下载所需的资源,例如使用 JavaScript获取API https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API如图所示这条评论 https://github.com/pyodide/pyodide/issues/400#issuecomment-882101102;

from js import fetch

response = await fetch("<url>")
js_buffer = await response.arrayBuffer()
py_buffer = js_buffer.to_py()  # this is a memoryview
stream = py_buffer.tobytes()  # now we have a bytes object

# that we can finally write under the appropriate path
with open("<file_path>", "wb") as fh:
    fh.write(stream)

我不太了解 Pyodide / WebAssembly 如何管理文件。

默认情况下它是虚拟文件系统(MEMFS https://emscripten.org/docs/api_reference/Filesystem-API.html#memfs)在每次页面加载时都会重置。您可以使用标准 python 工具访问它(open、“操作系统”等)。如果有需要你也可以挂载持久文件系统 https://github.com/pyodide/pyodide/pull/1596.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NLTK 资源的 Pyodide 文件系统:丢失文件 的相关文章

  • 将 NPM 包与 Rust 和 Webassemble 结合使用

    有没有办法在 Rust 代码中使用 npm 包和 webassemble 现在使用此模板中已存在的 webpack wasm tool wasm pack plugin 和 wasm bindgen 箱 https github com r
  • NLTK 下载 SSL:证书验证失败

    尝试为 nltk 安装 Punkt 时出现以下错误 nltk download punkt nltk data Error loading Punkt
  • Python 中的 Flesch-Kincaid 可读性测试

    我需要帮助解决我遇到的这个问题 我需要编写一个从文本返回 FRES Flesch 阅读轻松测试 的函数 给出公式 换句话说 我的任务就是把这个公式变成一个Python函数 这是来自的代码我之前的问题 https stackoverflow
  • 我可以简单地“读取”正在使用的文件吗?

    我正在尝试使用 StreamReader 来读取文件 但它总是被另一个进程使用 所以我收到此错误 该进程无法访问该文件 arfjwknasgmed17 C FLAG CONDITION CP ARFJN FLAG XLS 因为 它正在被另一
  • “LazyCorpusLoader”对象不可迭代

    以下示例创建一个字谜词典 然而 它抛出一个TypeError LazyCorpusLoader object is not an iterator import nltk from nltk corpus import words anag
  • NLTK CoreNLPDependencyParser:无法建立连接

    我正在尝试通过 NLTK 使用斯坦福解析器 按照示例here http www nltk org api nltk parse html nltk parse corenlp CoreNLPDependencyParser 20tutori
  • 如何查找列表中句子列表中每个单词的引理和频率计数?

    我想使用 WordNet Lemmatizer 找出引理 并且还需要计算每个词频 我收到以下错误 轨迹如下 类型错误 不可散列的类型 列表 注 语料 库可在nltk包装本身 到目前为止我已经尝试过如下 import nltk re impo
  • posix_fadvise(WILLNEED) 会使 IO 变慢吗?

    在运行 Linux 内核版本 2 6 18 194 26 1 el5 的 CentOS 5 5 机器上 我注意到 posix fadvise WILLNEED 使读取 60K 文件比常规 IO 慢了近 200 看起来实际的 fadvise
  • 区分大小写的文件系统上的 File.equals

    我有一个字符串形式的文件路径 在 Java 中 我需要确定文件系统上是否存在该文件 并且我们的代码需要跨平台 因为它在 Windows Linux 和 OS X 上运行 问题是文件路径和文件本身的大小写可能不匹配 即使它们确实代表相同的文件
  • 检查lua中是否存在目录?

    如何检查 lua 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • 文件系统和 Memcached 哪个缓存更快/更好?

    我认为我还不清楚 从文件或从 memcached 读取内容更快吗 为什么 Memcached 速度更快 但内存有限 HDD 很大 但 I O 速度比内存慢 你应该把memcached 最热门的东西 and 所有其他人 can go 缓存文件
  • 找不到全局类型 CallableFunction

    这是一个基本汇编脚本项目 但我在 tsconfig json 文件中遇到此错误消息 extends assemblyscript std assembly json include ts 这是我的 package json devDepen
  • 如何在 nltk 中使用 hunpos 标记文本文件?

    有人可以帮我解决在 nltk 中标记语料库的 hunpos 语法吗 我要导入什么hunpos HunPosTagger module http nltk googlecode com svn trunk doc api nltk tag h
  • 用于估计(一元)困惑度的 NLTK 包

    我正在尝试计算我所拥有的数据的困惑度 我正在使用的代码是 import sys sys path append usr local anaconda lib python2 7 site packages nltk from nltk co
  • 快速NLTK解析成语法树

    我正在尝试将数百个句子解析为语法树 我需要快速完成 问题是如果我使用 NLTK 那么我需要定义一个语法 而我不知道我只知道它会是英语 我尝试使用this https github com emilmont pyStatParser统计解析器
  • 我们如何获取不同文件系统使用的文件分隔符?

    大家下午好 据我了解 Android 有 至少 2 个文件系统 一个用于 内部 存储 例如 data和 system 另一个用于 外部 存储 例如 mnt sdcard 这意味着当我们将文件保存到 内部 存储时 Context getFil
  • 如何下载 NLTK 数据?

    更新的答案 NLTK 适用于 2 7 我有3 2 我卸载了3 2并安装了2 7 现在可以了 我已经安装了 NLTK 并尝试下载 NLTK 数据 我所做的是按照该网站上的说明进行操作 http www nltk org data html h
  • 使用正则表达式标记化进行 NLP 词干提取和词形还原

    定义一个函数 名为performStemAndLemma 它需要一个参数 第一个参数 textcontent 是一个字符串 编辑器中给出了函数定义代码存根 执行以下指定任务 1 对给出的所有单词进行分词textcontent 该单词应包含字
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 如果 DirectoryInfo.GetFiles().Length 超过 Int32.MaxValue 怎么办?

    由另一个question https stackoverflow com questions 3766540 error on maximum number of files 3767265 3767265关于文件夹中的最大文件数 我注意到

随机推荐