УДК 004.02 Л.В. Барканова L.V. Barkanova ОБРАБОТКА КОРПУСА ТЕКСТОВ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ ПРИ РЕШЕНИИ ЗАДАЧИ ОПРЕДЕЛЕНИЯ ЯЗЫКА ДОКУМЕНТА NATURAL LANGUAGE CORPUS PROCESSING FOR IDENTIFICATION OF THE LANGUAGE OF DOCUMENT В статье рассмотрена проблема подготовки корпуса текстов на естественном языке для решения задачи автоматического определения языка документа. Данная задача, как правило, решается статистическими методами, требующими неаннотированного корпуса. В силу того, что большинство корпусов на сегодняшний день доступны только в размеченном виде, в статье рассмотрены возможные варианты лингвистической разметки корпусов, а также способы её снятия. Показана целесообразность использования языка регулярных выражений. Ключевые слова: аннотированный корпус текстов; лингвистическая разметка текста; снятие лингвистической разметки; язык регулярных выражений. This article considers the problem of processing of the corpus in natural language to solve the task of automatic identification of the language of the text. This issue is usually solved with the statistic methods that require non-annotated corpus. As most of corpora are annotated today, the types of linguistic markup and the possibility of their removal are described. The expediency of using regular expressions is shown as well. Keywords: annotated corpus; linguistic tagging; removing the linguistic markup from the text; regular expressions. Работа с корпусами, то есть наборами текстов на естественном языке, представленными в электронном виде, представляет собой один из основных методов лингвистического исследования. Существует большое разнообразие корпусов, позволяющие решать различные задачи, например, использоваться для подсчёта частот встречаемости различных языковых элементов, а также других, более широких задач в области лексикографии и семантики. На корпусе тестируются системы автоматической обработки текста и проверяются различные лингвистические теории [1]. Решение большинства вышеописанных задач требует использования размеченного корпуса текстов. Лингвистическая разметка подразумевает присвоение каждому слову, встречаемому в тексте, особого кода, или тега (от англ. tag – ярлык, метка). Каждому тегу соответствует определённый набор грамматических признаков, характеризующих данное слово. На сегодняшний день не существует единого общепризнанного стандарта представления лингвистической и других видов информации в тексте. Однако не смотря на это, в большом количестве корпусов текстов используются стандартизированные средства разметки, разработанные международным консорциумом Text Encoding Initiative (TEI) [2], в котором для разметки применяется уже общепризнанный международный язык разметки документов XML (eXtensible Markup Language) [3]. Среди попыток стандартизировать лингвистическую разметку можно выделить также рекомендации EAGLES (Expert Advisory Group on Language Engineering Standards) [4], стандарты CES (Corpus Encoding Standard) [5] и XCES (Corpus Encoding Standard for XML) [6], стандарт CDIF (Corpus Document Interchange Format) [7] и проект ISLE (International Standards for Language Engineering) [8]. Все типы разметки, которые может содержать корпус, можно условно разделить на лингвистические, структурные (глава, абзац, предложение, словоформа) и экстралингвистические (информация об авторе и сведения о тексте: автор, название, год издания и т. д.). Лингвистическая разметка может быть морфологической, синтаксической, семантической, анафорической, просодической и др. Морфологическая разметка включает лемму, признак части речи и признаки грамматических категорий (напр., род, число, падеж и т. д.). Пример морфологической разметки в Брауновском корпусе английского языка: the_AT jury_NN further_RB said_VBD in_IN term- end_NN presentments_NNS that_CS the_AT *city_NP *executive_NP *committee_NP ,_, which_WDT had_HVD over-all_JJ charge_NN of_IN the_AT election_NN ,_, deserves_VBZ the_AT praise_NN and_CC thanks_NNS of_IN the_AT *city_NP *of_NP *atlanta_NP for_IN the_AT manner_NN in_IN which_WDT the_AT election_NN was_BEDZ conducted_VBN Для текстов, представленных в формате XML, морфологическая разметка выглядит следующим образом: <?xml version="1.0" encoding="windows-1251" ?> <text> <p> <s><w>Звонили<ana lemma="ЗВОНИТЬ" pos="Г" gram="мн,нс,нп,дст,прш," /></w> <w>к<ana lemma="К" pos="ПРЕДЛ" gram="" /></w> <w>вечерне <ana lemma="ВЕЧЕРНЯ" pos="С" gram="жр,ед,дт,пр,но," /> <ana lemma="ВЕЧЕРНИЙ" pos="П" gram="ср,ед,кр," /></w> <pun>.</pun> </s> <s><w>Торжественный<ana lemma="ТОРЖЕСТВЕННЫЙ" pos="П" gram="мр,ед,им,вн," /></w> <w>гул<ana lemma="ГУЛ" pos="С" gram="мр,ед,им,вн,но," /></w> <w>колоколов <ana lemma="КОЛОКОЛ" pos="С" gram="мр,мн,рд,но," /> <ana lemma="КОЛОКОЛОВ" pos="С" gram="мр,фам,ед,им,од," /></w> <pun>.</pun> </s></p></text> Синтаксическая разметка описывает синтаксические связи между лексическими единицами и различные синтаксические конструкции. Способы представления синтаксической структуры не так унифицированы, как способы разметки морфологии — она может быть представлена с помощью грамматики зависимостей, грамматики непосредственно составляющих, грамматики структурных схем, традиционных синтаксических учений о членах предложения, функциональной грамматики и др. [9]. Для задания синтаксических отношений имеются в TEI используются следующие теги: <cl> для кодирования сложносочинённых и подчинённых предложений, имеет два атрибута type, задающий синтаксические признаки клаузы, и function, задающий её функцию; тег <phr> — группа, аналогично атрибут type задаёт её тип (именная, предложная и др.), и function задаёт её функцию. Для отображения синтаксических зависимостей лексических единиц в TEI предусмотрены специальные теги, например, <depc>, который имеет атрибуты function и target, последний ссылается на идентификатор зависимого слова в предложении. Пример морфосинтаксической разметки текста в TEI: <p> <cl type='finite declarative' function='independent'> <phr type='NP' function='subject'> Nineteen fifty-four, <cl type='finite relative declarative' function='appositive'> when <phr type='NP' function='subject'>I</phr> <phr type='VP' function='predicate'> was eighteen years old </phr> </cl>, </phr>... Семантическая разметка предусматривает спецификацию значения слов, снятию неоднозначностей, категоризацию слов и т. д. Теги семантической разметки чаще всего обозначают семантические категории, к которым относится словоформа, и более узкие подкатегории, уточняющие её значение: разряд, лексико-семантические и деривационные характеристики. [9]. Пример семантически размеченного предложения в НКРЯ: При{при=ПРЕД} мощном{мощный=П=ср,ед,пр} сложении{сложение=С,ср,но=ед,пр}, крупной {крупный=П=жр,ед,пр} голове {голова=С,жр,но=ед,пр}, крупных {крупный=П=мн,пр} чертах{черта=С,жр,но=мн,пр [Ex="Провести черту." R="непр" Cl="форма" | Ex="Пограничная ч." R="непр" C3="характеристика" Ap="оценка:max" | Ex="Черты характера." R="непр" C3="характеристика" | Ex="Пограничная ч" R="предм" Cl="пр&м" ]} лица{лицо=С,ср,но=ед,рд} он{он=М-С,мр,ед,3 л=им}, когда{когда=СОЮЗ} сидел{сидеть=Г,нс,нп,дст=мр,ед,прш}, производил{производить=Г,нс,пе=мр,ед,дст,прш [Mo="преф" | Ex="Завод производит станки." Cl="существование" Ca="каузация существования" Mo="преф" | Ex="П. свое имя от древнего рода." Mo="преф" ]} впечатление{впечатление=С,ср,но=ед,вн [R="непр" Cl="восприятие" C4="возд" | R="непр" Do="ментальная сфера" ]} рослого{рослый=П=мр,ед,рд} человека{человек=С,мр,од=ед,рд}. Для решения задач в области автоматической обработки текста в подавляющем большинстве требуется аннотированный корпус. Однако, лингвистическая информация не всегда необходима. В частности, для задачи определения языка текстового документа эта информация будет лишь усложнять процесс идентификации. Определение языка может осуществляться разными способами: словарными методами, методами на основе поиска характеристичных буквенных сочетаний, но чаще всего используются N-граммные методы. Статистические методы, основанные на подсчёте N-грамм, подразумевают выделение Nграмм (последовательностей из N символов) и обработку полученных статистик. Понятно, что в данной ситуации наличие в тексте посторонней информации сильно повлияет на полученные статистики и язык документа может быть определён некорректно. Например, если исходный текст представлен на языке, отличном от английского, а разметка, как правило, представляет собой теги с английскими именами и ключевыми словами, Nграммные методы не дадут однозначного ответа. Также сами символы, используемые для разметки текста, сильно влияют на статистики. Набор частотных статистик по языку требует неаннотированного корпуса. Разработчику программного обеспечения, определяющего язык документа, собрать самому такой корпус затруднительно — полученный корпус не будет обладать достаточной репрезентативностью. Поэтому необходимо за основу брать уже имеющиеся корпуса текстов на заданном языке. Для русского языка, например, можно использовать Национальный Корпус Русского Языка (НКРЯ) [10] или его подмножество OpenCorpora [11], для английского — Британский Национальный Корпус (BNC, British National Corpus) [12], Брауновский корпус английского языка (Brown University Corpus) [13], для немецкого — корпус Института немецкого языка в Маннгейме [14] и т.д. Большинство таких корпусов уже имеют морфологическую и синтаксическую разметку. Таким образом, стоит задача преобразования текста из аннотированного в неаннотированный. Программных продуктов, решающих эту задачу в автоматическом режиме, не существует в силу отсутствия единого стандарта разметки, поэтому разработчику приходится выполнять обработку вручную. Одним из наиболее мощных средств обработки больших массивов текстовой информации является использование языка регулярных выражений. Их использование приводит к большей экономичности с точки зрения временных и трудозатрат в сравнении с обработкой «в лоб». Истоки регулярных выражений лежат в теории автоматов У. МакКаллока и У. Питтса, теории формальных языков и классификации формальных грамматик Н. Хомского [15, 16]. Сам термин «регулярное выражение» был введён американским логиком и математиком С. Клини [17]. Важный вклад в популярность регулярных выражений внёс также американский программист К. Томпсон, создавший специальный алгоритм поиска текстовых фрагментов по регулярным выражениям, в настоящее время известный как «построение Томпсона» [18]. Широкое распространение разработанной поисковой технологии обусловило тот факт, что регулярные выражения в современной компьютерной науке и прикладной лингвистике стали стандартом описания шаблона поиска текстовой информации. Таким образом, регулярные выражения представляют собой поисковые шаблоны, основанные на описании общего вида некоторого текстового сегмента с применением символов и метасимволов и применяемые для поиска текстовой информации по заданным формальным критериям определения взаимного расположения текстовых блоков и входящих в них элементов (лексем, словосочетаний, пунктуационных знаков и т. п.) и осуществления различного рода операций с найденными фрагментами текста [19]. Знание синтаксиса тегов, применённых при аннотировании корпуса, позволяет применять для обработки текста регулярные выражения. В качестве примера рассмотрим размеченный корпус английского языка Brown University Corpus (TEI XML Version). В данном корпусе разметка содержит 82 тега, которые можно разделить на 6 типов: части речи, служебные слова, определённые важные отдельные слова (not, there, to, некоторые формы глаголов do, be, have и др.), знаки пунктуации, инфлективные морфемы и специальные теги FM и NC, указывающие на то, что слово является заимствованным или цитируемым. Структурная разметка осуществляется с использованием следующих тегов-контейнеров: абзац (<p>:</p>), предложение (<s>:</s>), слово (<w>:<w>) и знаки пунктуации (<c>:</c>). Полный список тегов приведён в руководстве к корпусу, расположенном по адресу [13]. Так, предложение в аннотированном Брауновском корпусе будет выглядеть следующим образом: <s n="4"><w type="AT">The</w> <w type="NN">resentment</w> <w type="IN">among</w> <w type="JJ" subtype="TL">Democratic</w> <w type="NN">organization</w> <w type="NNS">leaders</w> <w type="IN">to</w> <w type="AT">the</w> <w type="VBN">reported</w> <w type="NP">Wagner</w> <w type="NN">plan</w> <w type="BEDZ">was</w> <w type="VBN">directed</w> <w type="RB">particularly</w> <w type="IN">at</w> <w type="AT">the</w> <w type="NNg" subtype="TL">Mayor's</w> <w type="NNS">efforts</w> <w type="TO">to</w> <w type="VB">name</w> <w type="PPg">his</w> <w type="JJ">own</w> <w type="VBG">running</w> <w type="NNS">mates</w> <w type="IN">without</w> <w type="VBG">consulting</w> <w type="AT">the</w> <w type="NNS">leaders</w> <c type="pct">.</c> </s> Аналогично размечены все предложения текстов корпуса. Чтобы использовать данные тексты для набора статистик N-грамм, необходимо извлечь из них непосредственно языковую информацию, проигнорировав лингвистическую разметку. Для этого будем использовать следующее регулярное выражение: <[wc][^>]*>(.*?)</[wc][^>]*>. В результате будут найдены все словоформы, соответствующие данному шаблону, а именно всё, что находится между тегами <w> и </w>, т. е. все слова, и <c> и </c>, т. е. все знаки пунктуации. Результат, полученный после применения регулярных выражений: «The resentment among Democratic organization leaders to the reported Wagner plan was directed particularly at the Mayor's efforts to name his own running mates without consulting the leaders.» Корпус русского языка OpenCorpora также представлен в формате XML, но имеет другой синтаксис лингвистической разметки: <sentence id="120"><source>Иногда у них это получается.</source><tokens><token text="Иногда" id="2682"><tfr t="Иногда" rev_id="837588"><v><l id="122703" t="иногда"><g v="ADVB"></g></l></v></tfr></token><token text="у" id="2683"><tfr t="у" rev_id="3328166"><v><l id="352818" t="у"><g v="PREP"></g></l></v></tfr></token><token text="них" id="2684"><tfr t="них" rev_id="3697695"><v><l id="206619" t="они"><g v="NPRO"></g><g v="3per"></g><g v="Anph"></g><g v="plur"></g><g v="gent"></g><g v="Af-p"></g></l></v></tfr></token><token text="это" id="2685"><tfr t="это" rev_id="3621932"><v><l id="386574" t="это"><g v="PRCL"></g></l></v><v><l id="386575" t="это"><g v="NPRO"></g><g v="neut"></g><g v="sing"></g><g v="nomn"></g></l></v><v><l id="386575" t="это"><g v="NPRO"></g><g v="neut"></g><g v="sing"></g><g v="accs"></g></l></v><v><l id="386581" t="этот"><g v="ADJF"></g><g v="Apro"></g><g v="Subx"></g><g v="Anph"></g><g v="neut"></g><g v="sing"></g><g v="nomn"></g></l></v><v><l id="386581" t="этот"><g v="ADJF"></g><g v="Apro"></g><g v="Subx"></g><g v="Anph"></g><g v="neut"></g><g v="sing"></g><g v="accs"></g></l></v></tfr></token><token text="получается" id="2686"><tfr t="получается" rev_id="837592"><v><l id="256950" t="получаюсь"><g v="VERB"></g><g v="impf"></g><g v="intr"></g><g v="sing"></g><g v="3per"></g><g v="pres"></g><g v="indc"></g></l></v></tfr></token></tokens></sentence> Чтобы снять такую разметку, составим следующее регулярное выражение: <source>(.*?)</source> В результате применения данного выражения будет извлечена исходная языковая информация: «Иногда у них это получается.» Подобным образом можно обработать любой аннотированный корпус. Для снятия лингвистической разметки любого типа достаточно составить всего одно регулярное выражение, что позволяет в автоматическом режиме осуществить преобразование всего массива текстов. Таким образом, использование регулярных выражений существенно упрощает подготовку корпуса текста для решения различных лингвистических задач, в том числе и задачи определения языка. СПИСОК ЛИТЕРАТУРЫ 1. В.П. Захаров. Изложение основной проблематики корпусной лингвистики. // CORPORA.ILIG.SPB.RU: факультет филологии и искусств СБПГУ ИЛИРАН. URL: http://corpora.iling.spb.ru/theory.htm (дата обращения: 05.05.2015) 2. TEI: Text Encoding Initiative. Дата обновления: 12.03.2013. // TEI-C.ORG. URL: http://www.tei-c.org/index.xml (дата обращения: 05.05.2015) 3. W3C Extensible Markup Language (XML). Дата обновления: 20.04.2015. URL: http://www.w3.org/XML/ (дата обращения: 05.05.2015) 4. Expert Advisory Group on Language Engineering Standsrds (EAGLES). URL: http://www.ilc.cnr.it/EAGLES/home.html (дата обращения: 05.05.2015). 5. Corpus Encoding Standard - Document CES 1. Title page. Version 1.5. (дата обновления: 20.03.2000). URL: http://www.cs.vassar.edu/CES/CES1.html (дата обращения: 05.05.2015). 6. XML Corpus Encoding Standards XCES 1.0.4. Дата обновления: 20.06.2008. URL: http://www.xces.org/ (дата обращения: 05.05.2015). 7. Lou Burnard. TGC W30: Corpus Document Interchange Format v 1.2. 1992. URL: http://www.natcorp.ox.ac.uk/archive/vault/tgcw30.pdf (дата обращения: 05.05.2015). 8. International Standard for Language Engineering (ISLE). EAGLES/ISLE Meta Data Initiative. Дата обновления: 16.06.2003. URL: http://www.mpi.nl/ISLE/ (дата обращения: 05.05.2015). 9. А.В. Луканин. Предварительная обработка и разметка корпуса. Технологии корпусной лингвистики. Лекция 4. 2014. URL: http://www.slideshare.net/alukanin/4-35642433 (дата обращения: 05.05.2015). 10. Национальный корпус русского языка (НКРЯ). Дата обновления: 17.04.2015. URL: http://www.ruscorpora.ru/ (дата обращения: 05.05.2015). 11. Проект «Открытый корпус» («OpenCorpora») русского языка. URL: http://opencorpora.org/ (дата обращения: 05.05.2015). 12. British National Corpus (BNC). URL: http://www.natcorp.ox.ac.uk/ (дата обращения: 05.05.2015). 13. W. N. Francis, H. Kucera. Brown. Corpus Manual. Brown University. 1979. URL: http://clu.uni.no/icame/manuals/BROWN/INDEX.HTM (дата обращения: 05.05.2015). 14. Корпус Института немецкого языка в Маннгейме //IDS-MANNHEIM.DE: Institut für Deutsche Sprache. URL: http://www.ids-mannheim.de/kl/ (дата обращения: 05.05.2015). 15. Chomsky N. Syntactic structures. The Hague: Mouton & Co., 1957, 116 P. 16. McCulloch W.S., Pitts W. A Logical Calculus of the Ideas Immanent in Nervous Activity // Bulletin of Mathematical Biophysics / еd. by D.A. Norman. – Chicago: University of Chicago Press, 1943. – P. 115 – 133. 17. Клини С. Представление событий в нервных сетях и конечных автоматах // Автоматы. – М.: Изд-во иностр. лит., 1956. – С. 17 – 27. 18. Thompson K. Programming Techniques: Regular Expression Search Algorithm // Communications of the ACM / еd. by R.M. McClure. – New York, NY: Association for Computing Machinery, 1968. – P. 419 – 422. 19. Каменский М.В. Автоматизированный анализ корпуса текстов как методологическая основа построения и верификации когнитивно-функциональной модели дискурсных маркеров // Вестник Ленинградского государственного университета имени А.С. Пушкина. – 2013. – № 4. – С. 200 – 207. Барканова Лидия Владимировна Балтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова, г. СанктПетербург Магистрант кафедры «Систем управления и компьютерных технологий» Тел.: +7(911)901-55-55 E-mail: lida.barkanova@gmail.com