Существуют ли API для текстового анализа/разработки на Java?
Я хочу знать, есть ли API для текстового анализа в Java. Что-то, что может извлечь все слова в тексте, отдельные слова, выражения и т.д. Что-то, что может сообщить, если найденное слово - это число, дата, год, имя, валюта и т.д.
Теперь я начинаю анализ текста, поэтому мне нужен только API для запуска. Я сделал веб-искатель, теперь мне нужно что-то проанализировать загруженные данные. Нужны методы для подсчета количества слов на странице, похожих слов, типа данных и других ресурсов, связанных с текстом.
Существуют ли API для текстового анализа в Java?
EDIT: Text-mining, я хочу обработать текст. API для Java, который предоставляет это.
Ответы
Ответ 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