用于 python 的斯坦福 nlp

新手上路,请多包涵

我想要做的就是找到任何给定字符串的情绪(正面/负面/中性)。在研究过程中,我遇到了 Stanford NLP。但遗憾的是它在 Java 中。关于如何使其适用于 python 的任何想法?

原文由 90abyss 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 509
2 个回答

使用 py-corenlp

下载 斯坦福 CoreNLP

此时(2020-05-25)的最新版本是4.0.0:

 wget https://nlp.stanford.edu/software/stanford-corenlp-4.0.0.zip https://nlp.stanford.edu/software/stanford-corenlp-4.0.0-models-english.jar

如果你没有 wget ,你可能有 curl

 curl https://nlp.stanford.edu/software/stanford-corenlp-4.0.0.zip -O https://nlp.stanford.edu/software/stanford-corenlp-4.0.0-models-english.jar -O

如果一切都失败了,请使用浏览器 ;-)

安装包

unzip stanford-corenlp-4.0.0.zip
mv stanford-corenlp-4.0.0-models-english.jar stanford-corenlp-4.0.0

启动 服务器

cd stanford-corenlp-4.0.0
java -mx5g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -timeout 10000

笔记:

  1. timeout 是以毫秒为单位的,我上面设置为10秒。如果将巨大的 blob 传递给服务器,则应该增加它。
  2. 还有 更多选项,您可以用 --help 列出它们。
  3. -mx5g 应该分配足够的 内存,但是 YMMV,如果你的盒子动力不足,你可能需要修改选项。

安装蟒蛇包

标准包

pip install pycorenlp

不适 用于 Python 3.9,所以你需要做

pip install git+https://github.com/sam-s/py-corenlp.git

(另请参阅 官方列表)。

用它

from pycorenlp import StanfordCoreNLP

nlp = StanfordCoreNLP('http://localhost:9000')
res = nlp.annotate("I love you. I hate him. You are nice. He is dumb",
                   properties={
                       'annotators': 'sentiment',
                       'outputFormat': 'json',
                       'timeout': 1000,
                   })
for s in res["sentences"]:
    print("%d: '%s': %s %s" % (
        s["index"],
        " ".join([t["word"] for t in s["tokens"]]),
        s["sentimentValue"], s["sentiment"]))

你会得到:

 0: 'I love you .': 3 Positive
1: 'I hate him .': 1 Negative
2: 'You are nice .': 3 Positive
3: 'He is dumb': 1 Negative

笔记

  1. 您将整个文本传递给服务器并将其拆分为句子。它还将句子拆分为标记。
  2. 情感归因于每个 _句子_,而不是 _整个文本_。跨句子的 均值 sentimentValue 可用于估计整个文本的情感。
  3. The average sentiment of a sentence is between Neutral (2) and Negative (1), the range is from VeryNegative (0) to VeryPositive (4) 这似乎相当罕见。
  4. 您可以通过在启动服务器的终端键入 Ctrl-C 或使用 shell 命令 kill $(lsof -ti tcp:9000)停止服务器9000 是默认端口,您可以在启动服务器时使用 -port 选项更改它。
  5. 如果出现超时错误,请在服务器或客户端中增加 timeout (以毫秒为单位)。
  6. sentiment 只是 一个 注释器,还有 更多,您可以请求多个,用逗号分隔: 'annotators': 'sentiment,lemma'
  7. 请注意,情绪模型有些特殊(例如, 结果会有所不同,具体取决于您提到的是 David 还是 Bill )。

附言。我不敢相信我添加了 第 9 个 答案,但是,我想,我不得不这样做,因为现有的答案都没有帮助我(以前的 8 个答案中的一些现在已被删除,其他一些已转换为评论)。

原文由 sds 发布,翻译遵循 CC BY-SA 4.0 许可协议

来自斯坦福的 NLP 工具的原生 Python 实现

最近,斯坦福发布了一个新的 Python 包,用于实现最重要的 NLP 任务的基于神经网络 (NN) 的算法:

  • 代币化
  • 多词标记 (MWT) 扩展
  • 词形还原
  • 词性 (POS) 和形态特征标记
  • 依赖解析

它是用 Python 实现的,并使用 PyTorch 作为神经网络库。该软件包包含 50 多种语言 的准确模型。

要安装,您可以使用 PIP:

 pip install stanfordnlp

要执行基本任务,您可以将本机 Python 接口与 许多 NLP 算法结合 使用:

 import stanfordnlp

stanfordnlp.download('en')   # This downloads the English models for the neural pipeline
nlp = stanfordnlp.Pipeline() # This sets up a default neural pipeline in English
doc = nlp("Barack Obama was born in Hawaii.  He was elected president in 2008.")
doc.sentences[0].print_dependencies()

编辑:

到目前为止,该库 不支持情感分析,但我没有删除答案,因为它直接回答了问题的“Stanford nlp for python”部分。

原文由 Aleksander Pohl 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏