JavaScript:Библиотеки/rita.js

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



RiTa[1]

Эта библиотека разработана для экспериментов в области так называемой «цифровой литературы». Она дает писателям, поэтам, другим профессионалам и просто любителям инструменты для работы с естественным языком при помощи программных средств. Библиотека RiTa разработана с упором на простоту, но в то же время оснащена большим количеством мощных функций – от создания грамматических правил и анализа текста при помощи цепей Маркова до анализа признаков (частей речи, фонем, ударений и т.д.). Все функции библиотеки RiTa эвристические и не требуют обучающих данных, благодаря чему она довольно компактна. Кроме того, эту библиотеку можно использовать с ее собственным лексиконом (который пользователь может настраивать сам) или с базой данных WordNet.

Библиотека RiTa – это бесплатная библиотека с открытым кодом, реализованная на Java и JavaScript. Ею можно пользоваться во множестве популярных сред разработки, включая IDE для Android, Processing, Node и p5.js.

Возможности

  • Генерация текста при помощи бесконтекстной грамматики и цепей Маркова
  • Модули для токенизации (лексемизации), спряжения глаголов, образования форм множественного числа и стемминга
  • Лексикон, который пользователь может настраивать сам, с функцией генерирования фонем из письменного формата в фонетический
  • Разметчики для слогов, фонем, ударений, частей речи и т.д.
  • Можно запустить в браузере или вне его, а также в Processing или вне его. Кроме того, доступна для Android
  • Опционально можно интегрировать со словарем WordNet (устанавливается локально)

Краткое описание классов и их функций

RiTa

Это класс, включающий в себя набор (статических) функций для библиотеки RiTa.

Примечание: Начиная с v1.2 доступ к функциям класса RiLexicon должен осуществляться через класс RiTa.

Примеры использования функций класса RiTa:

theVersion = RiTa.VERSION;
// результатом функции ниже будет «The,cat,ate,stinky,cheese»:
tokens = RiTa.tokenize("The cat ate stinky cheese."); 
// результатом функции ниже будет «chapel,grapple»:
rhymes = RiTa.rhymes("apple");
  • RiTa.VERSION – текущая версия библиотеки RiTa
  • RiTa.addWord() – добавляет слово в текущий лексикон. Если такое слово уже есть, заменяет его
  • RiTa.addalliterations() – находит аллитерации, сравнивая фонемы заданной строки с фонемами в каждом слове лексикона
  • RiTa.concordance() – создает конкорданцию (список слов по частоте их появления) из заданного текста. Также есть несколько опциональных параметров для настройки поиска
  • RiTa.conjugate() – спрягает глагол согласно заданным правилам
  • RiTa.containsWord() – возвращает «true», если заданное слово есть в лексиконе (чувствительна к регистру)
  • RiTa.env() – возвращает константу, соответствующую используемой в данный момент среде выполнения (RiTa.JAVA, RiTa.JS, RiTa.ANDROID, RiTa.NODE)
  • RiTa.getPastParticiple() – возвращает причастие в прошедшем времени для заданного глагола, у которого была или не была определена основа
  • RiTa.getPhonemes() – возвращает строку со всеми фонемами заданного текста
  • RiTa.getPosTags() – размечает части речи в заданном тексте при помощи разметчика по умолчанию (PosTagger), набора PENN или упрощенного набора WordNet (a, r, v, n)
  • RiTa.getPosTagsInline() – размечает части речи в заданном тексте при помощи тегов (в нижнем регистре) из набора PENN. Результат возвращает в виде одной строки примерно такого типа: «The/dt doctor/nn treated/vbd dogs/nns»
  • RiTa.getPresentParticiple() – возвращает причастие настоящего времени для заданного глагола, у которого была или не была определена основа
  • RiTa.getStresses() – анализирует заданный текст и возвращает новую строку с ударениями для каждого слога в нем
  • RiTa.getSyllables() – анализирует заданный текст и возвращает строку, содержащую фонемы для каждого слога каждого слова в этом тексте. В получившемся тексте фонемы будут разделены символами тире, а слова – пробелами
  • RiTa.isAbbreviation() – возвращает «true», если заданное слово является аббревиатурой
  • RiTa.isAdjective() – возвращает «true», если заданное слово является прилагательным. Другими словами, эта функция определяет, является ли заданное слово, согласно набору тегов для частей речи PENN, каким-либо типом прилагательного (jj, jjr, jjs)
  • RiTa.isAdverb() – возвращает «true», если заданное слово является наречием. Другими словами, эта функция определяет, является ли заданное слово, согласно набору тегов для частей речи PENN, каким-либо типом наречия (rb, rbr, rbs)
  • RiTa.isAlliteration() – возвращает «true», если два заданных слова приходятся аллитерациями друг другу. Другими словами, эта функция определяет, есть ли у двух заданных слов в первом слоге одинаковые и однородные ударные согласные. Также возвращает «true», если это одинаковые слова, и «false», если оба слова (или хотя бы одно из них) – это значения «null»
  • RiTa.isNoun() – возвращает «true», если заданное слово является существительным. Другими словами, эта функция определяет, является ли заданное слово, согласно набору тегов для частей речи PENN, каким-либо типом существительного (nn, nns, nnp, nnps)
  • RiTa.isPunctuation() – возвращает «true», если все символы в заданном тексте являются знаками препинания
  • RiTa.isQuestion() – возвращает «true», если предложение начинается с вопросительного слова
  • RiTa.isRhyme() – возвращает «true», если два заданных слова рифмуются друг с другом, т.е. если их последние гласные фонемы и все последующие фонемы одинаковы. В противном случае возвращает «false». Кроме того, возвращает «false», если это одинаковые слова или если оба слова (или только одно из них) – это значения «null»
  • RiTa.isVerb() – возвращает «true», если заданное слово является глаголом. Другими словами, эта функция определяет, является ли заданное слово, согласно набору тегов для частей речи PENN, каким-либо типом глагола (vb, vbg, vbd, vbp, vbz)
  • RiTa.isW_Question() – возвращает «true», если предложение начинается с вопросительного слова на букву «w» (например, who, what, why, where, when и т.д.)
  • RiTa.kwic() – создает KWIC-модель («key word in context», т.е. «ключевое слово в контексте») на основе заданных текста и искомого слова. В параметрах также можно задать, нужно ли использовать счетчик слов, игнорировать ли знаки препинания и т.д.
  • RiTa.lexicalData() – задает/считывает необработанные словарные данные, используемые для создания лексикона по умолчанию
  • RiTa.minEditDistance() – в качестве параметров принимает две строки (или два массива строк) и возвращает минимальное редакционное расстояние между ними (т.е. минимальное количество дополнений, изъятий или модификаций, необходимых для того, чтобы превратить одну строку в другую)
  • RiTa.pluralize() – создает форму множественного числа для заданного существительного (согласно правилам образования множественного числа)
  • RiTa.randomItem() – возвращает случайный элемент из массива (или коллекции)
  • RiTa.randomOrdering() – возвращает массив уникальных целых чисел в диапазоне от «0» до значения в параметре «numElements», расположенных в случайном порядке. Размер массива будет равняться значению в параметре «numElements»
  • RiTa.randomWord() – возвращает случайное слово из лексикона. В параметрах можно задать, какая именно часть речи вам нужна и сколько у нее будет слогов
  • RiTa.rhymes() – возвращает список рифм для слова. Два слова считаются рифмами друг другу, если у них одинаковы последние гласные и последующие фонемы
  • RiTa.similarByLetter() – сравнивает символы заданного слова (при помощи версии алгоритма минимального редакционного расстояния) с каждым словом в лексиконе и возвращает наиболее близкие соответствия
  • RiTa.similarBySound() – сравнивает фонемы заданного слова (при помощи версии алгоритма минимального редакционного расстояния) с каждым словом в лексиконе и возвращает наиболее близкие соответствия
  • RiTa.similarBySoundAndLetter() – сначала вызывает функцию similarBySound(), а затем фильтрует результат при помощи алгоритма, используемого в функции similarByLetter(). Пригодится, если функция similarBySound() вернула слишком много слов
  • RiTa.singularize() – образует для слова форму единственного числа (согласно правилам образования единственного числа)
  • RiTa.splitSentences() – разбивает заданный текст на предложения (согласно правилам банка синтаксических деревьев PENN)
  • RiTa.stem() – извлекает основу слова (согласно заданному алгоритму извлечения основы). О разнице между алгоритмами Ланкастера и Портера читайте тут. Об алгоритме Плинга читайте тут
  • RiTa.stripPunctuation() – удаляет все знаки препинания из заданной строки
  • RiTa.substrings() – возвращает из лексикона все подходящие субстроки для заданного слова, т.е. слова, являющиеся составным элементом заданного слова (например, слова «жор» и «ивы» являются субстроками для слова «прожорливый»)
  • RiTa.superstrings() – возвращает из лексикона все подходящие суперстроки для заданного слова, т.е. слова, для которого заданное слово является составным элементом (например, слово «прожорливый» является суперстрокой для слов «жор» и «ивы»)
  • RiTa.tokenize() – токенизация (лексемизация) заданной строки (т.е. ее разбор на слова) согласно правилам банка синтаксических деревьев PENN. Подробнее читайте тут.
  • RiTa.trimPunctuation() – удаляет знаки препинания с обоих концов заданной строки. Не удаляет пробелы и знаки препинания, находящиеся внутри строки
  • RiTa.untokenize() – объединяет массив (слов и знаков препинания) в строку согласно правилам банка синтаксических деревьев PENN. Подробнее читайте тут

RiGrammar

Это класс для работы с вероятностными бесконтекстными грамматическими правилами, используемыми для генерирования текста.

Примеры:

rg = new RiGrammar(stringOrObject);
result = rg.expand();

Грамматические правила RiTa представляют собой строки (или объекты со строками) в формате JSON или YMAL (под «терм_символ» имеется в виду «терминальный символ»):

{
  "<start>": [ "<правило1>", "<правило2>", "<правило3>" ],

  "<правило2>": [ "терм_символ1", " терм_символ2", "<правило1>" ],
  ...
}

Кроме того, в YAML их можно задать вот так (в этом формате кавычки, как правило, не нужны):

<start>: [ <правило1>, <правило2>, <правило3> ]

<правило2>: [ терм_символ1, терм_символ2, <правило1> ]
...

Вот еще один вариант в виде YAML-строк:

<start>:
  - <правило1>
  - <текст_из_нескольких_строк>

<правило1>:
  - терм_символ1
  - терм_символ2

<текст_из_нескольких_строк>: >
  Это одна
  длинная строка
  состоящая из трех строк
...

YAML – это удобное для восприятия человеком супермножество формата JSON, и оно, как правило, более удобно, если вы пишите грамматические правила в виде строк (String). Таким образом, если вы работаете в JavaScript, то можете без труда заменить объект YAML на объект JavaScript/JSON. Если вы не уверены, соответствуют ли ваши грамматические правила стандартам YMAL и JSON, это можно проверить на сайтах yamllint.com или jsonlint.com.

Часто используемые методы:

  • Метод expand() – берет грамматическое правило и с его помощью генерирует текст, состоящий из терминальных элементов. Применение правил начинается с символа <start>.
  • Метод expandFrom(String) – делает то же самое, что и expand(), но применяет правила не с символа <start>, а с заданного символа. В параметре String задается строка, которая может состоять из терминальных и нетерминальных элементов. По сути, expand() – это более лаконичная версия expandFrom("<start>").

По умолчанию объект RiGrammar присваивает одинаковые веса всем вариантам в правиле. Но эти веса можно отредактировать – например, так (в правиле ниже «терм_символ1» будет выбираться в два раза чаще, чем «терм_символ2»):

<правило2>: терм_символ1 [2] | термм_символ2 | <правило1>

Объект RiGrammar поддерживает функции обратного вызова, которые позволяют перейти из грамматического правила обратно в код. Для этого просто добавьте в грамматическое правило нужную функцию, окруженную обратными кавычками. Например, так:

<правило2>:
  - The cat ran after the `randomNoun()`
  - The cat ran after the `pluralize('cat')`
  - The <noun> ran after the `pluralize(<noun>)`

После этого вызовите expand(callee), где «callee» – это (опциональный) объект, на котором будет вызвана функция обратного вызова. Если этого объекта задано не будет (например, в JavaScript), тогда функция обратного вызова будет вызвана в текущем масштабе.

В функции обратного вызова можно задать любое количество параметров, но у объекта «callee», заданного в expand(), должен быть соответствующий метод, способный этими параметрами воспользоваться.

function pluralize(theString) {
   ...
}

Примечание: В Node.js этот механизм еще не реализован (см. Issue #71).

  • addRule() – добавляет новое правило в заданный набор грамматических правил, заменяя им любое уже существующее правило с тем же названием
  • expand() – применяет заданный набор грамматических правил, начиная с символа '<start>'. Если в нем нет символа '<start>', воспользуйтесь вместо expand() функцией expandFrom(), чтобы начать с нужного вам правила
  • expandFrom() – применяет заданный набор грамматических правил, начиная с заданного символа. Вызов expand() эквивалентен вызову expandFrom('<start>')
  • expandWith() – заменяет в правиле один нетерминальный символ на другой и применяет отредактированный набор грамматических правил. Таким образом, эта функция дает позволяет получить новый результат с использованием нового нетерминального символа (с условием, что в грамматическом правиле есть хотя бы один символ)
  • getGrammar() – считывает текущий набор грамматических правил в виде String
  • hasRule() – возвращает «true», если заданное правило есть в наборе грамматических правил (в противном случае возвращает «false»)
  • load() – загружает набор грамматических правил из строки (String) или объекта YAML/JSON
  • loadFrom() – загружает набор грамматических правил из файла или URL-ссылки
  • print() – печатает набор грамматических правил в консоли в удобочитаемом формате (полезно при отладке)
  • ready() – возвращает «true», если в наборе грамматических правил есть хотя бы одно правило, которым можно воспользоваться. В противном случае возвращает «false»
  • removeRule() – удаляет заданное правило из набора грамматических правил
  • reset() – удаляет все правила из текущего набора грамматических правил

RiMarkov

Этот класс позволяет генерировать текст при помощи цепей Маркова (N-грамм) с возможностью обрабатывать отдельные символы, слова, предложения или произвольные регулярные выражения.

Класс RiMarkov оснащен набором методов, специально предназначенных для генерирования текста.

  • generateSentence() – генерирует одно предложение на основе модели
  • generateSentences() – генерирует одно или несколько предложений на основе модели. Если вы решите создать при помощи этого метода несколько предложений, но каждое новое предложение будет создаваться с учетом переходных вероятностей, использованных при создании предыдущего предложения (в пределах границ одного предложения). Соответственно, следующие друг за другом предложения эквивалентны друг другу не будут. В коде ниже этот вариант показан первым – он показывает, как создать 10 таких непохожих друг на друга предложений. Вторым показан вариант, создающий 10 предложений, не имеющих друг к другу никакого отношения.
// первый вариант (с неэквивалентными предложениями):
results = markov.generateSentences(10);

// второй вариант (с эквивалентными предложениями):
for (int i = 0; i < 10; i++)
 results[i] = markov.generateSentence(1);
  • generateTokens() – генерирует на основе модели строку с заданным количеством лексем
  • generateUntil() – генерирует лексемы до тех пор, пока не достигнет лексемы, заданной в параметре «regex». Необходимо, чтобы размер массива, в который будут сохраняться сгенерированные токены, был в пределах между значениями «minLength» и «maxLength» (включительно)
  • getCompletions() – если параметром задан только один массив, эта функция возвращает список всех возможных слов (или лексем) этого массива, расставленных согласно их переходным вероятностям. Если задать в этой функции два массива, она вернет неупорядоченный список всех возможных слов (лексем) «w», которые, согласно текущей модели, можно вставить между этими массивами и тем самым «доукомплектовать» N-грамму.

Для корректной работы этой функции необходимо, чтобы суммарная длина первого и второго массивов была меньше, чем количество элементов в модели (в противном случае выскочит ошибка). Ниже показан пример использования getCompletions() с двумя массивами лексем для модели, количество элементов в которой более 3. Она вернет список слов, которые, согласно модели, можно вставить между фрагментами 'the' и 'red ball' (например, 'round', 'big', 'bouncy' и т.д.).

result = rm.getCompletions([ "the" ], [ "red", "ball" ]);
  • getProbabilities() – возвращает ассоциативный массив, содержащий все лексемы заданного массива (или одной заданной лексемы) и переходные вероятности для них (для нее). Исходный массив может быть любого размера (но количество элементов в них должно быть больше 0), но эта функция обработает только его последние n-1 (т.е. если из размера массива вычесть «1») элемента.
  • getProbability() – если в параметре задана одна лексема из модели, эта функция возвращает ее переходную вероятность (не зависящую от предыдущих лексем) или «0», если такой лексемы нет. Если в параметре задан массив лексем, то возвращает переходные вероятности для «k» лексем (значение «k» должно быть равно или меньше количества элементов в модели). К примеру, если количество элементов в модели равно «3», то корректным размером для массива будет «1», «2» или «3».
  • loadFrom() – загружает в объект необработанный текст из одного или нескольких файлов/URL
  • loadText() – выполняет токенизацию (лексемизацию) текстовой строки, а затем загружает ее в модель
  • loadTokens() – загружает в модель массив токенов (слов); чтобы модель построилась корректно, каждый элемент массива должен быть одним токеном
  • print() – печатает отформатированную версию модели в консоли
  • ready() – возвращает «true», если есть по крайней мере одно правило, которое можно использовать; в противном случае возвращает «false»
  • size() – возвращает количество токенов, имеющихся в данный момент в модели

RiWordNet (только для Java)

Этот класс обеспечивает доступ к онтологическому ресурсу WordNet. Обратите внимание, что файлы WordNet в установочный комплект RiTa уже не входят, поэтому вам нужно будет загрузить их самостоятельно. Версию для своей платформы ищите здесь (рекомендуем версию 3.x). Ниже – примеры путей для установки на разных платформах (Linux/Unix/OSX):

   /path/to/WordNet3.1 
   /path/to/WordNet3.1/dict/
   /path/to/WordNet3.1/dict/data.noun

Более подробно о различных концептах WordNet – синсете (synset), значении (sense), гиперониме (hypernym) и т.д. – читайте на этой странице. Создание объекта RiWordNet осуществляется следующим образом:

RiWordNet wordnet = new RiWordNet("/path/to/WordNet3.1");

Или, если речь о Windows:

RiWordNet wordnet = new RiWordNet("c:\\path\\to\\WordNet3.0");

Как правило, в классе RiWordNet есть по три метода для каждого типа отношений между словами. Вот эти три метода для гипонимов:

getHyponyms(int id);
getHyponyms(String word, String pos)
getAllHyponyms(String word, String pos)

Первый метод возвращает гипонимы для заданного значения (оно указывается по уникальному ID), второй – гипонимы для самого распространенного значения заданного слова, а третий – гипонимы для всех значений заданного слова (для его указания также используется часть речи).

Вы также можете вернуть все дерево гипонимов (вплоть до «листьев») для необходимого значения какого-либо слова.

Примечание: В WordNet слова принадлежат к 4 частям речи: существительным (n), глаголам (v), прилагательным (adj) и наречиям (r).

Их можно задавать либо с помощью букв (например, "n"), либо при помощи вот этих констант:

    RiWordNet.NOUN
    RiWordNet.VERB
    RiWordNet.ADJ
    RiWordNet.ADV

Примечание: Если запрошенного термина или данных по запрошенному типу отношений между словами найдено не будет, то методы, возвращающие String[], вернут не «null» (как было в начальной версии библиотеки), а массив с размером «0».

Примечание: Методы, возвращающие String[], возвращают результаты в случайном порядке. Чтобы отключить это, вызовите функцию wordnet.randomizeResults(false). О лицензии читайте во вложенной документации (в пакете «rita.wordnet»).

  • RiWordNet.ADJ – строковая (String) константа для части речи «прилагательное»
  • RiWordNet.ADV – строковая (String) константа для части речи «наречие»
  • RiWordNet.NOUN – строковая (String) константа для части речи «существительное»
  • RiWordNet.VERB – строковая (String) константа для части речи «глагол»
  • exists() – проверяет, есть ли заданное слово в онтологии. Не зависит от ignoreCompoundWords()
  • getAllAlsoSees() – возвращает для всех значений заданного слова (также нужно указать часть речи, к которой оно принадлежит) слова, относящиеся к категории «also see» (т.е. «смотрите также»). Используется для существительных (?) и прилагательных. Пример: happy (счастливый)-> [cheerful (веселый), elated (окрыленный), euphoric (эйфористический), felicitous (удачливый), joyful (радостный), joyous (довольный) ...]
  • getAllAntonyms() – возвращает массив String[] с антонимами для первого значения заданного слова (также нужно указать часть речи, к которой оно принадлежит). Используется только для прилагательных (?)
  • getAllCoordinates() – возвращает слова из категории «sister term» (т.е. «сестринские термины») для всех значений заданного слова (также нужно указать часть речи, к которой оно принадлежит). К примеру, для слова «device» (устройство) сестринскими терминами будут «equipment» (экипировка), «system» (система), «hardware» (аппаратура) и т.д.
  • getAllDerivedTerms() – возвращает деривативы для всех значений заданного слова (также нужно задать часть речи, к которой оно принадлежит), то есть все слова из категории «pertainym» (т.е. «прилагательные, как правило, имеющие отношение к заданному слову и не имеющие антонимов»). Используется для наречий. Пример: happily (счастливо) -> [jubilant (ликующий), blithe (блаженный), gay (радостный), mirthful (довольный), merry (веселый), happy (счастливый)]
  • getAllExamples() – возвращает предложения-примеры, содержащие заданное слово (также нужно указать часть речи, к которой оно принадлежит) и все его значения
  • getAllGlosses() – возвращает толкования для всех значений заданного слова (также нужно указать часть речи, к которой оно принадлежит)
  • getAllHolonyms() – возвращает холонимы для всех значений заданного слова (также нужно указать часть речи, к которой оно принадлежит) или, если ничего найдено не будет, не возвращает ничего. Если слово Y является частью слова X, то X является холонимом для Y, а Y – меронимом для X. Эта функция используется для существительных. Пример: arm (рука) -> [body (тело), physical-structure (физиологическая система), man (человек), human (человеческое существо) ...]
  • getAllHypernyms() – возвращает упорядоченный массив String[] c гипероним-синсетами (cтроки в массиве разделяются между собой точками с запятой) вплоть до корня WordNet для первого значения заданного слова (также нужно указать часть речи, к которой оно принадлежит)
  • getAllHyponyms() – возвращает неупорядоченный массив String[] c гипоним-синсетами (они отделены друг от друга точкой с запятой) для заданного слова (также нужно указать часть речи, к которой оно принадлежит).
  • getAllMeronyms() – возвращает меронимы для всех значений заданного слова (также нужно указать часть речи, к которой оно принадлежит). Если слово Y является частью слова X, то X является холонимом для Y, а Y – меронимом для X. Используется для существительных. Пример: arm (рука) -> [wrist (кисть), carpus (запястье), wrist-joint (кистевой сустав), radiocarpal-joint (лучезапястный сустав) ...]
  • getAllNominalizations() – возвращает деривативы для всех значений заданного слова (также нужно задать часть речи, к которой оно принадлежит), то есть все слова из категории «derivationally related form» (т.е. «слова из других синтаксических категорий, имеющие ту же начальную форму или семантически связанные с заданным словом»). Используется для существительных, глаголов и прилагательных (?). Пример: happiness(n) (счастье) -> [felicitous (счастливый, удачный), happy (счастливый)], happy(a) (счастливый) -> [happiness (счастье), felicity (счастье, удачливость)]
  • getAllSimilar() – возвращает прилагательные из категории «similar to» (т.е. «похоже на...») для всех значений заданного слова (также задается часть речи, к которой оно принадлежит). Используется для прилагательных. Пример: happy(a) (счастливый) -> [blessed (блаженный), blissful (райский), bright (светлый), golden (золотой), halcyon (безмятежный), prosperous (процветающий) ...]
  • getAllSynonyms() – возвращает все синонимы для заданного слова, которое задается с помощью ID или самого слова и необходимой части речи
  • getAllSynsets() – возвращает массив String[] с синсетами для всех значений заданного слова (также нужно задать часть речи, к которой оно принадлежит)
  • getAllVerbGroups() – возвращает все глагольные группы для заданного слова (т.е. все синонимы заданного глагола, а также все остальные глаголы, для которых используется это слово, и их синонимы), которое задается с помощью ID или самого слова и необходимой части речи. Пример: live (жить) -> [populate (населять), dwell (проживать), inhabit (жить), ... ]. Используется для глаголов
  • getAlsoSees() – возвращает слова категории «also see» (т.е. «смотрите также») для заданного слова (также нужно указать часть речи, к которой оно принадлежит)
  • getAnagrams() – возвращает все анаграммы (слова, образованные с помощью перестановки букв в исходном слове) для заданного слова, которое задается с помощью ID или самого слова и необходимой части речи
  • getAntonyms() – возвращает массив String[] с антонимами для заданного слова, которое задается с помощью ID или самого слова и необходимой части речи. Используется только для прилагательных (?)
  • getBestPos() – находит и возвращает часть речи, на которое приходится наибольшее количество значений для заданного слова. Если заданного слова найдено не будет, возвращает «null»
  • getCommonParent() – возвращает общий гипероним для двух заданных гипонимов. Слова задаются с помощью ID. Если общий гипероним найден не будет, функция вернет «-1»
  • getCommonParents() – возвращает массив String[] со всеми общими гиперонимами для первых значений заданных слов (также нужно задать, к какой части речи они относятся). Если этих гиперонимов найдено не будет, возвращает пустой массив. Например, общие гиперонимы имеют следующие слова: «woodpecker» (дятел) и «bulbul» (соловей), т.к оба они «bird» (птица); «rifle» (ружье) и «handgun» (пистолет), т.к. все это «firearm» (огнестрельное оружие); «fork» (вилка) и «spoon» (ложка), т.к. все это «cutlery» (столовые приборы); «man» (человек) и «dog» (собака), т.к. оба они «organism being» (живое существо)
  • getContains() – возвращает все слова, составной частью которого является заданное слово (также нужно задать часть речи, к которой оно относится). К примеру, для слова «tale» будут возвращены слова «bennettitales», «acatalectic», «attalea» и т.д.
  • getCoordinates() – возвращает массив String[] со словами из категории «sister term» (т.е. «сестринские термины») для заданного слова, которое можно задать либо с помощью ID, либо с помощью самого слова и необходимой части речи. К примеру, для слова «device» (устройство) сестринскими терминами будут «equipment» (экипировка), «system» (система), «hardware» (аппаратура) и т.д.
  • getDerivedTerms() – возвращает деривативы для заданного слова (также нужно задать часть речи, к которой оно относится), то есть все слова из категории «pertainym» (т.е. «прилагательные, как правило, имеющие отношение к заданному слову и не имеющие антонимов»). Используется для наречий. Пример: happily (счастливо) -> [jubilant (ликующий), blithe (блаженный), gay (радостный), mirthful (довольный), merry (веселый), happy (счастливый)]
  • getDistance() – возвращает минимальное семантическое расстояние между двумя значениями двух разных слов в дереве WordNet (результат будет подогнан к диапазону между значениями «0» и «1») или «1.0», если связи между ними найдено не будет. В параметрах нужно указать оба слова и часть речи, к которой они принадлежат. Алгоритм этой функции работает следующим образом: 1) при помощи поиска по каждому значению каждого слова находится нода «cp», которая является общим гиперонимом для обоих слов (если ноды «cp» найдено не будет, функция вернет «1.0»); 2) рассчитывается значение «minDistToCommonParent» – кратчайший путь от каждого слова к ноде «cp»; 3) рассчитывается значение «distFromCommonParentToRoot» – путь от ноды «cp» к корню онтологии; 4) рассчитывается и возвращается итоговое значение «normalizedDistToCommonParent» (оно будет возвращено функцией) при помощи следующей формулы: («minDistToCommonParent» / («distFromCommonParentToRoot» + «minDistToCommonParent»))
  • getEndsWith() – возвращает слова с таким же окончанием, как и у заданного слова (необходимо также задать часть речи, к которой принадлежит это слово). К примеру, если задать «table», функция вернет «stable». В опциональном параметре «maxResults» задается максимальное количество возвращаемых слов
  • getExamples() – возвращает все предложения-примеры для заданного слова, которое задается с помощью ID или самого слова и части речи, к которому оно относится
  • getGloss() – возвращает полное толкование заданного слова, которое задается с помощью ID или самого слова и необходимой части речи. Если заданного слова найдено не будет, функция вернет «null»
  • getHolonyms() – возвращает все холонимы для первого значения заданного слова (также нужно задать часть речи, к которой оно относится) или, если ничего найдено не будет, не возвращает ничего. Если слово Y является частью слова X, то X является холонимом для Y, а Y – меронимом для X. Эта функция используется для существительных. Пример: arm (рука) -> [body (тело), physical-structure (физиологическая система), man (человек), human (человеческое существо) ...]
  • getHypernyms() – возвращает массив String[] с гиперонимами для заданного слова, которое задается с помощью ID или самого слова и части речи, к которой оно принадлежит. Гипероним – более общее по отношению к другому слову понятие или, другими словами, X является гиперонимом для Y, если Y является подтипом X. Или, если животное Y – это вид, принадлежащий к роду X, то X – это гипероним для Y, а Y – гипоним для X. Например, слово «carrot» (морковь) – гипоним слова «herb» (растение), а «herb» – гипероним слова «carrot». Используется для существительных и глаголов.
  • getHypernymTree() – возвращает для заданного слова (задается с помощью ID) массив String[] с гипероним-синсетами (они будут представлены в виде строк, разделенных друг от друга двоеточиями), демонстрирующими путь от входной ноды до корня онтологии
  • getHyponymTree() – возвращает для заданного слова (задается с помощью ID) неупорядоченный массив String[] с гипоним-синсетами (они будут представлены в виде строк, разделенных друг от друга двоеточиями), демонстрирующими все пути к «листьям» онтологии (т.е. полное дерево гипонимов)
  • getMeronyms() – возвращает массив с меронимами для заданного слова, которое задается с помощью ID или самого слова и необходимой части речи. Если слово Y является частью слова X, то X является холонимом для Y, а Y – меронимом для X
  • getNominalizations() – возвращает деривативы для заданного слова, которое задается с помощью ID или самого слова и части речи, к которой оно относится. Под деривативами понимаются все слова из категории «derivationally related form» (т.е. «слова из других синтаксических категорий, имеющие ту же начальную форму или семантически связанные с заданным словом»). Используется для существительных, глаголов и прилагательных (?). Пример: happiness(n) (счастье) -> [felicitous (счастливый, удачный), happy (счастливый)], happy(a) (счастливый) -> [happiness (счастье), felicity (счастье, удачливость)]
  • getPos() – возвращает часть речи, к которой относится заданное слово. Оно задается с помощью ID или самого слова
  • getRandomExample() – возвращает случайное предложение-пример из набора предложений-примеров для всех значений заданного слова (также нужно задать часть речи, к которой оно относится) или, если ничего найдено не будет, возвращает «null»
  • getRandomExamples() – возвращает несколько предложений-примеров для случайных слов, относящихся к заданной части речи. Количество предложений-примеров, которое нужно вернуть, указывается в параметре «numExamples»
  • getRandomWord() – возвращает случайное слово, относящееся к заданной части речи. В опциональном параметре «maxChars» задается максимальное количество букв для возвращаемого слова
  • getRandomWords() – возвращает несколько случайных слов, относящихся к заданной части речи. В параметре «count» задается количество возвращаемых слов
  • getRegexMatch() – возвращает несколько слов, соответствующих заданному паттерну и относящихся к заданной части речи. В опциональном параметре «maxResults» указывается количество возвращаемых слов. К примеру, если задать «table», эта функция вернет «turntable» и «uncomfortable»
  • getSenseCount() – возвращает количество значений для заданного слова (также нужно задать часть речи, к которой оно принадлежит). Термин «значение» (sense) специфичен для WordNet и тесно связан с термином «синсет» (synset) – у каждого значения есть свой синсет
  • getSenseIds() – возвращает массив с уникальными ID, соответствующими всем значениям заданного слова (также нужно задать часть речи, к которой относится это слово)
  • getSimilar() – возвращает список слов из категории «similar to» (т.е. «похоже на...») для заданного слова, которое задается с помощью ID или самого слова и части речи, к которой оно относится. Используется для прилагательных. Пример: happy(a) (счастливый) -> [blessed (блаженный), blissful (райский), bright (светлый), golden (золотой), halcyon (безмятежный), prosperous (процветающий) ...]
  • getSoundsLike() – возвращает несколько слов, относящихся к заданной части речи и соответствующих заданному паттерну алгоритма «soundex» (он применяется для поиска слов с похожим произношением). В опциональном параметре «maxResults» задается количество возвращаемых слов
  • getStartsWith() – возвращает несколько слов, начинающихся с заданного слова и относящихся к заданной части речи. В опциональном параметре «maxResults» задается количество возвращаемых слов. К примеру, если задать «turn», то эта функция вернет «turntable»
  • getStems() – возвращает массив со всеми основами для заданного слова (также нужно задать часть речи, к которой оно относится)
  • getSynonyms() – возвращает неупорядоченный массив String[], содержащий синсет, гипонимы, а также слова из категорий «similar to» («похоже на»), «also see» («смотрите также») и «sister term» («сестринские термины») для всех значений заданного слова (также нужно задать часть речи, к которой оно относится). Все эти категории проверяются по очереди
  • getSynset() – возвращает массив String[] со словами из синсета для заданного слова, которое задается с помощью ID или 3 параметров в лице самого слова, части речи и номера значения. Если будет задан только ID, то эта функция вернет полный синсет для заданного слова. Если будут заданы слово, часть речи и номер значения, функция вернет синсет для значения с заданным номером. Если задать слово и часть речи, но не задать номер значения, функция вернет синсет для самого первого значения слова
  • getAllVerbGroups() – возвращает глагольную группу для заданного слова (т.е. все синонимы заданного глагола, а также все остальные глаголы, для которых используется это слово, и их синонимы), которое задается с помощью ID или самого слова и необходимой части речи. Пример: live (жить) -> [populate (населять), dwell (проживать), inhabit (жить), ... ]. Используется для глаголов
  • getWildcardMatch() – возвращает слова, соответствующие заданному шаблону (он задается в параметре «pattern»). В шаблоне символ «*» означает любое количество пропущенных символов, а символ «?» – только один пропущенный символ. В параметре «pos» задается то, слова какой части речи должна найти эта функция, а в параметре «maxResults» – количество возвращаемых слов. К примеру, если задать в шаблоне «t?le», функция вернет слова «tale», «tile», «tole» и т.д., если «t*le» – слова «tatumble», «turtle», «tussle» и т.д., а если «t?le*» – слова «telex», «tile», «tilefish», «tile», «talent!», «tiles» и т.д.
  • ignoreCompoundWords() – задает, будет ли RiWordNet игнорировать составные слова вроде «athletic wear» (спортивная одежда)
  • ignoreUpperCaseWords() – задает, будет ли RiWordNet игнорировать слова, в которых есть символы верхнего регистра вроде «Fungi» (гриб)
  • isAdjective() – возвращает «true», если заданное слово является прилагательным
  • isAdverb() – возвращает «true», если заданное слово является наречием
  • isIgnoringCompoundWords() – возвращает «true», если RiWordNet в данный момент игнорирует составные слова
  • isIgnoringUpperCaseWords() – возвращает «true», если RiWordNet в данный момент игнорирует слова, в которых есть символы верхнего регистра
  • isNoun() – возвращает «true», если заданное слово является существительным
  • isStem() – возвращает «true», если заданное слово (также нужно задать часть речи, к которой оно относится) эквивалентно какой-либо из основ, что проверяется при помощи функции String.equals(). В противном случае возвращает «false»
  • isVerb() – возвращает «true», если заданное слово является глаголом
  • iterator() – возвращает объект «java.util.Iterator» для всех слов, относящихся к заданной части речи
  • printHypernymTree() – печатает полное дерево гиперонимов в System.out (используется, как правило, для отладки)

RiLexicon

Базовый «словарь» (лексикон) для инструментов RiTa.

Примечание: Это устаревший класс, потому что доступ ко всем функциям класса RiLexicon теперь можно получить через класс RiTa.

Содержит около 40000 слов, в комплекте с которыми также идут данные о фонемах и слогах, а также о частях речи, к которым эти слова принадлежат. Этот лексикон можно модифицировать и/или дополнить новыми словами, способами использования и произношениями.

Кроме того, класс RiLexicon позволяет работать с различными поисковыми алгоритмами (для поиска слов по минимальному редакционному состоянию, созвучию, анаграммам, аллитерациям, рифмам, похожести и т.д.) на основе комбинаций букв, слогов, фонем и ударений.

Примечание: Если вам нужно отредактировать или дополнить лексикон (например, добавить новые слова или поменять их произношение), это можно сделать:

  • Напрямую – при помощи редактирования файла «rita_dict.js», идущего в комплекте с библиотекой
  • При помощи соответствующих функций – например, addWord() и removeWord()

Примечание: В целях повышения производительности данные ВСЕХ созданных экземпляров класса RiLexicon находятся в одном месте.

RiString

Это базовый класс для хранения текста, оснащенный несколькими функциями для анализа и генерации текста на основе заданной текстовой строки.

  • analyze() – разбирает строку в объекте RiString на различные составляющие, включая фонемы, слоги, ударения и т.д. Чтобы получить доступ к каждой из этих категорий, используйте функцию myRiString.get(название_категории)
  • charAt() – возвращает символ, находящейся на позиции в параметре «index»
  • concat() – присоединяет текст из другого объекта RiString к концу текущего объекта RiString
  • copy() – создает и возвращает копию (с учетом всех полей) текущего объекта RiString
  • endsWith() – проверяет, заканчивается ли строка в объекте RiString заданным символом (или символами)
  • equals() – сравнивает текущий объект RiString с заданным объектом RiString. Функция вернет «true», только если в параметре не будет задано «null», а в заданной строке (String) или объекте ReString находится та же последовательность символов, что и в текущем объекте
  • equalsIgnoreCase() – сравнивает текущий объект RiString с другой строкой (String) или объектом RiString, но игнорирует различия в регистре
  • features() – возвращает набор составляющих текущего объекта, включая фонемы, слоги, ударения и т.д.
  • get() – возвращает значение для заданной составляющей или «null», если его не будет найдено
  • indexOf() – возвращает позицию в строке, хранящейся в текущем объекте RiString, где впервые появляется заданный символ. В опциональном параметре «start» задается позиция, с которой нужно начать поиск заданного символа (поиск начинается с «0»)
  • insertWord() – ставит заданное слово на заданную позицию, а также на соответствующее количество позиций сдвигает все последующие части редактируемой строки
  • lastIndexOf() – возвращает позицию внутри строки, хранящейся в текущем объекте RiString, где в последний раз встречается заданный символ. В опциональном параметре «start» задается позиция, с которой нужно начать поиск (поиск начинается с позиции «0»)
  • length() – возвращает размер строки, хранящейся в текущем объекте RiString
  • match() – позволяет узнать, есть ли в строке, хранящейся в текущем объекте RiString, фрагменты, соответствующие заданному регулярному выражению, и если да, то возвращает все найденные совпадения, или, если никаких совпадений найдено не будет, возвращает пустой массив
  • pos() – возвращает массив значений, которые обозначают теги частей речи (используется набор тегов для частей речи PENN), имеющиеся в строке (по одному значению для каждого слова). Для этого используются функции RiTa.tokenize() и RiTa.getPosTags()
  • posAt() – возвращает тег части речи для слова, находящегося на заданной позиции (используется набор тегов для частей речи PENN). Для этого используются функции RiTa.tokenize() и RiTa.getPosTags()
  • removeChar() – удаляет символ, находящийся на заданной позиции
  • replaceAll() – заменяет любой фрагмент в строке, соответствующий текстовому значению из параметра «substitution», на текстовое значение из параметра «replacement»
  • replaceChar() – заменяет символ, который стоит на позиции, заданной в параметре «idx», на текстовой значение из параметра «replaceWith». Если значение в параметре «idx» меньше нуля или превышает размер текущей строки, эта функция не окажет никакого эффекта
  • replaceFirst() – заменяет только первый фрагмент в строке, соответствующий текстовому значению в параметре «substitution», на текстовое значение в параметре «replacement»
  • replaceWord() – заменяет слово, стоящее на позиции из параметра «wordIdx», на слово, заданное в параметре «newWord»
  • set() – задает новое значение для заданной составляющей текста
  • slice() – возвращает часть строки, хранящейся в текущем объекте RiString. В обязательном параметре «begin» задается позиция, с которой нужно начать считывание, а в опциональном «end» – позиция, на которой его нужно закончить
  • startsWith() – проверяет, начинается ли строка, хранящаяся в текущем объекте RiString, с заданного символа (или символов)
  • substr() – возвращает символы из строки, хранящейся в текущем объекте RiString, начиная с позиции, заданной в параметре «start». В параметре «length» задается количество символов, которые нужно прочитать
  • substring() – возвращает символы из строки, хранящиеся в текущем объекте RiString, начиная с позиции в параметре «from» и заканчивая позицией в параметре «to»
  • text() – возвращает текст, хранящийся в текущем объекте RiString, или задает его. Чтобы вернуть текст, никаких параметров задавать не нужно, а чтобы задать, впишите нужный текст в параметре «theText»
  • toLowerCase() – делает все символы, находящиеся в текущем объекте RiString, символами нижнего регистра
  • toUpperCase() – делает все символы, находящиеся в текущем объекте RiString, символами верхнего регистра
  • trim() – удаляет разделительные символы в начале и конце строки, хранящейся в текущем объекте RiString
  • wordAt() – при помощи функции RiTa.tokenize() возвращает слово, находящееся на позиции в параметре «index»
  • words() – при помощи функции RiTa.tokenize() возвращает массив со словами, хранящимися в текущем объекте RiString

См.также

Внешние ссылки