我要做的就是找到任何给定字符串的情绪(正/负/中性)。在研究中,我遇到了斯坦福大学NLP。但是可悲的是它在Java中。关于如何使它适用于python的任何想法?
目前(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
笔记:
timeout
以毫秒为单位,我将其设置为10秒以上。如果将大量Blob传递给服务器,则应增加它。--help
。-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
sentimentValue
可以用来估计整个文本的情绪。Neutral
(2)和Negative
(1)之间,范围从VeryNegative
(0)到VeryPositive
(4),这似乎非常少见。Ctrl-C``kill $(lsof -ti tcp:9000)``9000``-port
timeout
如果收到超时错误,则增加服务器或客户端的时间(以毫秒为单位)。sentiment
仅仅是 一个 注释器,还有更多注释器,您可以请求多个注释器,并用逗号分隔:'annotators': 'sentiment,lemma'
。PS 。我不敢相信我添加了 第9个
答案,但是我想我必须这样做,因为现有的答案都没有帮助我(以前的8个答案中的一些已被删除,另一些已转换为评论)。