Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Обработка естественного языка на Java

Покупка
Артикул: 653193.02.99
К покупке доступен более свежий выпуск Перейти
Обработка естественного языка (Natural Language Procession — NLP) представляет собой важную область разработки прикладного ПО и, с учетом современных задач ИТ, в будущем эта важность будет только возрастать. Уже сейчас наблюдается рост потребности в приложениях, работающих с естественными языками на основе NLP-методик. В двнной книге рассматриваются способы организации автоматической обработки текста с применением таких методик, как полнотекстовый поиск, правильное распознавание имен, кластеризация, классификация, извлечение информации и составление аннотаций. Концепции обработки естественного языка излагаются таким образом, что даже читатели, не обладающие знаниями об этой технологии и о методах статистического анализа, смогут понять их.
Риз, P. Обработка естественного языка на Java / P. Риз ; пер. с англ. А.В. Снастина. - Москва : ДМК Пресс, 2016. - 264 с. - ISBN 978-5-97060-331-4. - Текст : электронный. - URL: https://znanium.com/catalog/product/1028050 (дата обращения: 25.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Ричард Риз

Обработка  
естественного языка на 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 978­1­78439­179­9 (анг.)
Copyright © 2015 Packt Publishing
ISBN 978­5­97060­331­4 (рус.)
© Оформление, перевод,  

ДМК Пресс, 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 «Поиск людей и именованных объектов» посвящена тому, 
что в широком смысле обычно обозначают термином «распознавание 
и идентификация именованных объектов» (named­entity 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

 
Так оформляются предупреждения или важные примечания.

 
Так оформляются советы и рекомендации.

К покупке доступен более свежий выпуск Перейти