2013-09-16 1 views
2

Я загрузил дамп данных rdf из Freebase, и то, что мне нужно извлечь, - это имя каждой сущности на английском языке в Freebase.Parse Freebase RDF дамп с MapReduce

Должен ли я использовать Hadoop и MapReduce для этого, если да, то как? Или есть другой способ извлечь имена сущностей?

Было бы хорошо, если каждое название лицо/имя было на отдельной строке в файле .txt

ответ

1

Нет, я не думаю, что вам нужно использовать Hadoop и MapReduce, чтобы сделать это. Вы можете легко создать веб-службу для извлечения RDF и отправки в файл. Вслед за [1] в блоге объясняется, как вы можете извлекать данные RDF с помощью сервера служб данных WSo2. Точно так же вы можете использовать WSO2 DSS федерации данных [2] функция для извлечения данных RDF и отправить его на лист данных первенствовать

[1] - http://sparkletechthoughts.blogspot.com/2011/09/extracting-rdf-data-using-wso2-data.html

[2] - http://prabathabey.blogspot.com/2011/08/data-federation-with-wso2-data-service.html

+2

Данные 20GB + сжатые и что-то вроде 250GB несжатого. Создание многотысячной базы данных для запуска простого простого запроса не кажется очень эффективным. –

2

Вы можете использовать Hadoop , но для такой простой обработки вы потратили больше времени на разжатие и разделение ввода, чем вы могли бы сэкономить, если сможете параллельно выполнять поиск. Простой zgrep выполнил бы вашу задачу за меньшее время.

Что-то вдоль линий этого:

zegrep $'name.*@en\t\\.$' freebase-public/rdf/freebase-rdf-2013-09-15-00-00.gz | cut -f 1,3 | gzip > freebase-names-20130915.txt.gz 

даст вам сжатый файл два столбца Freebase MIDs и их английских названий. Вероятно, вы захотите сделать grep более конкретным, чтобы избежать ложных срабатываний (и проверить его, чего я еще не сделал). Этот файл сжат более чем на 20GB, поэтому потребуется некоторое время, но меньше времени, чем даже приступить к подготовке задания Hadoop.

Если вы хотите сделать дополнительную фильтрацию, такую ​​как только объекты выделения с типом/общей/темы, вы можете обнаружить, что вам нужно перейти на язык сценариев, такой как Python, чтобы иметь возможность смотреть и оценивать по нескольким строкам в один раз.

+0

Когда я запускаю имя 'grep $ '. * @ En \ t \\. $' Freebase-rdf | cut -f 1,3 | gzip> freebase-names-20130915.txt.gz' все, что я получаю, это пустой файл freebase-name-20130915.txt.gz, и когда я распаковываю, что я получаю файл .cpgz и внутри которого находится файл .txt.gz и это продолжается вечно. –

+0

Что значит быть типом/общей/темой? Я думал, что типы - это категории, в которых сущности были отсортированы как люди/люди? –

+0

Вы знаете, почему команда grep, которую я запускал, не работает? –

0

Для Google Compute Engine есть screencast, который также показывает, как это сделать.

+0

Я еще не смотрел все это, я имел в виду. Разве это не только самые популярные темы в Freebase? Как получить все темы? –

+0

Кроме того, причина, по которой я избегаю Map/Reduce, заключается в том, что недавно я прочитал статью о том, что «данные, которые у вас, вероятно, недостаточно велики для Map/Reduce, и должен быть более простой способ справиться с этим». –

+0

Дамп данных RDF содержит все 40M + темы в Freebase. Я тоже видел эту статью о HN. Ответ Тома дает хорошее решение, если вы не хотите идти по маршруту Hadoop. –