Чтение папки wordnet в облачном приложении Google

У меня есть веб-приложение Scala, работающее в GAE. Мне нужно использовать библиотеку Java - JWI- которая требует от меня передать корневую папку Wordnet в edu.mit.jwi.Dictionaryконструктор.

Я думал о том, чтобы поместить все материалы Wordnet в Google Cloud Storage, но в нем вообще нет концепции папки. Итак, мой вопрос: есть ли способ сделать то, что я хочу, с Google Cloud Storage или я должен использовать что-нибудь еще?

2 ответа

Решение

Вы были правы, когда заявили, что "в Java-библиотеке Google Cloud API нет API для работы с папками". На сегодняшний день нет манипуляций с папками для клиентской библиотеки java. Вы можете проверить библиотеку здесь

Вы можете использовать Google Cloud Storage (GCS), даже если gsutil обрабатывает подкаталоги по- другому, потому что он ведет себя как обычная папка и использует те же обозначения.

Я не уверен в том, как работает ваше приложение, но хорошо ли я догадываюсь:

  • Загрузите библиотеку JWI в облачную оболочку.
  • Импортируйте библиотеку в своем приложении Scala в App Engine Flexible. Здесь вы найдете пример того, как вызывать класс Java с помощью Scala.
  • Разверните приложение. Следуя предыдущим шагам, развернутый образ будет содержать нужную вам библиотеку JWI.
  • Загрузите семантический словарь Wordnet в корзину и передайте корневую папку Wordnet, в данном случае папку GCS, используя клиентскую библиотеку Java для API Google Cloud Storage. "Словарь" должен быть загружен (используя функцию get) и сохранен локально, пока вы его используете.

Найдите здесь документацию по клиентской библиотеке Java для облачного хранилища. Вам может понадобиться больше функций, чем те, которые я написал для вас ниже, чтобы создать корзину, загрузить файл и загрузить его.

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);
  }

Наконец, найдите здесь, как скомпилировать код и запустить его:

mvn clean package -DskipTests

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

Другие вопросы по тегам