2014-10-25 2 views
0

Мне нужно предварительно обработать необработанные данные на основе твитера (около 1 ГБ текстового файла). После предварительной обработки (которая включает удаление стоп-слов, специальных символов, URL-адресов), я буду выполнять индексирование на них с помощью lucene.Pre-Processing/Sanitizing Данные Twitter

Может ли кто-нибудь из вас предложить лучший способ для дезинфекции твитов?

Ниже приведен пример данных:

60730027 6298443824 thank you echo park. you've changed A LOT, but as long as I'm getting paid to make you move, I'm still with it! 2009-12-03 02:54:10 
60730027 6297282530 fat Albert Einstein goin in right now over here!!! 2009-12-03 01:35:22 
60730027 6283122724 SATURDAY NIGHT AT THE TAVERN: http://yfrog.com/4aka3cj 2009-12-02 16:21:40 
60730027 6283105517 FRIDAY NIGHT AT THE GRIFFIN: http://yfrog.com/3glqzj 2009-12-02 16:21:04 

Первый номер столбца соответствует местоположению пользователя. Однако я не уверен, что соответствует номер второго столбца.

Для Санобработки данные, я бы заменить коды местоположения пользователя с названиями городов, удалить временные метки, удалить стоп-символы, адрес и т.д.

Пожалуйста, предложите о том, как идти об этом.

Заранее благодарен!

+0

Поделитесь несколькими примерами данных для ясности (они, наверное, json), и каков ваш план. В противном случае вы получите только ответы на основе мнения, если таковые имеются. – blackSmith

+0

Привет @blackSmith, я обновил его. – Saurabh

+0

Сколько может быть «код пользователя»? в порядке 6E8? – blackSmith

ответ

1

Первое, что вам нужно - это присоединиться к столбцу кода местоположения, чтобы заменить его названиями городов. Поскольку число locationCode-city tupples (сопоставлений) относительно мало (~ 400), вы можете сделать соединение на стороне карты.

Сначала добавьте файл сопоставления в кеш перед представлением задания. В зависимости от версии использования Hadoop:

// prior to 2.2.0 
DistributedCache.addCacheFile(new Path(path/cityCode_NameMappings.txt).toUri(), conf); 

//OR 2.2.0 onwards. DistributedCache is deprecated 
job.addCacheFile(new Path(filename).toUri()); 

Получить его в setup методе Mapper используя:

Path[] cacheFiles = DistributedCache.getLocalCacheFiles(job); 

// OR 
Path[] cacheFiles = context.getLocalCacheFiles(); 

Определить файл по его имени, прочитать его и поместить содержимое в статическом HashMap<code,name> и использовать его для замены коды во входящих строках фактического файла данных twitter в методе map. Такую же стратегию можно выполнить для замены второго столбца (в настоящее время вне сферы действия), когда число возможных отображений относительно невелико.

Наконец, для выбора только тела фактического твита, регулярного выражения и простых операций с строкой, кажется, достаточно. Теперь у вас есть два варианта:

  1. Используйте класс Reducer для удаления текста. Таким образом, замена кода и извлечение твита тела будут в отдельных абстракциях.

  2. Выполняйте обработку в самом Картоне и установите количество редукторов на ноль. Это будет только работа с картой и, безусловно, будет работать быстрее, хотя выглядит довольно неплохо.

Выбор за вами. Опять же, если ваши сопоставления с кодом города были большими по количеству, у вас не было никаких вариантов, кроме как сделать соединение с уменьшенной стороны. Это будет относительно комплекс для реализации.

Вторая мысль: Если у вас есть свобода выбора другого инструмента для индексирования, кроме raw Lucene, я предлагаю вам использовать ElasticSearch (построен на Lucene). Тогда вы можете использовать Hive для соединения и использования интеграции Hive-ES для загрузки данных в индекс.Тем не менее вам приходилось выполнять обработку текста (возможно, улей-серд мог сделать трюк).

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