Существуют ли в Java API для анализа / интеллектуального анализа текста? [закрыто]

Я хочу знать, есть ли API для анализа текста в Java . Что-то, что может извлекать все слова в тексте, отдельные слова, выражения и т. Д. Что-то, что может сообщить, если найденное слово - это число, дата, год, имя, валюта и т. Д.

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

Существуют ли API-интерфейсы для анализа текста в Java?

РЕДАКТИРОВАТЬ: интеллектуальный анализ текста, я хочу интеллектуальный анализ текст. API для Java, обеспечивающий это.

24
задан Renato Dinhani 25 July 2011 в 18:41
поделиться

5 ответов

Например, вы можете использовать некоторые классы из стандартной библиотеки java.text или использовать StreamTokenizer (вы можете настроить его в соответствии со своими требованиями). Но, как вы знаете - текстовые данные из интернет-источников обычно содержат много орфографических ошибок , и для лучшей производительности вы должны использовать что-то вроде нечеткого токенизатора - java.text и других стандартов. Утилиты имеют слишком ограниченные возможности в этом контексте .

Итак, я бы посоветовал вам использовать регулярные выражения (java.util.regex) и создавать собственный вид токенизатора в соответствии с вашими потребностями.

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

enter image description here

10
ответ дан 28 November 2019 в 23:17
поделиться

Я бы предпочел адаптировать классы Lucene для анализа и Stemmer, а не изобретать велосипед. У них есть подавляющее большинство случаев. Смотрите также дополнительные и дополнительные классы.

2
ответ дан 28 November 2019 в 23:17
поделиться

Похоже, вы ищете 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

26
ответ дан 28 November 2019 в 23:17
поделиться

Если вы имеете дело с большими объемами данных, возможно, Lucene Apache поможет с тем, что вам нужно.

В противном случае может быть проще всего создать собственный класс Analyzer, который сильно зависит от стандартного класса Pattern. Таким образом, вы можете контролировать, какой текст считается словом, границей, числом, датой и т. Д. Например, 20110723 - это дата или число? Возможно, вам потребуется реализовать алгоритм многократного анализа, чтобы лучше «понимать» данные.

8
ответ дан 28 November 2019 в 23:17
поделиться

Я рекомендую посмотреть на LingPipe . Если вы в порядке с веб-сервисами, то эта статья содержит краткое описание различных API

.
2
ответ дан 28 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: