2015-09-25 2 views
0

Я использую Scrapy для сканирования по сайтам и создания набора ссылок. Я хочу иметь возможность создавать RDF-документ, используя этот набор данных;Создание тройного магазина ссылок с использованием Scrapy

Мои троек будет иметь вид,

<ParentURL> - <HTML Text associated with Link> - <LinkURL>

Любые указатели о том, как действовать дальше? Помощь приветствуется.

ответ

-1

Поскольку ваши данные очень просты, я бы написал сценарий для преобразования вывода json или csv, сгенерированного Scrapy в RDF.

Или вы можете написать Item Exporter:

http://doc.scrapy.org/en/1.0/topics/exporters.html

1

<ParentURL> - <HTML Text associated with Link> - <LinkURL>

Это будет трудным представление, так как предикаты в RDF тройные могут быть только идентификаторы URI; они не могут быть литералами или пустыми узлами. Как я вижу, у вас есть два простых варианта.

Во-первых, вы можете просто использовать тройки как непрозрачную структуру данных и принять соглашение, в котором subject = source URL, predicate = целевой URL и object = текст ссылки. Это не совсем «RDF-ish», но для вас это будет отлично. Это имеет то преимущество, что вы можете использовать очень простую сериализацию RDF, такую ​​как N-Triples, и легко генерировать это очень легко:. Синтаксис N-Triples является одним тройным в каждой строке, URI-файлы заключены в угловые скобки, а строки заканчиваются символом '.'. Так что если вы используете это представление, вы только генерировать простой текст, как:

<http://example.org/page1> <http://example.org/page2> "See page 2 for details." . 
<http://example.org/page2> <http://example.org/page3> "See page 3 for even more details." . 

Это вполне законно N-троек документ. Это не намного легче, чем это.

Второй вариант - использовать немного больше структуры. Вы хотели бы написать что-то вроде (в Turtle):

@prefix : <http://example.org/your-prefix/> 

<http://example.org/page1> :linksTo [ :hasTargetURL <http://example.org/page2> ; :hasLinkText "see page 2" ] . 
<http://example.org/page2> :linksTo [ :hasTargetURL <http://example.org/page3> ; :hasLinkText "see page 3" ] . 

, которая использует три тройки для каждого канала вместо одного. Тем не менее, все равно довольно легко создать простой текст. Вероятно, это просто вопрос, хотите ли вы минимизировать пространство (используйте первый вариант) или сделать граф более семантически разумным (второй вариант). Некоторые тройные магазины оптимизируют запросы для предметов и объектов больше, чем для предикатов, и это также будет способствовать второму варианту.

+0

Не могли бы вы предложить какие-либо инструменты для автоматизации этого? Например, скажем, я даю команду Scraw crawl, а затем созданные тройки автоматически сбрасываются в базу данных SPARQL. Честно говоря, я не совсем уверен, как это сделать, используя Йену или Кунжут. – Edward

Смежные вопросы