Анализ настроений для Twitter в Python

Я ищу реализацию с открытым исходным кодом, предпочтительно на python, Textual Sentiment Analysis (http://en.wikipedia.org/wiki/Sentiment_analysis). Кто-нибудь знаком с такой версией с открытым исходным кодом, которую я могу использовать?

Я пишу приложение, которое ищет твиттер для какого-то поискового запроса, скажем, "youtube", и считает "счастливыми" твиты против "грустных" твитов. Я использую Google appengine, так что это в python. Я хотел бы иметь возможность классифицировать возвращенные результаты поиска из твиттера, и я хотел бы сделать это в python. До сих пор я не смог найти такой анализатор чувств, особенно не в python. Вы знакомы с такой версией с открытым исходным кодом, которую я могу использовать? Предпочтительно, это уже в python, но если нет, надеюсь, я могу перевести его на python.

Заметьте, тексты, которые я анализирую, очень короткие, это твиты. Поэтому в идеале этот классификатор оптимизирован для таких коротких текстов.

Кстати, twitter поддерживает операторы ":)" и ":(" в поиске, которые стремятся сделать именно это, но, к сожалению, классификация, предоставленная ими, не так уж велика, поэтому я решил, что могу дать это попробуйте сами.

Спасибо!

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

Ответ 1

В большинстве этих видов приложений вам придется перевернуть большую часть своего собственного кода для задачи статистической классификации. Как предложил Lucka, NLTK - идеальный инструмент для естественного манипулирования языком в Python, если ваша цель не мешает некоммерческому характеру его лицензии. Однако я бы предложил другие программные пакеты для моделирования. Я не нашел много мощных моделей машинного обучения, доступных для Python, поэтому я собираюсь предложить некоторые автономные двоичные файлы, которые легко с ним сотрудничают.

Вам может быть интересно Инструментарий для расширенного дискриминантного моделирования, который можно легко связать с Python. Это использовалось для задач классификации в различных областях обработки естественного языка. У вас также есть выбор из нескольких моделей. Я бы предложил начать с классификации Maximum Entropy, если вы уже знакомы с внедрением классификатора Naive Bayes. Если нет, вы можете захотеть изучить его и закодировать один, чтобы действительно получить достойное понимание статистической классификации как задачи машинного обучения.

Университет Техаса в Остинских группах вычислительной лингвистики провел занятия, в которых большинство проектов, выходящих из них, использовали этот отличный инструмент. Вы можете посмотреть страницу курса Computingational Linguistics II, чтобы получить представление о том, как заставить ее работать и какие предыдущие приложения она обслуживала.

Еще один отличный инструмент, который работает в том же ключе, - Mallet. Разница между Mallet заключается в том, что есть немного больше документации и еще несколько доступных моделей, таких как деревья решений, и это на Java, что, на мой взгляд, делает его немного медленнее. Weka - это целый набор различных моделей машинного обучения в одном большом пакете, который включает в себя некоторые графические материалы, но в действительности это в основном предназначено для педагогических целей, и на самом деле это не то, что я бы ввел в производство.

Удачи вам в вашей задаче. Реальная сложная часть, вероятно, будет представлять собой объем знаний, необходимых для вас, чтобы классифицировать "набор семян", из которого будет изучаться ваша модель. Он должен быть довольно значительным, в зависимости от того, выполняете ли вы двоичную классификацию (довольный или грустный) или целый ряд эмоций (что потребует еще большего). Обязательно проведите некоторые из этих данных для тестирования или выполните несколько десятков или удаленных тестов, чтобы убедиться, что вы на самом деле делаете хорошую работу, предсказывая, прежде чем вы ее выставляете. И самое главное, получайте удовольствие! Это, по-моему, лучшая часть НЛП и ИИ.

Ответ 2

Удачи вам в этом.

Настроения чрезвычайно контекстуальны, а чирикающая культура делает проблему хуже, потому что вам не дают контекста для большинства твитов. Весь смысл твиттера заключается в том, что вы можете использовать огромное количество общего контекста "реального мира", чтобы упаковать значимую связь в очень коротком сообщении.

Если они говорят, что видео плохое, значит ли это плохо или плохо?

Профессор лингвистики читал лекции к ее классу один день. "На английском," она сказала: "Двойной негатив образует положительны. На некоторых языках, однако, таких как русский, двойной отрицательный все еще отрицательный. Однако нет язык, в котором двойной положительный образуют негатив".

Голос из задней части комнаты "Да, правильно..."

Ответ 3

Спасибо всем за ваши предложения, они действительно были очень полезны! В итоге я использовал наивный байесовский классификатор, который я заимствовал из здесь. Я начал с подачи списка хороших/плохих ключевых слов, а затем добавил функцию "learn", используя отзывы пользователей. Это оказалось очень приятным.

Полные сведения о моей работе, как в сообщении .

Опять же, ваша помощь была очень полезной, так что спасибо!

Ответ 4

Я построил список слов с надписью. Вы можете получить доступ к нему здесь:

http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/zip/imm6010.zip

В моем блоге вы найдете короткую программу Python:

http://finnaarupnielsen.wordpress.com/2011/06/20/simplest-sentiment-analysis-in-python-with-af/

В этом сообщении показано, как использовать список слов с отдельными предложениями, а также с Twitter.

Подходы к спискам слов имеют свои ограничения. Вы найдете исследование ограничений моего списка слов в статье "Новый ANEW: оценка списка слов для анализа настроений в микроблогах". Эта статья доступна на моей домашней странице.

Обратите внимание, что в коде отсутствует unicode(s, 'utf-8') (по причинам, связанным с педагогикой).

Ответ 5

Многие исследовательские работы показывают, что хорошей отправной точкой для анализа настроений является поиск прилагательных, например, положительных прилагательных или отрицательных прилагательных. Для короткого блока текста это в значительной степени ваш единственный вариант... Есть документы, которые просматривают целые документы или анализ уровня предложения, но, как вы говорите, твиты довольно короткие... Нет реального волшебного подхода к пониманию настроение предложения, так что я думаю, что ваш лучший выбор будет поиском одной из этих исследовательских статей и попыткой получить их набор данных положительно/негативно ориентированных прилагательных.

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

Удачи.

Ответ 6

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

Кроме того, системы анализа чувств обычно разрабатываются путем обучения системы данным о просмотре продукта/фильма, которая существенно отличается от среднего твита. Они будут оптимизированы для текста с несколькими предложениями, все об одной и той же теме. Я подозреваю, что вам лучше придумать систему, основанную на правилах, возможно, основываясь на лексиконе сентиментальных терминов, таких как тот, который Университет Питтсбурга предоставляет.

Отъезд Мы отлично себя чувствуем для реализации подобной идеи с действительно красивым интерфейсом (и twitrratr).

Ответ 8

Недавно я встретил Natural Language Toolkit. Вероятно, вы могли бы использовать его в качестве отправной точки. В нем также есть много модулей и дополнений, поэтому, возможно, у них уже есть что-то похожее.

Ответ 9

Может быть TextBlob (на основе NLTK и шаблона) - это инструмент для анализа настроений для вас.

Ответ 10

Несколько странная мысль: вы можете попробовать использовать API Twitter для загрузки большого набора твитов, а затем классифицировать подмножество этого набора с использованием смайликов: одна положительная группа для ":)", ":]", ": D" и т.д., а другая отрицательная группа с ":(" и т.д.

Как только у вас будет такая грубая классификация, вы можете искать дополнительные подсказки с анализом частоты или ngram или что-то в этом направлении.

Это может показаться глупым, но серьезные исследования были сделаны на этом (поиск "анализа настроений" и смайлика). Стоит посмотреть.

Ответ 11

В TwitterFeel есть интерфейс Twitter Sentiment, который продвигает лингвистический анализ твитов и может получать положительные/отрицательные твиты. См. http://www.webservius.com/corp/docs/tweetfeel_sentiment.htm

Ответ 12

Для тех, кто заинтересован в кодировании Twitter Sentiment Analyis с нуля, существует курс Coursera "" Data Science "с кодом на Python на GitHub (как часть присвоения 1 - ссылка). Сентименты являются частью AFINN-111.

Здесь можно найти рабочие решения, например здесь. В дополнение к списку настроений AFINN-111 существует простая реализация создания динамического списка терминов на основе частоты терминов в твитах, имеющих оценку pos/neg (см. здесь).