TF-IDF или Term Frequency-Inverse Document Frequency обычно используется для интеллектуального анализа текста. Вес tf-idf используется для оценки важности ключевого слова для документирования в коллекции документов с использованием статистической меры. Мы можем найти статью, которая имеет самое высокое отношение к ключевому слову.

Хорошо, сначала импортируем пакет python

from pyspark import SparkConf, SparkContext
from pyspark.mllib.feature import HashingTF
from pyspark.mllib.feature import IDF

Следует помнить, что для запуска этой программы pyspark нужно numpy. Итак, вам также необходимо установить пакет numpy.

После этого нам нужно создать конфигурацию для Spark:

conf = SparkConf().setMaster("local[*]").setAppName("SparkTFIDF")
sc = SparkContext(conf=conf)

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

rawData = sc.textFile("dataset.tsv")

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

kecilRawData = rawData.map(lambda x: x.lower())
fields = kecilRawData.map(lambda x: x.split("\t"))
documents = fields.map(lambda x: x[2].split(" "))
documentId = fields.map(lambda x: x[0])

Этот код обрабатывает все данные в нижнем регистре, а затем разделяет данные с помощью регулярного выражения \ t, потому что данные, разделенные табуляцией (.tsv), вам нужно настроить, например, набор данных, который вы использовали, например, если вы используете .csv, вы можете использовать запятую (, ), чтобы разделить данные. И затем нам нужно сохранить идентификатор документа, чтобы идентифицировать, к какому документу принадлежит.

Мы можем создать hashingTF с помощью HashingTF и установить для векторов признаков фиксированной длины значение 100000, на самом деле значение можно настроить в качестве векторов признаков, которые будут использоваться. А затем мы можем использовать результат hashingTF для преобразования документа в tf.

hashingTF = HashingTF(100000)
tf = hashingTF.transform(documents)

После того, как мы получили tf, мы можем создать idf, используя этот код

tf.cache()
idf = IDF(minDocFreq=1).fit(tf)

У нас есть tf и idf, после этого нам нужно создать tf-idf, используя этот

tfidf = idf.transform(tf)

После того, как мы получили tf-idf, мы можем использовать его для поиска наиболее подходящей статьи с помощью ключевого слова. Нам нужно добавить этот код, чтобы найти наиболее похожую статью с ключевым словом.

keywordTF = hashingTF.transform([keyword.lower()])
keywordHashValue = int(keywordTF.indices[0])

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

keywordRelevance = tfidf.map(lambda x: x[keywordHashValue])
zippedResults = keywordRelevance.zip(documentId)

Тогда как узнать, какая статья наиболее релевантна моему ключевому слову? вы можете проверить с помощью этого кода

print(zippedResults.max())

Давайте попробуем, код, когда я задаю ключевое слово со строкой «MacGyver», программа покажет результат.

И вот набор данных

В индексном документе с идентификатором 8 мы можем найти статью MacGyver.