读取 Google 云应用程序中的 wordnet 文件夹

Reading wordnet folder in Google Cloud Application

我在 GAE 中有一个 Scala Web 应用程序 运行。我需要使用 Java 库 -JWI- 这需要我将 Wordnet 的根文件夹传递到 edu.mit.jwi.Dictionary 的构造函数中。

我考虑过将所有 Wordnet 内容都放入 Google 云存储中,但它根本没有文件夹的概念。所以,我的问题是:有什么方法可以用 Google Cloud Storage 做我想做的事,还是我应该使用其他任何东西?

您可以使用 Google 云存储 (GCS),即使 gsutil 处理 different way 中的子目录也是如此,因为它的行为与普通文件夹相同并使用相同的表示法。

我不确定你的应用程序是如何工作的,但如果我猜对了:

  • 将 JWI 库加载到您的云端 Shell。
  • 在 App Engine 灵活的 Scala 应用程序中导入库。查找有关如何使用 Scala 调用 Java class 的示例 here
  • 部署应用程序。按照前面的步骤,部署的图像将包含您需要的 JWI 库。
  • 将 Wordnet 语义词典加载到存储桶中并传递 Wordnet 的根文件夹,在本例中为 GCS 文件夹,使用 Google 云存储 API 的 Java client library。 “词典”必须在您使用时下载(使用获取函数)并存储在本地。

Find here the Java client library documentation 用于云存储。您可能需要比下面我为您编写的函数更多的函数来创建存储桶、上传文件和下载文件。

package com.example.storage;

// Imports the Google Cloud client library
import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Acl.Role;
import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.BucketInfo;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

public class QuickstartSample {
  public static void main(String... args) throws Exception {
    // Instantiates a client
    Storage storage = StorageOptions.getDefaultInstance().getService();

    // The name for the new bucket
    String bucketName = args[0];  // "my-new-bucket";

    // Creates the new bucket
    Bucket bucket = storage.create(BucketInfo.of(bucketName));

    System.out.printf("Bucket %s created.%n", bucket.getName());


    // [START uploadFile]

    // Object name
    String fileName="filename.ext";

    // Create file inside the bucket
    BlobInfo blobInfo =
        storage.create(
            BlobInfo
                .newBuilder(bucketName, fileName)
                // Modify access list to allow all users with link to read file
                .setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
                .build()
                // other options required
                );
    // return the public download link
    blobInfo.getMediaLink();

    // [END uploadFile]


    // Copy file from a bucket
    String blobName = "filename.ext";
    BlobId blobId = BlobId.of(bucketName, blobName);
    Blob blob = storage.get(blobId);
  }

最后,找到here如何编译代码和运行它:

mvn clean package -DskipTests

mvn exec:java -Dexec.mainClass=com.example.storage.QuickstartSample -Dexec.args="bucketName"

当您说“Google 云 Java 库中没有 API 用于文件夹操作时,您是对的”。截至今天,java 客户端库没有文件夹操作。你可以查一下图书馆here