В моей компании есть продукт, который делает это, а также хорошо работает. Я сделал большую часть работы над этим. Я могу дать краткое представление:
Вам необходимо разбить абзац на предложения, а затем разбить каждое предложение на более мелкие под-предложения - разбиение на основе запятых, дефиса, точки с запятой, двоеточия, 'и', 'или' и т. Д.
В некоторых случаях каждое субпредложение будет демонстрировать совершенно отдельное чувство.
Некоторые предложения, даже если они разделены, должны быть объединены.
Например: продукт потрясающий, отличный и фантастический.
Мы разработали исчерпывающий набор правил о типе предложений, которые должны быть разделены, а какие не должны (на основе POS-тегов слов)
На первом уровне вы можете использовать подход с набором слов, что означает - иметь список положительных и отрицательных слов / фраз и проверять каждое под-предложение. При этом также обратите внимание на слова отрицания, такие как «нет», «нет» и т. Д., Которые изменят полярность предложения.
Даже если вы не можете найти чувства, вы можете пойти на наивный байесовский подход . Этот подход не очень точен (около 60%). Но если вы примените это только к предложению, которое не проходит через первый набор правил - вы можете легко получить точность 80-85%.
Важная часть - это список положительных / отрицательных слов и способ, которым вы разбиваетесь на части. Если хотите, вы можете подняться даже на уровень выше, внедрив HMM (скрытая модель Маркова) или CRF (условные случайные поля). Но я не профессионал в НЛП, и кто-то другой может заполнить вас в этой части.
Для любопытных людей мы реализовали все это - python с NLTK и модулем Reverend Bayes.
Довольно просто и обрабатывает большинство предложений. Однако вы можете столкнуться с проблемами при попытке пометить контент из Интернета. Большинство людей не пишут правильные предложения в Интернете. Также очень трудно справиться с сарказмом.