【问题标题】:Unable to run Stanford Core NLP annotator over whole data set无法在整个数据集上运行 Stanford Core NLP 注释器
【发布时间】:2017-12-24 11:01:48
【问题描述】:

我一直在尝试在数据集上使用 Stanford Core NLP,但它在我无法找到的某些索引处停止。 该数据集在 Kaggle 上可用:https://www.kaggle.com/PromptCloudHQ/amazon-reviews-unlocked-mobile-phones/data

这是一个通过获取单个句子的平均情感值来输出段落情感的函数。

import json
def funcSENT(paragraph):
    
    
    all_scores = []
    
    output = nlp.annotate(paragraph, properties={
        "annotators": "tokenize,ssplit,parse,sentiment",
        "outputFormat": "json",
        # Only split the sentence at End Of Line. We assume that this method only takes in one single sentence.
        #"ssplit.eolonly": "true",
        # Setting enforceRequirements to skip some annotators and make the process faster
        "enforceRequirements": "false"
    })
    
    
    all_scores = []
    for i in range(0,len(output['sentences'])):
        all_scores.append((int(json.loads(output['sentences'][i]['sentimentValue']))+1))
        

    final_score = sum(all_scores)/len(all_scores)
    
    return round(final_score)
 

现在我使用此代码为“评论”列中的每条评论运行此代码。

import pandas as pd
data_file = 'C:\\Users\\SONY\\Downloads\\Amazon_Unlocked_Mobile.csv'
data = pd.read_csv( data_file)

from pandas import *
i = 0
my_reviews = data['Reviews'].tolist()
senti = []
while(i<data.shape[0]):
    senti.append(funcSENT(my_reviews[i]))
    i=i+1

但不知何故,我得到了这个错误,我无法找到问题所在。现在已经好几个小时了,请帮忙。

   [1]: https://i.stack.imgur.com/qFbCl.jpg

如何避免这个错误?

【问题讨论】:

    标签: python typeerror stanford-nlp sentiment-analysis keyerror


    【解决方案1】:

    据我了解,您正在使用带有 nlp=StanfordCoreNLP(...) 的 pycorenlp 和正在运行的 StanfordCoreNLP 服务器。我不会检查你使用的数据,因为它似乎需要 Kaggle 帐户。

    使用相同的设置但不同的段落运行表明单独打印“输出”会显示来自 java 服务器的错误,在我的情况下:

    java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Input word not tagged
    

    我认为因为没有词性注释器,服务器无法执行解析。每当您使用 parse 或 depparse 时,我认为您也需要拥有“pos”注释器。

    我不确定情感注释器需要什么,但您可能需要其他注释器(例如“引理”)才能获得良好的情感结果。

    自行打印输出。如果您遇到相同的 java 错误,请尝试添加“pos”注释器以查看是否获得了预期的 json。否则,试着举一个更简单的例子,也许使用你自己的小数据集,然后评论或调整你的问题。

    【讨论】:

    • 尝试添加 'pos' 注释器,但仍然收到“TypeError:字符串索引必须是整数”错误。它一直运行到某个索引,但随后出现此错误。
    • 如果你在计算后打印(输出),它会说什么?
    • 根据代码,我使用 output['Sentiment'][i]['sentimentValue'] 但是如果您要求单独的迭代,那么每次迭代的打印输出都会打印一个信息字典每个句子。
    • 好的,所以它在计算后给出了一个有效的“输出”?我认为服务器出错了,因为我可以通过这种方式重现错误。如果服务器输出显示任何内容,这可能会提供更多调试信息。
    • 服务器显示java.util.concurrent.TimeoutException
    猜你喜欢
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2015-05-16
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多