Создать Вектор всех слов в документах, используя PySpark - PullRequest
0 голосов
/ 25 октября 2018

У меня есть несколько документов, и моя цель - вычислить косинусное сходство для каждой пары документов.Вес, который я хочу использовать для слов каждого документа, не является знаменитой функцией TF-IDF.Итак, на первом шаге я рассчитал вес слова для каждого документа.В указанном ниже формате, сохраненном в СДР:

(u'hats', 2, 2, '1008044170823364608,1008043547541626881', 6.0)

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

def tokenizeForVector(row):
    res = []
    words = word_tokenize(row)
    for word in words:
        if word not in stop_words and word not in res:
            res.append((word))
    return res
Vector_of_Words = selected_data.select('text').rdd\
     .map(lambda x : x[0].encode("ascii", "ignore"))\
    .flatMap(lambda row : tokenizeForVector(row))
 Vector_of_Words_Broadcast = sc.broadcast(Vector_of_Words.collect())

Но я обнаружил, что он содержит повторяющиеся слова, и это потому, что Spark применяет описанный выше процесс к каждомуразделы данных, и это может быть одним словом, включенным в более чем один раздел.Можно ли сгенерировать вектор слов с помощью PySpark?

Примечание: я пробовал word2vec:

Vector_of_Words = selected_data.select('text').rdd\
    .map(lambda x : word_tokenize(x[0]))
print(Vector_of_Words.first())

word2vec = Word2Vec()
model = word2vec.fit(Vector_of_Words)

print model.getVectors().keys()

, но я не знаю, рассчитывает ли он только векторслова.Я предполагаю, что это создает модель и не является хорошим выбором для моего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...