Я хочу знать, есть ли API для анализа текста в Java . Что-то, что может извлекать все слова в тексте, отдельные слова, выражения и т. Д. Что-то, что может сообщить, если найденное слово - это число, дата, год, имя, валюта и т. Д.
Я начинаю анализ текста сейчас , так что мне нужен только API для начала. Сделал веб-краулер, теперь мне нужно что-то для анализа скачанных данных. Нужны методы для подсчета количества слов на странице, похожих слов, типов данных и других ресурсов, связанных с текстом.
Существуют ли API-интерфейсы для анализа текста в Java?
РЕДАКТИРОВАТЬ: интеллектуальный анализ текста, я хочу интеллектуальный анализ текст. API для Java, обеспечивающий это.
Например, вы можете использовать некоторые классы из стандартной библиотеки java.text
или использовать StreamTokenizer
(вы можете настроить его в соответствии со своими требованиями). Но, как вы знаете - текстовые данные из интернет-источников обычно содержат много орфографических ошибок , и для лучшей производительности вы должны использовать что-то вроде нечеткого токенизатора - java.text и других стандартов. Утилиты имеют слишком ограниченные возможности в этом контексте .
Итак, я бы посоветовал вам использовать регулярные выражения (java.util.regex) и создавать собственный вид токенизатора в соответствии с вашими потребностями.
P.S. В соответствии с вашими потребностями вы можете создать анализатор конечного автомата для распознавания шаблонных частей в необработанных текстах Вы можете увидеть простой распознаватель конечного автомата на рисунке ниже (вы можете создать более сложный синтаксический анализатор, который распознает гораздо более сложные шаблоны в тексте).
Я бы предпочел адаптировать классы Lucene для анализа и Stemmer, а не изобретать велосипед. У них есть подавляющее большинство случаев. Смотрите также дополнительные и дополнительные классы.
Похоже, вы ищете Named Entity Recogniser .
У вас есть пара вариантов.
CRFClassifier из Стэнфордской группы обработки естественного языка представляет собой реализацию Java для распознавателя именованных объектов.
GATE (Общая архитектура для текстовой инженерии) , пакет с открытым исходным кодом для языковой обработки. Посмотрите на скриншоты на странице для разработчиков: http://gate.ac.uk/family/developer.html . Это должно дать вам краткое представление о том, что это может сделать. Видеоурок дает вам лучший обзор того, что может предложить это программное обеспечение.
Возможно, вам придется настроить один из них в соответствии с вашими потребностями.
У вас также есть другие варианты:
Что касается обучения для CRFClassifier, вы можете найти краткое объяснение в их FAQ :
... данные обучения должны быть в столбцы, разделенные табуляцией, и вы определяете значение этих столбцов с помощью карты. Один столбец должен называться «answer» и иметь класс NER, а существующие функции знают о таких именах, как «word» и «tag». Вы определяете файл данных, карту и какие функции генерировать через файл свойств. Существует множество документов о том, какие функции генерируют различные свойства в Javadoc NERFeatureFactory, хотя в конечном итоге вам нужно перейти к исходному коду, чтобы ответить на некоторые вопросы ...
Вы также можете найти фрагмент кода в javadoc CRFClassifier :
Типичное использование командной строки
Для запуска обученной модели с предоставленным сериализованным классификатором в текстовом файле:
java -mx500m edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier conll.ner.gz -textFile samplesentences.txt
При указании всех параметров в файле свойств (поезд, тест или время выполнения):
java -mx1g edu.stanford.nlp.ie.crf.CRFClassifier -prop propFile
Для обучения и проверки простой модели NER из командной строки:
java -mx1000m edu.stanford.nlp.ie.crf.CRFClassifier -trainFile trainFile -testFile testFile -macro > output
Если вы имеете дело с большими объемами данных, возможно, Lucene Apache поможет с тем, что вам нужно.
В противном случае может быть проще всего создать собственный класс Analyzer, который сильно зависит от стандартного класса Pattern. Таким образом, вы можете контролировать, какой текст считается словом, границей, числом, датой и т. Д. Например, 20110723 - это дата или число? Возможно, вам потребуется реализовать алгоритм многократного анализа, чтобы лучше «понимать» данные.
Я рекомендую посмотреть на LingPipe . Если вы в порядке с веб-сервисами, то эта статья содержит краткое описание различных API
.