如何在Google Colab上运行斯坦福大学Corenlp服务器?

时间:2019-05-06 07:59:13

标签: java stanford-nlp google-colaboratory

我想使用stanford corenlp来获取句子的依赖解析器。为了在python中使用stanford corenlp,我们需要执行以下步骤:

  1. 安装Java
  2. 下载stanford-corenlp-full-2018-10-05并将其解压缩。
  3. 使用“ cd”命令将目录更改为stanford-corenlp-full-2018-10-05文件夹。
  4. 在当前目录中运行以下命令:
      

    “ java -mx4g -cp” *“ edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 75000”。

之后,stanford-corenlp服务器将在'http://localhost:9000'上运行。 最后,我们可以像这样在python脚本中调用CoreNLPDependencyParser():

public class ShapeMover : MonoBehaviour, MyInput.IPlayerActions
{
    private MyInput _inputs;

    public void Awake()
    {
        _inputs = new MyInput();
        _inputs.Player.SetCallbacks(this);
    }

    public void OnEnable()
    {
        _inputs.Player.Enable();
    }

    public void OnDisable()
    {
        _inputs.Player.Disable();
    }

    public void OnMovement(InputAction.CallbackContext context)
    {
        Vector2 delta = context.ReadValue<Vector2>();
        transform.position += new Vector3(delta.x, 0, delta.y);
    }

    public void OnDrop(InputAction.CallbackContext context)
    {
        //TODO
    }

    // ...
}

现在,我想在google colab上运行stanford-corenlp服务器。我将stanford-corenlp-full-2018-10-05文件夹升级为Google驱动器并将Google驱动器安装在Google Colab上。然后我用以下功能安装了Java:

dependency_parser = CoreNLPDependencyParser(url='http://localhost:9000')

现在,我不知道如何运行上述java命令并获取本地主机地址。

有什么办法吗?

1 个答案:

答案 0 :(得分:0)

要从远程计算机连接到运行在Google Colab上的服务器,您需要使用ngrok

假设您的服务器正在现有的笔记本上运行,请创建一个新的笔记本并运行以下代码(我从here找到了):

import os
import subprocess
import json
import time
import requests


def _get_ngrok_tunnel():
    while True:
        try:
            tunnels_json = requests.get("http://localhost:4040/api/tunnels").content
            public_url = json.loads(tunnels_json)['tunnels'][0]['public_url']
            return public_url
        except Exception:
            print("Can't get public url, retrying...")
            time.sleep(2)


def _warmup_ngrok_tunnel(public_url):
    while requests.get(public_url).status_code >= 500:
        print("Tunnel is not ready, retrying...")
        time.sleep(2)


def expose_port_on_colab(port):
    os.system("apt-get install net-tools")
    # check that port is open
    while not (":{} ".format(port) in str(subprocess.check_output("netstat -vatn", shell=True))):
        print("Port {} is closed, retrying...".format(port))
        time.sleep(2)

    # run ngrok
    os.system("wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip")
    os.system("unzip ngrok-stable-linux-amd64.zip")
    os.system("./ngrok http {0} &".format(port))
    public_url = _get_ngrok_tunnel()
    _warmup_ngrok_tunnel(public_url)

    print("Open {0} to access your {1} port".format(public_url, port))

然后使用服务器正在侦听的端口调用expose_port_on_colab函数,该函数将为您提供一个可用于连接到服务器的URL

enter image description here