Возможно, вы уже знаете о GATE: http://gate.ac.uk/
... но это то, что мы использовали (на моей повседневной работе) для множества различных задач интеллектуального анализа текста. Он довольно гибкий и открытый.
Однажды я построил распознаватель именованных сущностей с максимальной энтропией для данных CoNLL, используя OpenNLP MaxEnt http://sourceforge.net/projects/maxent/ для курсовой.
Потребовалось много предварительной обработки данных с помощью пользовательских скриптов perl, чтобы получить все признаки, извлеченные в красивые аккуратные числовые векторы.
Мы используем lucene для обработки прямых трансляций из интернета. У него есть собственный java api.
http://lucene.apache.org/java/docs/
Затем вы можете использовать mahout, который представляет собой набор алгоритмов машинного обучения, работающих поверх lucene.
Единственный способ связи с кодом, запущенным на странице в Chrome, - это DOM, поэтому вам придется использовать взлом, такой как вставка < скрипта >
тэгов с кодом. Обратите внимание, что это может оказаться ошибочным, если сценарий должен выполняться раньше всего на странице.
EDIT: Вот как расширение Nice Alert делает это:
function main () {
// ...
window.alert = function() {/* ... */};
// ...
}
var script = document.createElement('script');
script.appendChild(document.createTextNode('('+ main +')();'));
(document.body || document.head || document.documentElement).appendChild(script);
-121--1222578- Дополнение nines в базовой 10 определяется вычитанием каждой цифры из 9.
Так 45 (=... 000045) становится 54 (=... 999954).
Дополнение Тена - это только дополнение девяток плюс 1. Так... 000045 становится (... 999954 + 1) =... 999955.
Дополнительная информация в Википедии .
-121--4195898-Хотя Weka не является специализированной структурой интеллектуального анализа текста, он имеет ряд классификаторов, обычно используемых в задачах интеллектуального анализа текста, таких как: SVM, kNN, multinomial NaiveBayes, среди прочих.
Он также имеет несколько фильтров для работы с текстовыми данными, такими как фильтр StringToWordVector
, который может выполнять преобразование TF/IDF.
Для получения дополнительной информации посетите веб-сайт Weka wiki .
Может быть, взгляните на Java Open Source NLP and Text Mining tools .
Я использовал LingPipe -- набор Java-библиотек для лингвистического анализа человеческого языка -- для задач текстового анализа (и других смежных задач).
Это очень хорошо документированный программный пакет, и на сайте есть несколько руководств, которые подробно объясняют, как выполнить определенную задачу с помощью LingPipe, например, распознавание именованных сущностей. Есть также группа новостей, где вы можете задать любой вопрос о программном обеспечении (или задачах, связанных с НЛП) и получить быстрый ответ от самих авторов пакета; и, конечно же, блог.
Исходный код также очень прост в использовании и хорошо документирован, что для меня всегда является большим плюсом.
Что касается алгоритмов машинного обучения, то их достаточно много, от Naïve Bayes до Conditional Random Field. С другой стороны, для алгоритмов подбора словарей есть ExactDicitonaryChunker, который является реализацией алгоритма Ахо-Корасича (очень, очень, очень быстрый алгоритм для этой задачи).
В целом, я думаю, что это один из лучших программных пакетов NLP для Java (я не использовал все существующие пакеты, поэтому не могу сказать, что он лучший), и я определенно рекомендую его для решения поставленной вами задачи.
Я искренне считаю, что несколько представленных здесь ответов очень хороши. Однако для выполнения своих требований я решил использовать Apache UIMA с ClearTK . Он поддерживает несколько методов машинного обучения, и у меня нет проблем с лицензиями. Кроме того, я могу создавать оболочки для других методологий машинного обучения и пользоваться преимуществами инфраструктуры UIMA, которая очень хорошо организована и работает быстро.
Спасибо всем за интересные ответы.
С уважением, украина