Обработка естественного языка на Java
Покупка
Тематика:
Программирование на Java
Издательство:
ДМК Пресс
Автор:
Риз Ричард
Перевод:
Снастин А. В.
Год издания: 2016
Кол-во страниц: 264
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-331-4
Артикул: 653193.02.99
К покупке доступен более свежий выпуск
Перейти
Обработка естественного языка (Natural Language Procession — NLP) представляет собой важную область разработки прикладного ПО и, с учетом современных задач ИТ, в будущем эта важность будет только возрастать. Уже сейчас наблюдается рост потребности в приложениях, работающих с естественными языками на основе NLP-методик.
В двнной книге рассматриваются способы организации автоматической обработки текста с применением таких методик, как полнотекстовый поиск, правильное распознавание имен, кластеризация, классификация, извлечение информации и составление аннотаций. Концепции обработки естественного языка излагаются таким образом, что даже читатели, не обладающие знаниями об этой технологии и о методах статистического анализа, смогут понять их.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Ричард Риз Обработка естественного языка на Java
Natural Language Processing with Java Richard M Reese Explore various approaches to organize and extract useful text from unstructured data using Java BIRMINGHAM – MUMBAI
Исследование разных подходов к организации и извлечению полезной текстовой информации из неструктурированных данных с использованием Java Обработка естественного языка на Java Москва, 2016 Ричард Риз
УДК 004.438Java ББК 32.973.2 Р49 Риз Р. Р49 Обработка естественного языка на Java / пер. с англ. А.В. Снастина. – М.: ДМК Пресс, 2016. – 264 с.: ил. ISBN 978-5-97060-331-4 Обработка естественного языка (Natural Language Procession — NLP) представляет собой важную область разработки прикладного ПО и, с учетом современных задач ИТ, в будущем эта важность будет только возрастать. Уже сейчас наблюдается рост потребности в приложениях, работающих с естественными языками на основе NLPметодик. В двнной книге рассматриваются способы организации автоматической обработки текста с применением таких методик, как полнотекстовый поиск, правильное распознавание имен, кластеризация, классификация, извлечение информации и составление аннотаций. Концепции обработки естественного языка излагаются таким образом, что даже читатели, не обладающие знаниями об этой технологии и о методах статистического анализа, смогут понять их. УДК 004.438Java ББК 32.973.2 Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 9781784391799 (анг.) Copyright © 2015 Packt Publishing ISBN 9785970603314 (рус.) © Оформление, перевод, ДМК Пресс, 2016
Содержание Об авторе ................................................................10 О рецензентах......................................................... 11 Предисловие ...........................................................13 Глава 1. Основы обработки естественного языка ...........18 Что такое обработка естественного языка.................................................................19 Для чего используется обработка естественного языка .......................................21 Трудности обработки естественного языка ..............................................................23 Обзор инструментальных средств обработки естественного языка ................25 Apache OpenNLP ........................................................................................................27 Stanford NLP ................................................................................................................28 LingPipe .........................................................................................................................30 GATE ..............................................................................................................................31 UIMA .............................................................................................................................31 Обзор задач обработки текста .......................................................................................32 Поиск фрагментов текста........................................................................................33 Поиск предложений ..................................................................................................35 Поиск людей и прочих именованных объектов ..............................................37 Определение частей речи ........................................................................................40 Классификация текстов и документов...............................................................41 Выделение взаимоотношений ...............................................................................42 Комплексные методики обработки .....................................................................44 О моделях обработки естественного языка ..............................................................45 Определение задачи (типа задачи) ......................................................................45 Выбор модели ..............................................................................................................46 Создание и обучение модели .................................................................................46 Проверка модели ........................................................................................................47 Практическое использование модели ................................................................47 Подготовка данных ...................................................................................................47 Резюме ...................................................................................................................................50 Глава 2. Поиск фрагментов текста ...............................52 Части или фрагменты текста .........................................................................................53 Что такое токенизация .....................................................................................................53 Использование токенизаторов ..............................................................................56 Простые токенизаторы языка Java ..............................................................................57 Использование класса Scanner .............................................................................57 Определение разделителя ..............................................................................58 Использование метода split() ................................................................................59
Содержание Использование класса BreakIterator ...................................................................60 Использование класса StreamTokenizer .............................................................61 Использование класса StringTokenizer ..............................................................63 Проблемы производительности при выполнении токенизации штатными средствами Java .....................................................................................64 Прикладные программные интерфейсы NLP для токенизации........................64 Использование класса Tokenizer из библиотеки OpenNLP ........................65 Использование класса SimpleTokenizer .....................................................65 Использование класса WhitespaceTokenizer ............................................66 Использование класса TokenizerME ...........................................................66 Использование токенизатора из библиотеки Stanford .................................67 Использование класса PTBTokenizer .........................................................68 Использование класса DocumentPreprocessor ........................................69 Использование конвейера ..............................................................................70 Использование токенизаторов из библиотеки LingPipe .....................71 Обучение токенизатора поиску заданных элементов текста .....................72 Сравнение токенизаторов .......................................................................................76 Нормализация .....................................................................................................................76 Преобразование букв в нижний регистр ...........................................................77 Удаление шумовых слов ..........................................................................................78 Создание класса StopWords ...........................................................................78 Использование библиотеки LingPipe для удаления шумовых слов .........................................................................................................................80 Использование стемминга ......................................................................................82 Использование инструмента стемминга Porter Stemmer ....................82 Стемминг с использованием библиотеки LingPipe ...............................83 Использование лемматизации ..............................................................................84 Использование класса StanfordLemmatizer .............................................85 Поддержка лемматизации в библиотеке OpenNLP ..............................86 Нормализация с применением конвейера ........................................................88 Резюме ...................................................................................................................................89 Глава 3. Поиск предложений.......................................91 Процесс разрешения границ предложений...............................................................91 Затруднения при разрешении границ предложений .............................................92 Правила разрешения границ предложений в классе HeuristicSentenceModel библиотеки LingPipe ................................................95 Простые средства разрешения границ предложений в языке Java ..................96 Использование регулярных выражений ...........................................................97 Использование класса BreakIterator ...................................................................99 Использование библиотек NLP API .........................................................................101 Использование библиотеки OpenNLP .............................................................101 Использование класса SentenceDetectorME .........................................101
Содержание 7 Использование метода sentPosDetect ......................................................103 Использование библиотеки Stanford API .......................................................104 Использование класса PTBTokenizer .......................................................104 Использование класса DocumentPreprocessor ......................................108 Использование класса StanfordCoreNLP ................................................111 Использование библиотеки LingPipe ...............................................................112 Использование класса IndoEuropeanSentenceModel ..........................113 Использование класса SentenceChunker.................................................115 Использование класса MedlineSentenceModel .....................................116 Обучение модели SentenceDetector ..........................................................................117 Использование обученной модели ....................................................................120 Вычисление характеристик модели с помощью класса SentenceDetectorEvaluator ...................................................................................120 Резюме .................................................................................................................................122 Глава 4. Поиск людей и именованных объектов ............123 Трудности, возникающие при распознавании и идентификации именованных объектов ..........................................................................................124 Методики распознавания именованных объектов ...............................................125 Списки и регулярные выражения ......................................................................127 Статистические классификаторы ......................................................................127 Использование регулярных выражений для распознавания и идентификации именованных объектов ......................................................128 Использование регулярных выражений в языке Java для поиска объектов ......................................................................................................................128 Использование класса RegExChunker из библиотеки LingPipe .............131 Использование библиотек NLP ..................................................................................132 Использование библиотеки OpenNLP для поиска именованных объектов ......................................................................................................................133 Вычисление точности идентификации именованного объекта ......135 Использование других типов именованных объектов .......................136 Одновременная обработка нескольких типов объектов ....................137 Использование библиотеки Stanford API для поиска именованных объектов ......................................................................................................................138 Использование библиотеки LingPipe для поиска именованных объектов ......................................................................................................................140 Использование моделей именованных объектов из библиотеки LingPipe ...............................................................................................................140 Использование класса ExactDictionaryChunker ..................................142 Обучение модели .............................................................................................................145 Оценка характеристик модели ....................................................................................147 Резюме .................................................................................................................................148
Содержание Глава 5. Определение частей речи ............................150 Процесс разметки .............................................................................................................150 Важное значение инструментов разметки по частям речи .......................154 Трудности в идентификации частей речи .......................................................155 Использование библиотек NLP API .........................................................................157 Использование инструментов разметки по частям речи из библиотеки OpenNLP .......................................................................................158 Использование класса POSTaggerME для разметки по частям речи .......................................................................................................................159 Использование средств поверхностного синтаксического анализа из библиотеки OpenNLP ..............................................................161 Использование класса POSDictionary .....................................................164 Использование инструментов разметки по частям речи из библиотеки Stanford ..........................................................................................168 Использование класса MaxentTagger .......................................................168 Использование класса MaxentTagger для разметки текста на смсязыке ......................................................................................................172 Использование конвейера, поддерживаемого библиотекой Stanford, для POSразметки ........................................................................172 Использование инструментов разметки по частям речи из библиотеки LingPipe .........................................................................................175 Использование класса HmmDecoder с тегами Best_First .................176 Использование класса HmmDecoder с тегами NBest .........................177 Определение степени достоверности назначенного тега с помощью класса HmmDecoder ................................................................179 Обучение модели POSModel из библиотеки OpenNLP ............................180 Резюме .................................................................................................................................182 Глава 6. Классификация текстов и документов ............184 Как используется классификация текста ................................................................185 Особенности анализа эмоциональной окраски текста .......................................187 Методики классификации текста ..............................................................................189 Использование библиотек NLP API для классификации текста ...................190 Использование библиотеки OpenNLP .............................................................190 Обучение классификационной модели из библиотеки OpenNLP ....190 Использование класса DocumentCategorizerME для классификации текста ...........................................................................192 Использование библиотеки Stanford API .......................................................194 Использование класса ColumnDataClassifier для классификации текста ...........................................................................195 Использование конвейера, поддерживаемого библиотекой Stanford для анализа эмоциональной окраски текста ........................198 Использование библиотеки LingPipe для классификации текста .........200
Содержание 9 Подготовка обучающего текста с помощью класса Classified ..........200 Использование других обучающих категорий ......................................202 Классификация текста с помощью библиотеки LingPipe .................203 Анализ эмоциональной окраски текста с помощью библиотеки LingPipe ...............................................................................................................204 Определение языка документа с помощью библиотеки LingPipe .....206 Резюме .................................................................................................................................208 Глава 7. Использование синтаксического анализатора (парсера) для выделения взаимосвязей .....................209 Типы взаимосвязей ..........................................................................................................211 Деревья синтаксического анализа .............................................................................212 Использование полученных взаимосвязей .............................................................214 Извлечение взаимосвязей из текста ..........................................................................217 Использование библиотек NLP API .........................................................................217 Использование библиотеки OpenNLP .............................................................218 Использование библиотеки Stanford API .......................................................221 Использование класса LexicalizedParser .................................................221 Использование класса TreePrint ................................................................222 Поиск зависимостей между словами с помощью класса GrammaticalStructure .....................................................................................223 Поиск референциального тождества между объектами ............................225 Извлечение взаимосвязей для системы «вопрос–ответ» ..................................228 Поиск взаимосвязей (зависимостей) между словами ................................228 Определение типа вопроса ...................................................................................230 Поиск ответа на вопрос ..........................................................................................231 Резюме .................................................................................................................................233 Глава 8. Комплексные методики ...............................235 Подготовка данных ..........................................................................................................236 Использование библиотеки Boilerpipe для извлечения текста из HTMLдокументов ............................................................................................236 Использование библиотеки POI для извлечения текста из документов в формате Word ...........................................................................239 Использование библиотеки PDFBox для извлечения текста из документов в формате PDF ............................................................................242 Конвейеры ..........................................................................................................................243 Использование конвейера, поддерживаемого библиотекой Stanford .......244 Использование нескольких ядер процессора для конвейера библиотеки Stanford ...............................................................................................249 Создание конвейера для текстового поиска ...........................................................251 Резюме .................................................................................................................................256 Предметный указатель ............................................258
Об авторе Ричард Риз (Richard M Reese) имеет опыт работы не только в промышленности, но и в науке. В течение 17 лет он работал в отрасли телефонной связи и аэрокосмической индустрии, выполняя разные обязанности, включая исследовательскую и конструкторскую деятельность, разработку программного обеспечения, руководство группами разработчиков и преподавание. В настоящее время Ричард преподает в Тарлтонском государственном университете (Tarleton State University), где применяет свой богатый практический опыт для усовершенствования курсов обучения. Ричард написал несколько книг по языкам программирования Java и C. Он излагает материал в лаконичном и понятном стиле. Среди его книг можно отметить «EJB 3.1 Cookbook», книги о новых функциональных возможностях Java 7 и 8, книгу о сертификации разработчика на языке Java, книгу о jMonkey Engine, а также книгу об использовании указателей в языке C. «Я благодарен моей дочери Дженнифер за многочисленные замечания, поправки и дополнения. Ее вклад в создание данной книги невозможно переоценить».
О рецензентах Сурьяпракаш С. В. (Suryaprakash C. V.) занимается задачами обработки естественного языка с 2009 года. По окончании учебного заведения получил степень бакалавра по физике, затем в аспирантуре специализировался в области разработки компьютерных приложений. Позже получил возможность продолжить карьеру в наиболее привлекательной для него области – обработке естественного языка. В настоящее время Сурьяпракаш является ведущим исследователем в компании Senseforth Technologies. «Я благодарен коллегам за постоянную поддержку во всем. Их помощь была весьма существенной и при составлении данной рецензии». Эван Демпси (Evan Dempsey) – программист из Уотерфорда (Ирландия). В редкие часы, когда он отвлекается от языка Python (который использует не только для заработка, но и с большим удовольствием), Эван любит посидеть с кружкой знаменитого ирландского пива, заняться программированием на Common Lisp и почитать о новейших достижениях в области машинного обучения (machine learning). Он также участвует в нескольких проектах с открытым исходным кодом. Анил Оманвар (Anil Omanwar) – весьма энергичная личность с огромным интересом к новейшим направлениям в технологиях и исследованиях. Обладает более чем 8летним опытом исследовательской работы в области когнитивных (интеллектуальных) вычислений. Обработка естественного языка, машинное обучение, визуальное представление информации и интеллектуальный анализ текстов – главные сферы его исследовательского интереса. Анил является экспертом в анализе эмоциональной окраски текста (sentiment analysis), составлении и анализе опросных листов, кластеризации текстов (документов) и извлечении информации (связных фраз) в разнообразных сферах знаний, таких как науки о жизни (биология, медицина, антропология и т. п.), производство, розничная торговля, электронная коммерция, представительство и работа с клиентами, банковское дело, социальные медиакоммуникации. В настоящее время Анил активно сотрудничает с лабораториями обработки естественного языка и IBM Watson в корпорации IBM. Тема его исследований – автоматизация важнейших ручных операций и помощь экспертов в соответствующих областях знаний для оптимизации функциональных возможностей систем «человек–машина».
О рецензентах Свое свободное время Анил посвящает общественной работе, пешеходному туризму, фотографии и путешествиям. Он всегда готов заняться решением любой, самой сложной технической задачи. Амитабх Шарма (Amitabh Sharma) – профессиональный программист. В его активе множество промышленных приложений в сферах телекоммуникации и бизнесаналитики. Профессиональные интересы Амитабха – сервисориентированные архитектуры, хранение данных и такие языки программирования, как Java, Python и др.
Предисловие Обработка текстов на естественных языках (Natural Language Processing, NLP) используется для решения обширного класса задач, включая поддержку механизмов поиска, аннотирования и классификации текстов на вебстраницах, а также для внедрения методов машинного обучения с целью решения таких нетривиальных задач, как распознавание речи и анализ запросов. Технология обработки естественного языка наиболее эффективна при работе с документами, содержащими полезную информацию. Обработка текстов на естественных языках применяется для расширения функциональных возможностей приложений, например для упрощения ввода пользователем исходных данных и преобразования текста в более удобные формы. Суть технологии NLP состоит в обработке текстов на естественном языке, взятых из самых разнообразных источников. При этом используется последовательность ключевых операций обработки естественного языка для преобразования исходного текста или извлечения из него полезной информации. В этой книге подробно рассматриваются ключевые операции NLP, которые с большой вероятностью можно встретить в NLPприло жениях. Для каждой операции, рассматриваемой в книге, сначала дается описание задачи и области ее применения. Далее перечисляются все нюансы, определяющие сложность задачи, чтобы читатель смог лучше понять данную задачу в целом. Затем следуют многочисленные примеры решений на языке Java, а также примеры использования прикладных программных интерфейсов (API) поддержки обработки естественного языка. Краткий обзор содержания книги Глава 1 «Основы обработки естественного языка» описывает области применения обработки естественного языка и важное значение этой технологии. Методики NLP, используемые в этой главе, объясняются на простых практических примерах. Глава 2 «Поиск фрагментов текста» в основном посвящена операциям разделения потока текста на смысловые фрагменты (фразы, слова, символы и т. п.)1. Это первый этап подготовки к решению более 1 Такие операции обозначаются термином токенизация (tokenization). – Прим. перев.
Предисловие сложных задач NLP. Также описываются программные интерфейсы Java для разделения текста на фрагменты и поиска по образцам. Глава 3 «Поиск предложений» демонстрирует важную роль еще одной задачи обработки естественного языка – определение границ предложений. Этот этап обработки предшествует многим другим NLPзадачам, в которых текстовые элементы не должны выходить за границы предложений, включая гарантии вхождения всех фраз в одно предложение, а также частичную поддержку распознавания и анализа речи. Глава 4 «Поиск людей и именованных объектов» посвящена тому, что в широком смысле обычно обозначают термином «распознавание и идентификация именованных объектов» (namedentity recognition). Это задача идентификации людей, местоположений и прочих подобных объектов в тексте. Данная методика является подготовительным этапом для обработки запросов и операций поиска. Глава 5 «Определение частей речи» рассказывает, как определяются части речи грамматических элементов текста, такие как существительные и глаголы. Идентификация этих элементов является важным этапом в процессе определения общего смыслового значения исследуемого текста и установления смысловых связей внутри текста. Глава 6 «Классификация текстов и документов» наглядно показывает необходимость классификации текста для таких задач, как выявление спама и анализ эмоциональной окраски текста (sentiment analysis). Подробно описывает методики NLP, которые обеспечивают поддержку классификации текстов. Глава 7 «Использование синтаксического анализатора (парсера) для выделения взаимосвязей» рассматривает деревья синтаксического анализа. Дерево синтаксического анализа используется для многих целей, в том числе для извлечения информации. Оно содержит данные об отношениях между своими элементами. Для наглядной демонстрации процесса в главе приведен пример реализации простого запроса. Глава 8 «Комплексные методики» рассматривает способы извлечения данных из документов различных типов, таких как PDF и файлы, созданные в MS Word. Здесь показано, как объединить NLPметодики, описанные в предыдущих главах, в своеобразный «конвейер» для решения более крупномасштабных задач. Что нужно для чтения этой книги Для демонстрации работы методик обработки естественного языка используется Java SDK 7. Потребуются также разнообразные NLP
Соглашения, принятые в книге 15 API, которые нетрудно будет найти и скачать. Наличие интегрированной среды разработки (IDE) не обязательно, но желательно. Для кого эта книга Книга будет полезна опытным разработчикам на Java, интересующимся технологиями обработки естественного языка. Для ее чтения не требуется предварительное знакомство с NLP. Соглашения, принятые в книге В книге вы обнаружите несколько стилей текста, которые позволяют выделять различные виды информации. Ниже приведены примеры этих стилей и описание их смысла. Ключевые слова языка программирования, имена классов, переменных, методов и т. п. оформляются моноширинным шрифтом: «Метод keyset возвращает набор всех ключей аннотации, в текущий момент содержащихся в объекте Annotation». Имена таблиц баз данных, каталогов, файлов, расширения файлов, новые термины и важные замечания оформлены курсивом: «Для демонстрации применения POI воспользуемся файлом с именем TestDocument.pdf». Блоки программного кода и листинги оформлены моноширинным шрифтом: for (int index = 0; index < sentences.length; index++) { String tokens[] = tokenizer.tokenize(sentences[index]); Span nameSpans[] = nameFinder.find(tokens); for(Span span : nameSpans) { list.add("Sentence: " + index + " Span: " + span.toString() + " Entity: " + tokens[span.getStart()]); } } Моноширинным шрифтом также оформляются ввод пользователя и вывод результатов работы программ на экран: Sentence: 0 Span: [0..1) person Entity: Joe Sentence: 0 Span: [7..9) person Entity: Fred Sentence: 2 Span: [0..1) person Entity: Joe Так оформляются предупреждения или важные примечания. Так оформляются советы и рекомендации.
К покупке доступен более свежий выпуск
Перейти