Подтвердить что ты не робот

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

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

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

Существуют ли API для текстового анализа в Java?

EDIT: Text-mining, я хочу обработать текст. API для Java, который предоставляет это.

4b9b3361

Ответ 1

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

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

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

enter image description here

Ответ 2

Похоже, вы ищете Именованный распознаватель сущностей.

У вас есть несколько вариантов.

CRFClassifier из группы обработки естественного языка Stanford, является реализацией Java с помощью Именованного распознавателя сущностей.

GATE (Общая архитектура для текстовой инженерии) - пакет с открытым исходным кодом для обработки языка. Взгляните на скриншоты на странице для разработчиков: http://gate.ac.uk/family/developer.html. Он должен дать вам краткое представление о том, что это может сделать. видео-учебник дает вам лучший обзор того, что может предложить это программное обеспечение.

Вам может потребоваться настроить один из них в соответствии с вашими потребностями.

У вас также есть другие возможности:


Что касается обучения CRFClassifier, вы можете найти краткое описание в их FAQ:

... данные обучения должны быть в столбцах, разделенных вкладками, и вы определить значение этих столбцов через карту. Один столбец должен быть называется "ответ" и имеет класс NER, а существующие функции знают о таких именах, как "слово" и "тег". Вы определяете файл данных, карту, и какие функции можно создавать через файл свойств. Там есть значительная документация о том, какие функции имеют разные свойства генерировать в 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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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