2016-02-29 2 views
1

Я расчета TFIDF с использованием Спарк с Python, используя следующий код:Связывание полученных TFIDF разреженных векторов в исходные документы в Спарк

hashingTF = HashingTF() 
    tf = hashingTF.transform(documents) 
    idf = IDF().fit(tf) 
    tfidf = idf.transform(tf) 
    for k in tfidf.collect(): 
     print(k) 

я получил следующие результаты для трех документов:

(1048576,[558379],[1.43841036226]) 
    (1048576,[181911,558379,959994], [0.287682072452,0.287682072452,0.287682072452]) 
    (1048576,[181911,959994],[0.287682072452,0.287682072452]) 

Предполагая, что у меня есть тысячи документов, как связать результирующие векторы TFIDF с исходными документами, зная, что мне не нужно менять хеш-ключи на исходные термины.

ответ

1

Так как documents и tfidf имеют одинаковую форму (количество разделов, количество элементов в каждой секции), и там никаких операций, которые требуют не перетасовать вы можете просто zip оба РДУ:

documents.zip(tfidf) 

реверса HashingTF является for an obvious reason не возможное.

+0

Я могу контролировать количество разделов, но как я могу контролировать количество элементов в каждом разделе? –

+0

Вы не можете. Ну ... Вы можете применять различные преобразования низкого уровня, но нет никакого способа сделать это напрямую. Вот почему 'zip' применим только в некоторых ограниченных случаях, подобных этому. В противном случае вам нужны уникальные идентификаторы и соединение. – zero323

+0

Ах, идентификаторы и присоединиться, очень хороший момент для меня, и у меня есть идентификатор с моими документами. но как я могу обеспечить выполнение вышеуказанного кода, чтобы включить его в RDD tfidf? –

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