Скрипт производит обработку xml документа, таким образом, что удаляет статьи которые начинаются с ненужных ключевых слов (Файл:, Изображение:, Mediawiki: и Википедия: ), а потом добавляет в статью ссылки на оригинальную статью в Википедии. Проблема в том что удаляются и некоторые статьи не содержащие в титле ключевых слов
Вот скрипт
<?php
// Устанавливаем не ограниченное время выполнения скрипта
set_time_limit(0);
// Открываем дамп
$fd = fopen("dump.txt", "rb");
if(!$fd) exit("Файл отсутствует");
// Открываем файл для разультата
$fp = fopen("result.txt", "a");
if(!$fp) exit("Не возможности создать файл назначения");
// Флаги состоянния
$found_page = false;
$found_title = false;
$found_article = false;
$title = "";
$article = "";
$arr = array("Файл:", "Изображение:", "Mediawiki:", "Википедия:");
// Построчно анализируем файл
while($line = fgets($fd, 10000))
{
if(!$found_page)
{
// Начало новой статьи пока не найдено
if(stripos($line, "<page>") !== false)
{
$found_page = true;
$title = "";
$article = "";
}
}
else
{
// Начало статьи найдено
if(!$found_title)
{
if(stripos($line, "<title>") !== false)
{
// Найден заголовок
$found_title = true;
// Извлекаем названия
$pattern = "|<title>(.*?)</title>|is";
if(preg_match($pattern, $line, $out))
{
$title = $out[1];
// Игнорируем "Файл:", "Изображение:", "Mediawiki:", "Википедия:"
foreach($arr as $word)
{
if(stripos($line, $word) !== false)
{
$found_page = false;
$found_title = false;
}
}
}
}
}
else
{
if(!$found_article)
{
if(stripos($line, "<text") !== false)
{
$found_article = true;
$article .= $line;
}
}
else
{
$article .= $line;
if(stripos($line, "</text>") !== false)
{
$found_page = false;
$found_title = false;
$found_article = false;
// Оставляем запись в файле назначения
$pattern = "|<text[^>]+>(.*?)</text>|is";
if(preg_match($pattern, $article, $out))
{
fwrite($fp, "<page>
<title>".$title."</title>
<id>380248</id>
<revision>
<id>2097005</id>
<timestamp>2008-12-16T14:07:23Z</timestamp>
<contributor>
<username>mp_petrol</username>
<id>9835</id>
</contributor>
<minor />
<comment>Комментарий</comment>
<text xml:space=\"preserve\">{{Оригинал статьи|httр://ru.wikipedia.org/wiki/".rawurlencode($title).
"}} $out[1]</text></revision>
</page>\r\n"); }
}
}
}
}
}
// Закрываем файлы
fclose($fd);
fclose($fp);
?>
А вот такая структура xml дампа
<page>
<title>Заголовок</title>
<id>380248</id>
<revision>
<id>2097005</id>
<timestamp>2008-12-16T14:07:23Z</timestamp>
<contributor>
<username>User</username>
<id>9835</id>
</contributor>
<minor />
<comment>Комментарий</comment>
<text xml:space="preserve">Текст статьи с вики разметкой</text>
</revision>
</page>
И так далее