Skip to content
goalkick edited this page Oct 24, 2015 · 4 revisions

Генерация корпуса

Генерация текстового корпуса

Участвующие скрипты: parser.py, ourwikicorpus.py, ourutils.py

Основной скрипт: pareser.py

Input: ссылка на архив с дампом википедии(.../enwiki-XXXXXXX-pages-articles.xml.bz) и число статей на одну букву алфавита (цифру).

Output: каталог pioNER_Wiki_Articles в рабочей директории, содержащий 37 папок (для каждой буквы, цифры и different - для статей, названия которых начинаются не с англ. буквы и не цифры)

В ветке Development есть файл Enteties.txt, который содержит сущности DbPedia, которые мы хотим выделять в статьях. Также для работы необходима папка NewWikiEntities, которая содержит несколько файлов - для каждой сущности свой файл, при этом они должны называться Wiki*, то есть начинаться со слова Wiki, а дальше название сущности. Я также залил необходимые файлы в git, так что можно просто использовать их и не думать об этом.

Теперь про некоторые файлы:

  1. getNecessaryTypes.py получает необходимые сущности DbPedia и записывает их в файл. Он не очень красиво написан, да и все пути в нем захардкожены. Требуется refactoring, но совсем не первостепенно.
  2. links.py получает необходимые сущности, но уже в том виде, в котором они встречаются в Wikipedia, это как раз те файлы, которые хранятся в NewWikiEntities. Пути уже не закардкожены, но написано все еще не очень оптимально.

Эти файлы (1-2) очень редко используются, поэтому можно "забить" на них на некоторое время.

  1. helper.py вспомогательный файл, который структурирует информацию, полученную от Даши, и делает костяк корпуса. Тоже не очень полезный для общества файл.

Теперь про полезное.

Получение файла с Json-разметкой для одной статьи

Этим занимается файл mainOneArticle.py. Файл получает на вход 5 параметров:

  1. Entities.txt (см. описание выше), дефолтное значение Entities.txt в текущей директории;
  2. NewWikiEntities (см. описание выше), дефолтное значение NewWikiEntities в текущей директории;
  3. article - статья Wikipedia, дефолтное значение article в текущей директории;
  4. links - файл, содержащий все сущности, встречающиеся в данной статье, дефолтное значение links в текущей директории;
  5. res.json - файл, в который будет сохранен ответ, дефолтное значение res.json в текущей директории.

Собственно, все))) Файл с разметкой готов.

Работа программы состоит из трех блоков:

  1. get wiki types: выделение тех сущностей статьи, которые подходят под те, которые мы ищем(файлы в NewWikiEntities)
  2. lemmatizer: лемматизация статьи и сущностей, сопоставление ссылок в оригинальной статье и лемматизированной.
  3. references: проставление всех ссылок

Получение корпуса, т.е. список упорядоченных статей Этим занимается файл mainCorpus.py. Файл получает на вход 3 параметра:

  1. Entities.txt (см. описание выше), дефолтное значение Entities.txt в текущей директории;
  2. NewWikiEntities (см. описание выше), дефолтное значение NewWikiEntities в текущей директории;
  3. Corpus - корпус, то есть упорядоченный список статей, разбитых по папкам, содержащим article, links. Дефолтное значение Corpus в текущей папке.

Программа просто пробегает по всем папкам и получает для каждой пары article/links res.json.

Просмотр результата работы

marking.py - файл, который генерирует htmlку с разметкой, на вход получает три файла:

  1. Статья
  2. Файл с разметкой
  3. Выходной файл с html.

Дефолтных значений не предусмотрено.

Вот, кажется, и все.

Clone this wiki locally