当前位置: 首页 > 面试题库 >

Stanford NLP for Python

闾丘鸣
2023-03-14
问题内容

我要做的就是找到任何给定字符串的情绪(正/负/中性)。在研究中,我遇到了斯坦福大学NLP。但是可悲的是它在Java中。关于如何使它适用于python的任何想法?


问题答案:

下载Stanford 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,并且如果您的盒子电源不足,则可能需要修改该选项。

安装python包

标准包装

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. 句子的平均情绪在Neutral(2)和Negative(1)之间,范围从VeryNegative(0)到VeryPositive(4),这似乎非常少见。
  4. 您可以通过在启动它的终端上键入或使用shell命令来停止服务器。是默认端口,您可以在启动服务器时使用该选项进行更改。Ctrl-C``kill $(lsof -ti tcp:9000)``9000``-port
  5. timeout如果收到超时错误,则增加服务器或客户端的时间(以毫秒为单位)。
  6. sentiment仅仅是 一个 注释器,还有更多注释器,您可以请求多个注释器,并用逗号分隔:'annotators': 'sentiment,lemma'
  7. 请注意,情感模型在某种程度上是特质的(例如,结果是不同的,具体取决于您提到David还是Bill)。

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



 类似资料:

相关阅读

相关文章

相关问答