GCP Sentiment Analysis возвращает одинаковый балл для 17 разных документов, что я делаю не так? - PullRequest
0 голосов
/ 07 января 2019

Я выполняю анализ настроений Google Cloud Platform по 17 различным документам, но он дает мне одинаковую оценку с разными величинами для каждого. Я впервые использую этот пакет, но, насколько я понимаю, для всех них должно быть невозможно иметь одинаковый счет.

Документы представляют собой PDF-файлы различного размера, но из 15-20 страниц я исключаю 3 из них, поскольку они не имеют отношения к делу.

Я пробовал код с другими документами, и он дает разные оценки для более коротких документов, я подозреваю, что максимальная длина документа, который он может обработать, но не смог найти ничего в документации или через Google.

def analyze(text):
    client = language.LanguageServiceClient(credentials=creds)    

    document = types.Document(content=text, 
        type=enums.Document.Type.PLAIN_TEXT)

    sentiment = client.analyze_sentiment(document=document).document_sentiment
    entities = client.analyze_entities(document=document).entities

    return sentiment, entities


def extract_text_from_pdf_pages(pdf_path):
    resource_manager = PDFResourceManager()
    fake_file_handle = io.StringIO()
    converter = TextConverter(resource_manager, fake_file_handle)
    page_interpreter = PDFPageInterpreter(resource_manager, converter)

    with open(pdf_path, 'rb') as fh:
        last_page = len(list(enumerate(PDFPage.get_pages(fh, caching=True, check_extractable=True))))-1

        for pgNum, page in enumerate(PDFPage.get_pages(fh, 
                                  caching=True,
                                  check_extractable=True)):

            if pgNum not in [0,1, last_page]:
                page_interpreter.process_page(page)

        text = fake_file_handle.getvalue()

    # close open handles
    converter.close()
    fake_file_handle.close()

    if text:
        return text

Результаты (оценка, величина):

doc1 0,10000000149011612 - 147,5


doc2 0,10000000149011612 - 118,30000305175781


doc3 0,10000000149011612 - 144,0


doc4 0.10000000149011612 - 147.10000610351562


doc5 0,10000000149011612 - 131,39999389648438


doc6 0,10000000149011612 - 116,19999694824219


doc7 0.10000000149011612 - 121.0999984741211


doc8 0,10000000149011612 - 131,60000610351562


doc9 0,10000000149011612 - 97,69999694824219


doc10 0,10000000149011612 - 174,89999389648438


doc11 0,10000000149011612 - 138,8000030517578


doc12 0.10000000149011612 - 141.10000610351562


doc13 0,10000000149011612 - 118,5999984741211


doc14 0,10000000149011612 - 135,60000610351562


doc15 0,10000000149011612 - 127,0


doc16 0,10000000149011612 - 97,0999984741211


doc17 0,10000000149011612 - 183,5


ожидаемые разные результаты для всех документов, по крайней мере, небольшие вариации. (Я думаю, что эти значения также слишком высоки по сравнению с тем, что я нашел в документации и в других местах)

1 Ответ

0 голосов
/ 07 января 2019

Да, есть некоторые квоты в использовании Natural Language API .

Natural Language API обрабатывает текст в серию токенов, которые примерно соответствуют границам слова. Попытка обработать токены, превышающие квоту токенов (которая по умолчанию составляет 100 000 токенов на запрос), не приведет к ошибке, , но любые токены, превышающие эту квоту, будут игнорироваться .

По второму вопросу мне сложно оценить результаты API Natural Language, не имея доступа к документам. Возможно, поскольку они слишком нейтральны, вы получаете очень похожие результаты. Я провел несколько тестов с большими нейтральными текстами и получил похожие результаты.

Просто для пояснения, , как указано в документации API Natural Language :

  • documentSentiment содержит общее настроение документа, состоящее из следующих полей:
    • оценка настроений варьируется от -1,0 (отрицательно) до 1,0 (положительно) и соответствует общему эмоциональному наклону текста.
    • величина указывает на общую силу эмоций (как положительных, так и отрицательных) в данном тексте, от 0,0 до + инф. В отличие от оценки, величина не нормируется; каждое выражение эмоции в тексте (как положительное, так и отрицательное) вносит свой вклад в величину текста (поэтому более длинные текстовые блоки могут иметь большую величину).
...